summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2001-04-17 12:23:50 +0000
committerru <ru@FreeBSD.org>2001-04-17 12:23:50 +0000
commit61352401d3a90e1f7df92a3b0c656abdd58db6cf (patch)
tree00e2ca5da289f187526a4d9a20bc79d3dbf54dc8
parent42d565388eaa8c9f931d7188a3f2f9c5951f6b3b (diff)
downloadFreeBSD-src-61352401d3a90e1f7df92a3b0c656abdd58db6cf.zip
FreeBSD-src-61352401d3a90e1f7df92a3b0c656abdd58db6cf.tar.gz
This commit was generated by cvs2svn to compensate for changes in r75587,
which included commits to RCS files with non-trunk default branches.
-rw-r--r--contrib/groff/addftinfo/Makefile.sub11
-rw-r--r--contrib/groff/addftinfo/addftinfo.cc196
-rw-r--r--contrib/groff/addftinfo/guess.cc490
-rw-r--r--contrib/groff/addftinfo/guess.h44
-rw-r--r--contrib/groff/afmtodit/Makefile.sub21
-rw-r--r--contrib/groff/afmtodit/afmtodit.man222
-rw-r--r--contrib/groff/afmtodit/afmtodit.pl326
-rw-r--r--contrib/groff/devX100-12/CB308
-rw-r--r--contrib/groff/devX100-12/CBI308
-rw-r--r--contrib/groff/devX100-12/CI308
-rw-r--r--contrib/groff/devX100-12/CR308
-rw-r--r--contrib/groff/devX100-12/DESC9
-rw-r--r--contrib/groff/devX100-12/HB308
-rw-r--r--contrib/groff/devX100-12/HBI308
-rw-r--r--contrib/groff/devX100-12/HI308
-rw-r--r--contrib/groff/devX100-12/HR308
-rw-r--r--contrib/groff/devX100-12/Makefile.sub2
-rw-r--r--contrib/groff/devX100-12/NB308
-rw-r--r--contrib/groff/devX100-12/NBI308
-rw-r--r--contrib/groff/devX100-12/NI308
-rw-r--r--contrib/groff/devX100-12/NR308
-rw-r--r--contrib/groff/devX100-12/S226
-rw-r--r--contrib/groff/devX100-12/TB308
-rw-r--r--contrib/groff/devX100-12/TBI308
-rw-r--r--contrib/groff/devX100-12/TI308
-rw-r--r--contrib/groff/devX100-12/TR308
-rw-r--r--contrib/groff/devX100/CB308
-rw-r--r--contrib/groff/devX100/CBI308
-rw-r--r--contrib/groff/devX100/CI308
-rw-r--r--contrib/groff/devX100/CR308
-rw-r--r--contrib/groff/devX100/DESC9
-rw-r--r--contrib/groff/devX100/HB308
-rw-r--r--contrib/groff/devX100/HBI308
-rw-r--r--contrib/groff/devX100/HI308
-rw-r--r--contrib/groff/devX100/HR308
-rw-r--r--contrib/groff/devX100/Makefile.sub2
-rw-r--r--contrib/groff/devX100/NB308
-rw-r--r--contrib/groff/devX100/NBI308
-rw-r--r--contrib/groff/devX100/NI308
-rw-r--r--contrib/groff/devX100/NR308
-rw-r--r--contrib/groff/devX100/S226
-rw-r--r--contrib/groff/devX100/TB308
-rw-r--r--contrib/groff/devX100/TBI308
-rw-r--r--contrib/groff/devX100/TI308
-rw-r--r--contrib/groff/devX100/TR308
-rw-r--r--contrib/groff/devX75-12/CB308
-rw-r--r--contrib/groff/devX75-12/CBI308
-rw-r--r--contrib/groff/devX75-12/CI308
-rw-r--r--contrib/groff/devX75-12/CR308
-rw-r--r--contrib/groff/devX75-12/DESC9
-rw-r--r--contrib/groff/devX75-12/HB308
-rw-r--r--contrib/groff/devX75-12/HBI308
-rw-r--r--contrib/groff/devX75-12/HI308
-rw-r--r--contrib/groff/devX75-12/HR308
-rw-r--r--contrib/groff/devX75-12/Makefile.sub2
-rw-r--r--contrib/groff/devX75-12/NB308
-rw-r--r--contrib/groff/devX75-12/NBI308
-rw-r--r--contrib/groff/devX75-12/NI308
-rw-r--r--contrib/groff/devX75-12/NR308
-rw-r--r--contrib/groff/devX75-12/S226
-rw-r--r--contrib/groff/devX75-12/TB308
-rw-r--r--contrib/groff/devX75-12/TBI308
-rw-r--r--contrib/groff/devX75-12/TI308
-rw-r--r--contrib/groff/devX75-12/TR308
-rw-r--r--contrib/groff/devX75/CB308
-rw-r--r--contrib/groff/devX75/CBI308
-rw-r--r--contrib/groff/devX75/CI308
-rw-r--r--contrib/groff/devX75/CR308
-rw-r--r--contrib/groff/devX75/DESC9
-rw-r--r--contrib/groff/devX75/HB308
-rw-r--r--contrib/groff/devX75/HBI308
-rw-r--r--contrib/groff/devX75/HI308
-rw-r--r--contrib/groff/devX75/HR308
-rw-r--r--contrib/groff/devX75/Makefile.sub2
-rw-r--r--contrib/groff/devX75/NB308
-rw-r--r--contrib/groff/devX75/NBI308
-rw-r--r--contrib/groff/devX75/NI308
-rw-r--r--contrib/groff/devX75/NR308
-rw-r--r--contrib/groff/devX75/S226
-rw-r--r--contrib/groff/devX75/TB308
-rw-r--r--contrib/groff/devX75/TBI308
-rw-r--r--contrib/groff/devX75/TI308
-rw-r--r--contrib/groff/devX75/TR308
-rw-r--r--contrib/groff/devascii/Makefile.sub31
-rw-r--r--contrib/groff/devcp1047/DESC.proto8
-rw-r--r--contrib/groff/devcp1047/Makefile.sub32
-rw-r--r--contrib/groff/devcp1047/R.proto356
-rw-r--r--contrib/groff/devdvi/B358
-rw-r--r--contrib/groff/devdvi/BI365
-rw-r--r--contrib/groff/devdvi/CW160
-rw-r--r--contrib/groff/devdvi/CWI160
-rw-r--r--contrib/groff/devdvi/DESC.in10
-rw-r--r--contrib/groff/devdvi/EX144
-rw-r--r--contrib/groff/devdvi/H307
-rw-r--r--contrib/groff/devdvi/HB307
-rw-r--r--contrib/groff/devdvi/HI308
-rw-r--r--contrib/groff/devdvi/I366
-rw-r--r--contrib/groff/devdvi/MI136
-rw-r--r--contrib/groff/devdvi/Makefile.sub11
-rw-r--r--contrib/groff/devdvi/R441
-rw-r--r--contrib/groff/devdvi/S153
-rw-r--r--contrib/groff/devdvi/SA143
-rw-r--r--contrib/groff/devdvi/SB132
-rwxr-xr-xcontrib/groff/devdvi/generate/CompileFonts15
-rw-r--r--contrib/groff/devdvi/generate/Makefile107
-rw-r--r--contrib/groff/devdvi/generate/cork.map206
-rw-r--r--contrib/groff/devdvi/generate/msam.map127
-rw-r--r--contrib/groff/devdvi/generate/msbm.map121
-rw-r--r--contrib/groff/devdvi/generate/texb.map127
-rw-r--r--contrib/groff/devdvi/generate/texex.map100
-rw-r--r--contrib/groff/devdvi/generate/texi.map127
-rw-r--r--contrib/groff/devdvi/generate/texmi.map32
-rw-r--r--contrib/groff/devdvi/generate/texr.map127
-rw-r--r--contrib/groff/devdvi/generate/texsy.map100
-rw-r--r--contrib/groff/devdvi/generate/textt.map126
-rw-r--r--contrib/groff/devhtml/CB308
-rw-r--r--contrib/groff/devhtml/CBI308
-rw-r--r--contrib/groff/devhtml/CI308
-rw-r--r--contrib/groff/devhtml/CR308
-rw-r--r--contrib/groff/devhtml/DESC12
-rw-r--r--contrib/groff/devhtml/HB308
-rw-r--r--contrib/groff/devhtml/HBI308
-rw-r--r--contrib/groff/devhtml/HI308
-rw-r--r--contrib/groff/devhtml/HR308
-rw-r--r--contrib/groff/devhtml/Makefile.sub2
-rw-r--r--contrib/groff/devhtml/NB308
-rw-r--r--contrib/groff/devhtml/NBI308
-rw-r--r--contrib/groff/devhtml/NI308
-rw-r--r--contrib/groff/devhtml/NR308
-rw-r--r--contrib/groff/devhtml/S226
-rw-r--r--contrib/groff/devhtml/TB308
-rw-r--r--contrib/groff/devhtml/TBI308
-rw-r--r--contrib/groff/devhtml/TI308
-rw-r--r--contrib/groff/devhtml/TR308
-rw-r--r--contrib/groff/devlatin1/Makefile.sub32
-rw-r--r--contrib/groff/devlatin1/R.proto357
-rw-r--r--contrib/groff/devlbp/CB272
-rw-r--r--contrib/groff/devlbp/CI272
-rw-r--r--contrib/groff/devlbp/CR272
-rw-r--r--contrib/groff/devlbp/DESC.in9
-rw-r--r--contrib/groff/devlbp/EB272
-rw-r--r--contrib/groff/devlbp/EI272
-rw-r--r--contrib/groff/devlbp/ER272
-rw-r--r--contrib/groff/devlbp/HB491
-rw-r--r--contrib/groff/devlbp/HBI492
-rw-r--r--contrib/groff/devlbp/HI492
-rw-r--r--contrib/groff/devlbp/HNB491
-rw-r--r--contrib/groff/devlbp/HNBI491
-rw-r--r--contrib/groff/devlbp/HNI491
-rw-r--r--contrib/groff/devlbp/HNR491
-rw-r--r--contrib/groff/devlbp/HR491
-rw-r--r--contrib/groff/devlbp/Makefile.sub16
-rw-r--r--contrib/groff/devlbp/TB513
-rw-r--r--contrib/groff/devlbp/TBI493
-rw-r--r--contrib/groff/devlbp/TI521
-rw-r--r--contrib/groff/devlbp/TR517
-rw-r--r--contrib/groff/devlj4/ALBB790
-rw-r--r--contrib/groff/devlj4/ALBR805
-rw-r--r--contrib/groff/devlj4/AOB748
-rw-r--r--contrib/groff/devlj4/AOI813
-rw-r--r--contrib/groff/devlj4/AOR735
-rw-r--r--contrib/groff/devlj4/CB350
-rw-r--r--contrib/groff/devlj4/CBI351
-rw-r--r--contrib/groff/devlj4/CI351
-rw-r--r--contrib/groff/devlj4/CLARENDON351
-rw-r--r--contrib/groff/devlj4/CORONET351
-rw-r--r--contrib/groff/devlj4/CR350
-rw-r--r--contrib/groff/devlj4/DESC.in9
-rw-r--r--contrib/groff/devlj4/GB749
-rw-r--r--contrib/groff/devlj4/GBI752
-rw-r--r--contrib/groff/devlj4/GI686
-rw-r--r--contrib/groff/devlj4/GR872
-rw-r--r--contrib/groff/devlj4/LGB350
-rw-r--r--contrib/groff/devlj4/LGI351
-rw-r--r--contrib/groff/devlj4/LGR350
-rw-r--r--contrib/groff/devlj4/MARIGOLD351
-rw-r--r--contrib/groff/devlj4/Makefile.sub33
-rw-r--r--contrib/groff/devlj4/OB817
-rw-r--r--contrib/groff/devlj4/OBI810
-rw-r--r--contrib/groff/devlj4/OI923
-rw-r--r--contrib/groff/devlj4/OR899
-rw-r--r--contrib/groff/devlj4/S195
-rw-r--r--contrib/groff/devlj4/TB991
-rw-r--r--contrib/groff/devlj4/TBI1045
-rw-r--r--contrib/groff/devlj4/TI1131
-rw-r--r--contrib/groff/devlj4/TR878
-rw-r--r--contrib/groff/devlj4/UB829
-rw-r--r--contrib/groff/devlj4/UBI779
-rw-r--r--contrib/groff/devlj4/UCB790
-rw-r--r--contrib/groff/devlj4/UCBI698
-rw-r--r--contrib/groff/devlj4/UCI840
-rw-r--r--contrib/groff/devlj4/UCR759
-rw-r--r--contrib/groff/devlj4/UI983
-rw-r--r--contrib/groff/devlj4/UR880
-rw-r--r--contrib/groff/devlj4/generate/Makefile170
-rw-r--r--contrib/groff/devlj4/generate/special.map178
-rw-r--r--contrib/groff/devlj4/generate/text.map344
-rw-r--r--contrib/groff/devps/AB574
-rw-r--r--contrib/groff/devps/ABI575
-rw-r--r--contrib/groff/devps/AI575
-rw-r--r--contrib/groff/devps/AR574
-rw-r--r--contrib/groff/devps/BMB441
-rw-r--r--contrib/groff/devps/BMBI444
-rw-r--r--contrib/groff/devps/BMI437
-rw-r--r--contrib/groff/devps/BMR433
-rw-r--r--contrib/groff/devps/CB339
-rw-r--r--contrib/groff/devps/CBI340
-rw-r--r--contrib/groff/devps/CI340
-rw-r--r--contrib/groff/devps/CR339
-rw-r--r--contrib/groff/devps/DESC.in11
-rw-r--r--contrib/groff/devps/HB561
-rw-r--r--contrib/groff/devps/HBI562
-rw-r--r--contrib/groff/devps/HI630
-rw-r--r--contrib/groff/devps/HNB561
-rw-r--r--contrib/groff/devps/HNBI562
-rw-r--r--contrib/groff/devps/HNI630
-rw-r--r--contrib/groff/devps/HNR629
-rw-r--r--contrib/groff/devps/HR629
-rw-r--r--contrib/groff/devps/Makefile.sub35
-rw-r--r--contrib/groff/devps/NB473
-rw-r--r--contrib/groff/devps/NBI594
-rw-r--r--contrib/groff/devps/NI535
-rw-r--r--contrib/groff/devps/NR522
-rw-r--r--contrib/groff/devps/PB461
-rw-r--r--contrib/groff/devps/PBI463
-rw-r--r--contrib/groff/devps/PI465
-rw-r--r--contrib/groff/devps/PR466
-rw-r--r--contrib/groff/devps/S227
-rw-r--r--contrib/groff/devps/SS194
-rw-r--r--contrib/groff/devps/TB548
-rw-r--r--contrib/groff/devps/TBI531
-rw-r--r--contrib/groff/devps/TI544
-rw-r--r--contrib/groff/devps/TR536
-rw-r--r--contrib/groff/devps/ZCMI494
-rw-r--r--contrib/groff/devps/ZD193
-rw-r--r--contrib/groff/devps/ZDR193
-rw-r--r--contrib/groff/devps/download5
-rw-r--r--contrib/groff/devps/generate/Makefile223
-rwxr-xr-xcontrib/groff/devps/generate/afmname44
-rw-r--r--contrib/groff/devps/generate/dingbatsmap2
-rw-r--r--contrib/groff/devps/generate/dingbatsrmap1
-rw-r--r--contrib/groff/devps/generate/lgreekmap28
-rw-r--r--contrib/groff/devps/generate/symbol.sed33
-rw-r--r--contrib/groff/devps/generate/symbolchars60
-rw-r--r--contrib/groff/devps/generate/symbolsl.afm203
-rw-r--r--contrib/groff/devps/generate/textmap453
-rw-r--r--contrib/groff/devps/prologue.ps228
-rw-r--r--contrib/groff/devps/psstrip.sed7
-rw-r--r--contrib/groff/devps/symbol.afm212
-rw-r--r--contrib/groff/devps/symbolmap513
-rw-r--r--contrib/groff/devps/symbolsl.ps41
-rw-r--r--contrib/groff/devps/text.enc231
-rw-r--r--contrib/groff/devps/zapfdr.afm222
-rw-r--r--contrib/groff/devps/zapfdr.ps225
-rw-r--r--contrib/groff/devutf8/DESC.proto8
-rw-r--r--contrib/groff/devutf8/Makefile.sub32
-rw-r--r--contrib/groff/devutf8/NOTES92
-rw-r--r--contrib/groff/devutf8/R.proto471
-rw-r--r--contrib/groff/eqn/Makefile.sub57
-rw-r--r--contrib/groff/eqn/TODO49
-rw-r--r--contrib/groff/eqn/box.cc611
-rw-r--r--contrib/groff/eqn/box.h277
-rw-r--r--contrib/groff/eqn/delim.cc381
-rw-r--r--contrib/groff/eqn/eqn.h51
-rw-r--r--contrib/groff/eqn/eqn.man877
-rw-r--r--contrib/groff/eqn/eqn.y331
-rw-r--r--contrib/groff/eqn/lex.cc1165
-rw-r--r--contrib/groff/eqn/limit.cc195
-rw-r--r--contrib/groff/eqn/list.cc237
-rw-r--r--contrib/groff/eqn/main.cc358
-rw-r--r--contrib/groff/eqn/mark.cc121
-rw-r--r--contrib/groff/eqn/other.cc601
-rw-r--r--contrib/groff/eqn/over.cc196
-rw-r--r--contrib/groff/eqn/pbox.h141
-rw-r--r--contrib/groff/eqn/pile.cc293
-rw-r--r--contrib/groff/eqn/script.cc221
-rw-r--r--contrib/groff/eqn/special.cc115
-rw-r--r--contrib/groff/eqn/sqrt.cc179
-rw-r--r--contrib/groff/eqn/text.cc528
-rw-r--r--contrib/groff/grn/Makefile.sub17
-rw-r--r--contrib/groff/grn/README60
-rw-r--r--contrib/groff/grn/gprint.h84
-rw-r--r--contrib/groff/grn/grn.man634
-rw-r--r--contrib/groff/grn/hdb.cc326
-rw-r--r--contrib/groff/grn/hgraph.cc1043
-rw-r--r--contrib/groff/grn/hpoint.cc49
-rw-r--r--contrib/groff/grn/main.cc901
-rw-r--r--contrib/groff/grodvi/Makefile.sub6
-rw-r--r--contrib/groff/grodvi/dvi.cc900
-rw-r--r--contrib/groff/grodvi/grodvi.man174
-rw-r--r--contrib/groff/groff/Makefile.sub8
-rw-r--r--contrib/groff/groff/groff.cc647
-rw-r--r--contrib/groff/groff/pipeline.c421
-rw-r--r--contrib/groff/groff/pipeline.h30
-rw-r--r--contrib/groff/grog/Makefile.sub24
-rw-r--r--contrib/groff/grog/grog.man78
-rw-r--r--contrib/groff/grog/grog.pl167
-rw-r--r--contrib/groff/grog/grog.sh82
-rw-r--r--contrib/groff/grohtml/ChangeLog247
-rw-r--r--contrib/groff/grohtml/Makefile.sub10
-rw-r--r--contrib/groff/grohtml/TODO294
-rw-r--r--contrib/groff/grohtml/design.ms129
-rw-r--r--contrib/groff/grohtml/grohtml.man187
-rw-r--r--contrib/groff/grohtml/html.cc6591
-rw-r--r--contrib/groff/grohtml/html.h57
-rw-r--r--contrib/groff/grohtml/html_chars.h27
-rw-r--r--contrib/groff/grohtml/ordered_list.h193
-rw-r--r--contrib/groff/grohtml/output.cc257
-rw-r--r--contrib/groff/grolbp/Makefile.sub6
-rw-r--r--contrib/groff/grolbp/charset.h69
-rw-r--r--contrib/groff/grolbp/grolbp.man353
-rw-r--r--contrib/groff/grolbp/lbp.cc772
-rw-r--r--contrib/groff/grolbp/lbp.h512
-rw-r--r--contrib/groff/grolj4/Makefile.sub6
-rw-r--r--contrib/groff/grolj4/grolj4.man144
-rw-r--r--contrib/groff/grolj4/lj4.cc700
-rw-r--r--contrib/groff/grops/Makefile.sub12
-rw-r--r--contrib/groff/grops/TODO29
-rw-r--r--contrib/groff/grops/ps.cc1541
-rw-r--r--contrib/groff/grops/ps.h122
-rw-r--r--contrib/groff/grops/psfig.diff106
-rw-r--r--contrib/groff/grops/psrm.cc1103
-rw-r--r--contrib/groff/grotty/Makefile.sub6
-rw-r--r--contrib/groff/grotty/TODO3
-rw-r--r--contrib/groff/grotty/tty.cc474
-rw-r--r--contrib/groff/hpftodit/Makefile.sub6
-rw-r--r--contrib/groff/hpftodit/hpftodit.cc812
-rw-r--r--contrib/groff/hpftodit/hpftodit.man155
-rw-r--r--contrib/groff/include/Makefile.sub41
-rw-r--r--contrib/groff/include/assert.h39
-rw-r--r--contrib/groff/include/cmap.h56
-rw-r--r--contrib/groff/include/cset.h75
-rw-r--r--contrib/groff/include/device.h21
-rw-r--r--contrib/groff/include/driver.h39
-rw-r--r--contrib/groff/include/errarg.h46
-rw-r--r--contrib/groff/include/error.h58
-rw-r--r--contrib/groff/include/font.h116
-rw-r--r--contrib/groff/include/getopt.h169
-rw-r--r--contrib/groff/include/groff-getopt.h68
-rw-r--r--contrib/groff/include/htmlindicate.h41
-rw-r--r--contrib/groff/include/index.h42
-rw-r--r--contrib/groff/include/lib.h114
-rw-r--r--contrib/groff/include/macropath.h21
-rw-r--r--contrib/groff/include/nonposix.h137
-rw-r--r--contrib/groff/include/posix.h51
-rw-r--r--contrib/groff/include/printer.h76
-rw-r--r--contrib/groff/include/ptable.h168
-rw-r--r--contrib/groff/include/refid.h35
-rw-r--r--contrib/groff/include/search.h96
-rw-r--r--contrib/groff/include/searchpath.h29
-rw-r--r--contrib/groff/include/stringclass.h195
-rw-r--r--contrib/groff/indxbib/Makefile.sub30
-rw-r--r--contrib/groff/indxbib/dirnamemax.c49
-rw-r--r--contrib/groff/indxbib/eign133
-rw-r--r--contrib/groff/indxbib/indxbib.cc794
-rw-r--r--contrib/groff/indxbib/indxbib.man207
-rw-r--r--contrib/groff/indxbib/signal.c63
-rw-r--r--contrib/groff/libbib/Makefile.sub14
-rw-r--r--contrib/groff/libbib/common.cc38
-rw-r--r--contrib/groff/libbib/index.cc641
-rw-r--r--contrib/groff/libbib/linear.cc503
-rw-r--r--contrib/groff/libbib/map.c75
-rw-r--r--contrib/groff/libbib/search.cc132
-rw-r--r--contrib/groff/libdriver/Makefile.sub7
-rw-r--r--contrib/groff/libdriver/input.cc501
-rw-r--r--contrib/groff/libdriver/printer.cc263
-rw-r--r--contrib/groff/libgroff/Makefile.sub84
-rw-r--r--contrib/groff/libgroff/assert.cc34
-rw-r--r--contrib/groff/libgroff/change_lf.cc37
-rw-r--r--contrib/groff/libgroff/device.cc36
-rw-r--r--contrib/groff/libgroff/errarg.cc118
-rw-r--r--contrib/groff/libgroff/error.cc137
-rw-r--r--contrib/groff/libgroff/fatal.cc27
-rw-r--r--contrib/groff/libgroff/filename.cc1
-rw-r--r--contrib/groff/libgroff/fmod.c28
-rw-r--r--contrib/groff/libgroff/fontfile.cc66
-rw-r--r--contrib/groff/libgroff/getcwd.c38
-rw-r--r--contrib/groff/libgroff/getopt.c1055
-rw-r--r--contrib/groff/libgroff/getopt1.c188
-rw-r--r--contrib/groff/libgroff/htmlindicate.cc67
-rw-r--r--contrib/groff/libgroff/iftoa.c65
-rw-r--r--contrib/groff/libgroff/itoa.c43
-rw-r--r--contrib/groff/libgroff/lf.cc62
-rw-r--r--contrib/groff/libgroff/lineno.cc1
-rw-r--r--contrib/groff/libgroff/macropath.cc28
-rw-r--r--contrib/groff/libgroff/matherr.c45
-rw-r--r--contrib/groff/libgroff/nametoindex.cc118
-rw-r--r--contrib/groff/libgroff/new.cc67
-rw-r--r--contrib/groff/libgroff/prime.cc26
-rw-r--r--contrib/groff/libgroff/progname.cc1
-rw-r--r--contrib/groff/libgroff/ptable.cc52
-rw-r--r--contrib/groff/libgroff/putenv.c95
-rw-r--r--contrib/groff/libgroff/searchpath.cc118
-rw-r--r--contrib/groff/libgroff/strerror.c41
-rw-r--r--contrib/groff/libgroff/string.cc311
-rw-r--r--contrib/groff/libgroff/strsave.cc31
-rw-r--r--contrib/groff/libgroff/strtol.c131
-rw-r--r--contrib/groff/libgroff/tmpfile.cc187
-rw-r--r--contrib/groff/lkbib/Makefile.sub6
-rw-r--r--contrib/groff/lkbib/lkbib.cc124
-rw-r--r--contrib/groff/lkbib/lkbib.man110
-rw-r--r--contrib/groff/lookbib/Makefile.sub7
-rw-r--r--contrib/groff/lookbib/lookbib.cc128
-rw-r--r--contrib/groff/lookbib/lookbib.man78
-rw-r--r--contrib/groff/mm/ChangeLog493
-rw-r--r--contrib/groff/mm/Makefile.sim66
-rw-r--r--contrib/groff/mm/Makefile.sub50
-rw-r--r--contrib/groff/mm/NOTES103
-rw-r--r--contrib/groff/mm/README28
-rw-r--r--contrib/groff/mm/examples/APP352
-rw-r--r--contrib/groff/mm/examples/B1B291
-rw-r--r--contrib/groff/mm/examples/COVER235
-rw-r--r--contrib/groff/mm/examples/IND4191
-rw-r--r--contrib/groff/mm/examples/LT1058
-rw-r--r--contrib/groff/mm/examples/LT.se1062
-rw-r--r--contrib/groff/mm/examples/ML169
-rw-r--r--contrib/groff/mm/examples/MOVE175
-rw-r--r--contrib/groff/mm/examples/MUL535
-rw-r--r--contrib/groff/mm/examples/NCOL196
-rw-r--r--contrib/groff/mm/examples/ND17
-rw-r--r--contrib/groff/mm/examples/README32
-rw-r--r--contrib/groff/mm/examples/References975
-rw-r--r--contrib/groff/mm/examples/SETR109
-rw-r--r--contrib/groff/mm/groff_mm.man1895
-rw-r--r--contrib/groff/mm/groff_mmse.man82
-rw-r--r--contrib/groff/mm/mm/0.MT146
-rw-r--r--contrib/groff/mm/mm/4.MT81
-rw-r--r--contrib/groff/mm/mm/5.MT34
-rw-r--r--contrib/groff/mm/mm/ms.cov84
-rw-r--r--contrib/groff/mm/mm/se_ms.cov3
-rw-r--r--contrib/groff/mm/mmroff.man48
-rwxr-xr-xcontrib/groff/mm/mmroff.pl134
-rw-r--r--contrib/groff/mm/tmac.m3471
-rw-r--r--contrib/groff/mm/tmac.mse184
-rw-r--r--contrib/groff/nroff/Makefile.sub18
-rw-r--r--contrib/groff/pfbtops/Makefile.sub6
-rw-r--r--contrib/groff/pfbtops/pfbtops.c118
-rw-r--r--contrib/groff/pfbtops/pfbtops.man44
-rw-r--r--contrib/groff/pic/Makefile.sub31
-rw-r--r--contrib/groff/pic/TODO37
-rw-r--r--contrib/groff/pic/common.cc497
-rw-r--r--contrib/groff/pic/common.h70
-rw-r--r--contrib/groff/pic/depend21
-rw-r--r--contrib/groff/pic/lex.cc1939
-rw-r--r--contrib/groff/pic/main.cc624
-rw-r--r--contrib/groff/pic/object.cc1833
-rw-r--r--contrib/groff/pic/object.h217
-rw-r--r--contrib/groff/pic/output.h79
-rw-r--r--contrib/groff/pic/pic.h104
-rw-r--r--contrib/groff/pic/pic.man883
-rw-r--r--contrib/groff/pic/pic.y1807
-rw-r--r--contrib/groff/pic/position.h47
-rw-r--r--contrib/groff/pic/tex.cc412
-rw-r--r--contrib/groff/pic/text.h28
-rw-r--r--contrib/groff/pic/troff.cc503
-rw-r--r--contrib/groff/refer/Makefile.sub23
-rw-r--r--contrib/groff/refer/TODO124
-rw-r--r--contrib/groff/refer/command.cc807
-rw-r--r--contrib/groff/refer/command.h36
-rw-r--r--contrib/groff/refer/label.y1177
-rw-r--r--contrib/groff/refer/ref.cc1160
-rw-r--r--contrib/groff/refer/ref.h120
-rw-r--r--contrib/groff/refer/refer.cc1228
-rw-r--r--contrib/groff/refer/refer.h78
-rw-r--r--contrib/groff/refer/refer.man1302
-rw-r--r--contrib/groff/refer/token.cc378
-rw-r--r--contrib/groff/refer/token.h88
-rw-r--r--contrib/groff/soelim/Makefile.sub6
-rw-r--r--contrib/groff/soelim/TODO1
-rw-r--r--contrib/groff/soelim/soelim.cc338
-rw-r--r--contrib/groff/soelim/soelim.man76
-rw-r--r--contrib/groff/tbl/Makefile.sub12
-rw-r--r--contrib/groff/tbl/main.cc1514
-rw-r--r--contrib/groff/tbl/table.cc2778
-rw-r--r--contrib/groff/tbl/table.h152
-rw-r--r--contrib/groff/tbl/tbl.man178
-rw-r--r--contrib/groff/tfmtodit/Makefile.sub6
-rw-r--r--contrib/groff/tfmtodit/tfmtodit.cc863
-rw-r--r--contrib/groff/tfmtodit/tfmtodit.man175
-rw-r--r--contrib/groff/tmac/groff_markup.man319
-rw-r--r--contrib/groff/tmac/groff_mdoc.samples.man2925
-rw-r--r--contrib/groff/tmac/groff_msafer.man59
-rw-r--r--contrib/groff/tmac/mm.diff70
-rw-r--r--contrib/groff/tmac/tmac.X46
-rw-r--r--contrib/groff/tmac/tmac.Xps44
-rw-r--r--contrib/groff/tmac/tmac.a43
-rw-r--r--contrib/groff/tmac/tmac.an429
-rw-r--r--contrib/groff/tmac/tmac.arkup161
-rw-r--r--contrib/groff/tmac/tmac.dvi145
-rw-r--r--contrib/groff/tmac/tmac.html60
-rw-r--r--contrib/groff/tmac/tmac.latin1101
-rw-r--r--contrib/groff/tmac/tmac.lbp13
-rw-r--r--contrib/groff/tmac/tmac.lj418
-rw-r--r--contrib/groff/tmac/tmac.man1
-rw-r--r--contrib/groff/tmac/tmac.mandoc1
-rw-r--r--contrib/groff/tmac/tmac.markup1
-rw-r--r--contrib/groff/tmac/tmac.mdoc1
-rw-r--r--contrib/groff/tmac/tmac.me1
-rw-r--r--contrib/groff/tmac/tmac.ms1
-rw-r--r--contrib/groff/tmac/tmac.pic10
-rw-r--r--contrib/groff/tmac/tmac.ps53
-rw-r--r--contrib/groff/tmac/tmac.psatk61
-rw-r--r--contrib/groff/tmac/tmac.psfig87
-rw-r--r--contrib/groff/tmac/tmac.psnew26
-rw-r--r--contrib/groff/tmac/tmac.psold60
-rw-r--r--contrib/groff/tmac/tmac.pspic50
-rw-r--r--contrib/groff/tmac/tmac.s1869
-rw-r--r--contrib/groff/tmac/tmac.safer13
-rw-r--r--contrib/groff/tmac/tmac.trace10
-rw-r--r--contrib/groff/troff/Makefile.sub57
-rw-r--r--contrib/groff/troff/TODO137
-rw-r--r--contrib/groff/troff/charinfo.h171
-rw-r--r--contrib/groff/troff/column.cc732
-rw-r--r--contrib/groff/troff/dictionary.cc212
-rw-r--r--contrib/groff/troff/dictionary.h92
-rw-r--r--contrib/groff/troff/div.cc1127
-rw-r--r--contrib/groff/troff/div.h150
-rw-r--r--contrib/groff/troff/env.cc3215
-rw-r--r--contrib/groff/troff/env.h334
-rw-r--r--contrib/groff/troff/hvunits.h340
-rw-r--r--contrib/groff/troff/hyphen.us4449
-rw-r--r--contrib/groff/troff/input.cc6406
-rw-r--r--contrib/groff/troff/node.cc4920
-rw-r--r--contrib/groff/troff/node.h495
-rw-r--r--contrib/groff/troff/number.cc669
-rw-r--r--contrib/groff/troff/reg.cc473
-rw-r--r--contrib/groff/troff/reg.h73
-rw-r--r--contrib/groff/troff/request.h79
-rw-r--r--contrib/groff/troff/symbol.cc150
-rw-r--r--contrib/groff/troff/symbol.h73
-rw-r--r--contrib/groff/troff/token.h201
-rw-r--r--contrib/groff/troff/troff.h83
-rw-r--r--contrib/groff/xditview/ChangeLog378
-rw-r--r--contrib/groff/xditview/DESC9
-rw-r--r--contrib/groff/xditview/Dvi.c573
-rw-r--r--contrib/groff/xditview/Dvi.h46
-rw-r--r--contrib/groff/xditview/DviChar.c664
-rw-r--r--contrib/groff/xditview/DviChar.h37
-rw-r--r--contrib/groff/xditview/DviP.h233
-rw-r--r--contrib/groff/xditview/FontMap17
-rw-r--r--contrib/groff/xditview/GXditview-ad.h52
-rw-r--r--contrib/groff/xditview/GXditview.ad57
-rw-r--r--contrib/groff/xditview/INSTALL20
-rw-r--r--contrib/groff/xditview/Imakefile.in99
-rw-r--r--contrib/groff/xditview/Menu.h46
-rw-r--r--contrib/groff/xditview/README14
-rw-r--r--contrib/groff/xditview/TODO17
-rw-r--r--contrib/groff/xditview/XFontName.c256
-rw-r--r--contrib/groff/xditview/XFontName.h45
-rw-r--r--contrib/groff/xditview/ad2c62
-rw-r--r--contrib/groff/xditview/device.c594
-rw-r--r--contrib/groff/xditview/device.h21
-rw-r--r--contrib/groff/xditview/draw.c721
-rw-r--r--contrib/groff/xditview/font.c471
-rw-r--r--contrib/groff/xditview/gray1.bm4
-rw-r--r--contrib/groff/xditview/gray2.bm4
-rw-r--r--contrib/groff/xditview/gray3.bm4
-rw-r--r--contrib/groff/xditview/gray4.bm4
-rw-r--r--contrib/groff/xditview/gray5.bm4
-rw-r--r--contrib/groff/xditview/gray6.bm4
-rw-r--r--contrib/groff/xditview/gray7.bm4
-rw-r--r--contrib/groff/xditview/gray8.bm4
-rw-r--r--contrib/groff/xditview/gxditview.man246
-rw-r--r--contrib/groff/xditview/lex.c103
-rw-r--r--contrib/groff/xditview/page.c88
-rw-r--r--contrib/groff/xditview/parse.c334
-rw-r--r--contrib/groff/xditview/xdit.bm14
-rw-r--r--contrib/groff/xditview/xdit_mask.bm14
-rw-r--r--contrib/groff/xditview/xditview.c594
-rw-r--r--contrib/groff/xditview/xtotroff.c311
570 files changed, 0 insertions, 198845 deletions
diff --git a/contrib/groff/addftinfo/Makefile.sub b/contrib/groff/addftinfo/Makefile.sub
deleted file mode 100644
index 23848d5..0000000
--- a/contrib/groff/addftinfo/Makefile.sub
+++ /dev/null
@@ -1,11 +0,0 @@
-PROG=addftinfo
-MAN1=addftinfo.n
-XLIBS=$(LIBGROFF)
-OBJS=\
- addftinfo.o \
- guess.o
-CCSRCS=\
- $(srcdir)/addftinfo.cc \
- $(srcdir)/guess.cc
-HDRS=\
- $(srcdir)/guess.h
diff --git a/contrib/groff/addftinfo/addftinfo.cc b/contrib/groff/addftinfo/addftinfo.cc
deleted file mode 100644
index 55b6242..0000000
--- a/contrib/groff/addftinfo/addftinfo.cc
+++ /dev/null
@@ -1,196 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "lib.h"
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "guess.h"
-
-static void usage();
-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];
- 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;
- int i;
- for (i = 1; i < argc && argv[i][0] == '-'; i++) {
- if (argv[i][1] == '-' && argv[i][2] == '\0') {
- i++;
- break;
- }
- if (i + 1 >= argc)
- usage();
- int 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()
-{
- fprintf(stderr, "usage: %s [-param value] ... resolution unitwidth font\n",
- program_name);
- exit(1);
-}
-
-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/addftinfo/guess.cc b/contrib/groff/addftinfo/guess.cc
deleted file mode 100644
index dcfd4c9..0000000
--- a/contrib/groff/addftinfo/guess.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/addftinfo/guess.h b/contrib/groff/addftinfo/guess.h
deleted file mode 100644
index 4471dda..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/afmtodit/Makefile.sub b/contrib/groff/afmtodit/Makefile.sub
deleted file mode 100644
index 9fee2de..0000000
--- a/contrib/groff/afmtodit/Makefile.sub
+++ /dev/null
@@ -1,21 +0,0 @@
-MAN1=afmtodit.n
-CLEANADD=afmtodit
-
-all: afmtodit
-
-afmtodit: afmtodit.pl
- if test -n "$(PERLPATH)"; then \
- sed -e 's;/usr/bin/perl;$(PERLPATH);' \
- $(srcdir)/afmtodit.pl >afmtodit; \
- else \
- cp $(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/afmtodit/afmtodit.man b/contrib/groff/afmtodit/afmtodit.man
deleted file mode 100644
index e0631e0..0000000
--- a/contrib/groff/afmtodit/afmtodit.man
+++ /dev/null
@@ -1,222 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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 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
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-ns
-.OP \-d desc_file
-.OP \-e enc_file
-.OP \-i n
-.OP \-a n
-.I afm_file
-.I map_file
-.I font
-.br
-.ad \na
-.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 3 installed in order to run
-.BR afmtodit .
-.I afm_file
-is the AFM (Adobe Font Metric) file for the font.
-.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.
-.I font
-is the groff name of the font.
-If a PostScript character is in the encoding to be used for the font
-but is not mentioned in
-.I map_file
-then
-.B afmtodit
-will put it in the groff font file as an unnamed character,
-which can be accessed by the
-.B \eN
-escape sequence in
-.BR troff .
-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
-.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
-.BI \-d desc_file
-The device description file is
-.I desc_file
-rather than the default
-.BR DESC .
-.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@).
-.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 \-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 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.
-.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)
diff --git a/contrib/groff/afmtodit/afmtodit.pl b/contrib/groff/afmtodit/afmtodit.pl
deleted file mode 100644
index a44ae7a..0000000
--- a/contrib/groff/afmtodit/afmtodit.pl
+++ /dev/null
@@ -1,326 +0,0 @@
-#! /usr/bin/perl -P-
-# -*- Perl -*-
-#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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-$prog = $0;
-$prog =~ s@.*/@@;
-
-do 'getopts.pl';
-do Getopts('e:sd:i:a:n');
-
-if ($#ARGV != 2) {
- die "Usage: $prog [-ns] [-d DESC] [-e encoding] [-i n] [-a angle] afmfile mapfile font\n";
-}
-
-$afm = $ARGV[0];
-$map = $ARGV[1];
-$font = $ARGV[2];
-$desc = $opt_d || "DESC";
-
-# read the afm file
-
-open(AFM, $afm) || die "$prog: can't open \`$ARGV[0]': $!\n";
-
-while (<AFM>) {
- chop;
- @field = split(' ');
- 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(' ');
- last if ($field[0] eq "EndCharMetrics");
- if ($field[0] eq "C") {
- $c = -1;
- $wx = 0;
- $n = "";
- $lly = 0;
- $ury = 0;
- $llx = 0;
- $urx = 0;
- $c = $field[1];
- $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") {
- push(ligatures, $field[$i + 2]);
- $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;
- }
- }
- }
-}
-close(AFM);
-
-# read the DESC file
-
-$sizescale = 1;
-
-open(DESC, $desc) || die "$prog: can't open \`$desc': $!\n";
-while (<DESC>) {
- next if /^#/;
- chop;
- @field = split(' ');
- last if $field[0] eq "charset";
- if ($field[0] eq "res") { $resolution = $field[1]; }
- if ($field[0] eq "unitwidth") { $unitwidth = $field[1]; }
- if ($field[0] eq "sizescale") { $sizescale = $field[1]; }
-}
-close(DESC);
-
-if ($opt_e) {
- # read the encoding file
-
- open(ENCODING, $opt_e) || die "$prog: can't open \`$opt_e': $!\n";
- while (<ENCODING>) {
- chop;
- @field = split(' ');
- 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
-
-open(MAP, $map) || die "$prog: can't open \`$map': $!\n";
-while (<MAP>) {
- next if /^#/;
- chop;
- @field = split(' ');
- if ($#field == 1 && $in_encoding{$field[0]}) {
- if (defined $mapped{$field[1]}) {
- warn "Both $mapped{$field[1]} and $field[0] map to $field[1]";
- }
- elsif ($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;
- $mapped{$field[1]} = $field[0];
- }
- }
-}
-close(MAP);
-
-$italic_angle = $opt_a if $opt_a;
-
-# 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", do conv($width{"space"})) if defined $width{"space"};
-
-if ($opt_e) {
- $e = $opt_e;
- $e =~ s@.*/@@;
- print("encoding $e\n");
-}
-
-if (!$opt_n && $#ligatures >= 0) {
- print("ligatures");
- foreach $lig (@ligatures) {
- print(" $lig");
- }
- print(" 0\n");
-}
-
-if ($#kern1 >= 0) {
- print("kernpairs\n");
-
- for ($i = 0; $i <= $#kern1; $i++) {
- $c1 = $kern1[$i];
- $c2 = $kern2[$i];
- if ($in_encoding{$c1} == 1 && $nmap{$c1} != 0
- && $in_encoding{$c2} == 1 && $nmap{$c2} != 0) {
- for ($j = 0; $j < $nmap{$c1}; $j++) {
- for ($k = 0; $k < $nmap{$c2}; $k++) {
- if ($kernx[$i] != 0) {
- printf("%s %s %d\n",
- $map{$c1,$j},
- $map{$c2,$k},
- do conv($kernx[$i]));
- }
- }
- }
- }
- }
-}
-
-# characters not shorter than asc_boundary are considered to have ascenders
-$asc_boundary = $height{"t"} - 1;
-
-# likewise for descenders
-$desc_boundary = $depth{"g"};
-$desc_boundary = $depth{"j"} if $depth{"j"} < $desc_boundary;
-$desc_boundary = $depth{"p"} if $depth{"p"} < $desc_boundary;
-$desc_boundary = $depth{"q"} if $depth{"q"} < $desc_boundary;
-$desc_boundary = $depth{"y"} if $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 ($i = 0; $i < 256; $i++) {
- $ch = $encoding[$i];
- if ($ch ne "" && $ch ne "space") {
- $map{$ch,"0"} = "---" if $nmap{$ch} == 0;
- $type = 0;
- $h = $height{$ch};
- $h = 0 if $h < 0;
- $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"}, do conv($width{$ch}));
- $italic_correction = 0;
- $left_math_fit = 0;
- $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 $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", do conv($h), do conv($d));
- printf(",%d,%d,%d", do conv($italic_correction),
- do conv($left_math_fit),
- do conv($subscript_correction));
- }
- elsif ($left_math_fit != 0) {
- printf(",%d,%d", do conv($h), do conv($d));
- printf(",%d,%d", do conv($italic_correction),
- do conv($left_math_fit));
- }
- elsif ($italic_correction != 0) {
- printf(",%d,%d", do conv($h), do conv($d));
- printf(",%d", do conv($italic_correction));
- }
- elsif ($d != 0) {
- printf(",%d,%d", do conv($h), do conv($d));
- }
- else {
- # always put the height in to stop groff guessing
- printf(",%d", do conv($h));
- }
- printf("\t%d", $type);
- printf("\t0%03o\t-- %s\n", $i, $ch);
- for ($j = 1; $j < $nmap{$ch}; $j++) {
- printf("%s\t\"\n", $map{$ch,$j});
- }
- }
- if ($ch eq "space" && defined $width{"space"}) {
- printf("space\t%d\t0\t0%03o\n", do conv($width{"space"}), $i);
- }
-}
-
-sub conv {
- $_[0]*$unitwidth*$resolution/(72*1000*$sizescale) + ($_[0] < 0 ? -.5 : .5);
-}
diff --git a/contrib/groff/devX100-12/CB b/contrib/groff/devX100-12/CB
deleted file mode 100644
index d151ee3..0000000
--- a/contrib/groff/devX100-12/CB
+++ /dev/null
@@ -1,308 +0,0 @@
-name CB
-spacewidth 10
-charset
---- 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
-eq "
-> 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
-or "
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,7 0 0254
-¬ "
-- 10,6 0 0255
-hy "
-­ "
-rg 10,10 0 0256
-® "
-a- 10,10 0 0257
-¯ "
-de 10,11 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 10,11 0 0262
-² "
-S3 10,11 0 0263
-³ "
-aa 10,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/CBI b/contrib/groff/devX100-12/CBI
deleted file mode 100644
index f298973..0000000
--- a/contrib/groff/devX100-12/CBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CBI
-spacewidth 10
-charset
---- 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
-eq "
-> 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
-or "
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,7 0 0254
-¬ "
-- 10,6 0 0255
-hy "
-­ "
-rg 10,10 0 0256
-® "
-a- 10,9 0 0257
-¯ "
-de 10,11 0 0260
-° "
-+- 10,10 0 0261
-± "
-S2 10,11 0 0262
-² "
-S3 10,11 0 0263
-³ "
-aa 10,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/CI b/contrib/groff/devX100-12/CI
deleted file mode 100644
index 3f1437f..0000000
--- a/contrib/groff/devX100-12/CI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CI
-spacewidth 10
-charset
---- 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
-eq "
-> 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
-or "
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,6 0 0254
-¬ "
-- 10,5 0 0255
-hy "
-­ "
-rg 10,10 0 0256
-® "
-a- 10,10 0 0257
-¯ "
-de 10,11 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 10,11 0 0262
-² "
-S3 10,11 0 0263
-³ "
-aa 10,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/CR b/contrib/groff/devX100-12/CR
deleted file mode 100644
index 895c5dd..0000000
--- a/contrib/groff/devX100-12/CR
+++ /dev/null
@@ -1,308 +0,0 @@
-name CR
-spacewidth 10
-charset
---- 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
-eq "
-> 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
-or "
-ba "
-} 10,11,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,6 0 0254
-¬ "
-- 10,5 0 0255
-hy "
-­ "
-rg 10,10 0 0256
-® "
-a- 10,9 0 0257
-¯ "
-de 10,11 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 10,11 0 0262
-² "
-S3 10,11 0 0263
-³ "
-aa 10,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/DESC b/contrib/groff/devX100-12/DESC
deleted file mode 100644
index ead70b9..0000000
--- a/contrib/groff/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/devX100-12/HB b/contrib/groff/devX100-12/HB
deleted file mode 100644
index 9e91e0b..0000000
--- a/contrib/groff/devX100-12/HB
+++ /dev/null
@@ -1,308 +0,0 @@
-name HB
-spacewidth 5
-charset
---- 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
-' 5,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
-\- 10,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
-eq "
-> 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
-` 5,12 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,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
-or "
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,7 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 6,11 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 6,13 0 0264
-´ "
-µ 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 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
-Ö "
-mu 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 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,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
-ö "
-di 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/devX100-12/HBI b/contrib/groff/devX100-12/HBI
deleted file mode 100644
index 12011ca..0000000
--- a/contrib/groff/devX100-12/HBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HBI
-spacewidth 5
-charset
---- 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
-' 5,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
-\- 10,5 0 055
-. 4,2 0 056
-/ 5,12 0 057
-sl "
-0 10,12 0 060
-1 9,12 0 061
-2 10,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
-eq "
-> 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
-` 5,12 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
-or "
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,7 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 6,11 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 6,13 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/HI b/contrib/groff/devX100-12/HI
deleted file mode 100644
index c5be9f9..0000000
--- a/contrib/groff/devX100-12/HI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HI
-spacewidth 5
-charset
---- 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
-' 4,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
-\- 10,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
-eq "
-> 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
-` 4,12 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
-or "
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,6 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 6,11 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 6,13 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/HR b/contrib/groff/devX100-12/HR
deleted file mode 100644
index 55d6bf5..0000000
--- a/contrib/groff/devX100-12/HR
+++ /dev/null
@@ -1,308 +0,0 @@
-name HR
-spacewidth 5
-charset
---- 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
-' 4,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
-\- 10,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
-eq "
-> 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
-` 4,12 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
-or "
-ba "
-} 6,12,4 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,6 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 6,11 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 6,13 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/Makefile.sub b/contrib/groff/devX100-12/Makefile.sub
deleted file mode 100644
index d074757..0000000
--- a/contrib/groff/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/devX100-12/NB b/contrib/groff/devX100-12/NB
deleted file mode 100644
index 975de35..0000000
--- a/contrib/groff/devX100-12/NB
+++ /dev/null
@@ -1,308 +0,0 @@
-name NB
-spacewidth 4
-charset
---- 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
-\- 10,5 0 055
-. 5,3 0 056
-/ 5,12 0 057
-sl "
-0 10,12 0 060
-1 9,12 0 061
-2 9,12 0 062
-3 10,12 0 063
-4 9,12 0 064
-5 10,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 6,12,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,7 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 6,11 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 6,12 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/NBI b/contrib/groff/devX100-12/NBI
deleted file mode 100644
index d67e0e4..0000000
--- a/contrib/groff/devX100-12/NBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 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
-' 4,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
-\- 10,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 10,12 0 065
-6 10,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 7,12,2 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,7 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 6,11 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,8 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 6,12 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/NI b/contrib/groff/devX100-12/NI
deleted file mode 100644
index be54ca3..0000000
--- a/contrib/groff/devX100-12/NI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NI
-spacewidth 4
-charset
---- 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
-' 3,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
-\- 10,5 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
-eq "
-> 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
-` 3,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
-or "
-ba "
-} 6,12,2 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 5,10 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 5,12 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/NR b/contrib/groff/devX100-12/NR
deleted file mode 100644
index f4f922e..0000000
--- a/contrib/groff/devX100-12/NR
+++ /dev/null
@@ -1,308 +0,0 @@
-name NR
-spacewidth 4
-charset
---- 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
-\- 10,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,8 0 072
-; 4,8,3 0 073
-< 10,8 0 074
-= 10,6 0 075
-eq "
-> 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
-` 3,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
-or "
-ba "
-} 6,12,2 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 12,12 0 0256
-® "
-a- 5,10 0 0257
-¯ "
-de 7,12 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 6,12 0 0262
-² "
-S3 6,12 0 0263
-³ "
-aa 5,12 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/S b/contrib/groff/devX100-12/S
deleted file mode 100644
index 453c295..0000000
--- a/contrib/groff/devX100-12/S
+++ /dev/null
@@ -1,226 +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,4 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
-or "
-| "
-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
---- 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
-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 "
-bv "
---- 13,13 0 0360
-ra 5,13,2 0 0361
-is 5,13,4 0 0362
---- 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/devX100-12/TB b/contrib/groff/devX100-12/TB
deleted file mode 100644
index b81e017..0000000
--- a/contrib/groff/devX100-12/TB
+++ /dev/null
@@ -1,308 +0,0 @@
-name TB
-spacewidth 4
-charset
---- 4,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
-' 6,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
-\- 9,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
-eq "
-> 9,8 0 076
-? 8,11 0 077
-@ 16,11,2 0 0100
-at "
-A 12,11 0 0101
-B 11,11 0 0102
-C 12,11 0 0103
-D 12,11 0 0104
-E 11,11 0 0105
-F 10,11 0 0106
-G 13,11 0 0107
-H 13,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 13,11 0 0117
-P 10,11 0 0120
-Q 13,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 16,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,11 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 14,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
-or "
-ba "
-} 7,11,3 0 0175
-rC "
-~ 9,8 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,7 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 6,10 0 0257
-¯ "
-de 7,11 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 6,12 0 0264
-´ "
-µ 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 12,11,4 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 13,15 0 0322
-Ò "
-'O 13,15 0 0323
-Ó "
-^O 13,15 0 0324
-Ô "
-~O 13,15 0 0325
-Õ "
-:O 13,14 0 0326
-Ö "
-mu 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
-ö "
-di 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/devX100-12/TBI b/contrib/groff/devX100-12/TBI
deleted file mode 100644
index 712f7d2..0000000
--- a/contrib/groff/devX100-12/TBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TBI
-spacewidth 4
-charset
---- 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
-' 6,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
-\- 10,6 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
-eq "
-> 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,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 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
-or "
-ba "
-} 6,12,3 0 0175
-rC "
-~ 10,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 10,5 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 6,10 0 0257
-¯ "
-de 7,11 0 0260
-° "
-+- 10,10 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 6,12 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/TI b/contrib/groff/devX100-12/TI
deleted file mode 100644
index 72ed683..0000000
--- a/contrib/groff/devX100-12/TI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TI
-spacewidth 4
-charset
---- 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
-' 6,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
-\- 11,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,2 0 073
-< 11,9 0 074
-= 11,6 0 075
-eq "
-> 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,10 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
-or "
-ba "
-} 7,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 11,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 13,11 0 0256
-® "
-a- 6,10 0 0257
-¯ "
-de 7,11 0 0260
-° "
-+- 11,11 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 6,12 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100-12/TR b/contrib/groff/devX100-12/TR
deleted file mode 100644
index 989dd56..0000000
--- a/contrib/groff/devX100-12/TR
+++ /dev/null
@@ -1,308 +0,0 @@
-name TR
-spacewidth 4
-charset
---- 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
-' 5,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
-\- 9,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
-eq "
-> 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
-` 5,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
-or "
-ba "
-} 8,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,5 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 13,11 0 0256
-® "
-a- 6,10 0 0257
-¯ "
-de 7,11 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 6,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/CB b/contrib/groff/devX100/CB
deleted file mode 100644
index 7353611..0000000
--- a/contrib/groff/devX100/CB
+++ /dev/null
@@ -1,308 +0,0 @@
-name CB
-spacewidth 9
-charset
---- 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,10 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
-eq "
-> 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,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,9,2 0 0173
-lC "
-| 9,9,2 0 0174
-or "
-ba "
-} 9,9,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,5 0 0254
-¬ "
-- 9,5 0 0255
-hy "
-­ "
-rg 9,9 0 0256
-® "
-a- 9,9 0 0257
-¯ "
-de 9,9 0 0260
-° "
-+- 9,8 0 0261
-± "
-S2 9,10 0 0262
-² "
-S3 9,10 0 0263
-³ "
-aa 9,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/CBI b/contrib/groff/devX100/CBI
deleted file mode 100644
index d590a19..0000000
--- a/contrib/groff/devX100/CBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CBI
-spacewidth 9
-charset
---- 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
-eq "
-> 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
-or "
-ba "
-} 9,9,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 9,5 0 0255
-hy "
-­ "
-rg 9,9 0 0256
-® "
-a- 9,9 0 0257
-¯ "
-de 9,10 0 0260
-° "
-+- 9,8 0 0261
-± "
-S2 9,10 0 0262
-² "
-S3 9,10 0 0263
-³ "
-aa 9,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/CI b/contrib/groff/devX100/CI
deleted file mode 100644
index 484eeca..0000000
--- a/contrib/groff/devX100/CI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CI
-spacewidth 9
-charset
---- 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,10 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
-eq "
-> 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,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,3 0 0173
-lC "
-| 9,9,2 0 0174
-or "
-ba "
-} 9,10,3 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 9,5 0 0255
-hy "
-­ "
-rg 9,9 0 0256
-® "
-a- 9,9 0 0257
-¯ "
-de 9,10 0 0260
-° "
-+- 9,8 0 0261
-± "
-S2 9,10 0 0262
-² "
-S3 9,10 0 0263
-³ "
-aa 9,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/CR b/contrib/groff/devX100/CR
deleted file mode 100644
index b8b35d1..0000000
--- a/contrib/groff/devX100/CR
+++ /dev/null
@@ -1,308 +0,0 @@
-name CR
-spacewidth 9
-charset
---- 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,10 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
-eq "
-> 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
-or "
-ba "
-} 9,10,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 9,5 0 0255
-hy "
-­ "
-rg 9,9 0 0256
-® "
-a- 9,9 0 0257
-¯ "
-de 9,10 0 0260
-° "
-+- 9,8 0 0261
-± "
-S2 9,10 0 0262
-² "
-S3 9,10 0 0263
-³ "
-aa 9,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/DESC b/contrib/groff/devX100/DESC
deleted file mode 100644
index 7f63535..0000000
--- a/contrib/groff/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/devX100/HB b/contrib/groff/devX100/HB
deleted file mode 100644
index 1a1d963..0000000
--- a/contrib/groff/devX100/HB
+++ /dev/null
@@ -1,308 +0,0 @@
-name HB
-spacewidth 4
-charset
---- 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
-' 5,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
-\- 9,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
-eq "
-> 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
-or "
-ba "
-} 6,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 4,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 5,10 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/HBI b/contrib/groff/devX100/HBI
deleted file mode 100644
index bcfbfae..0000000
--- a/contrib/groff/devX100/HBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HBI
-spacewidth 4
-charset
---- 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
-' 5,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
-\- 9,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
-eq "
-> 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
-or "
-ba "
-} 6,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 5,11 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/HI b/contrib/groff/devX100/HI
deleted file mode 100644
index 4be615c..0000000
--- a/contrib/groff/devX100/HI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HI
-spacewidth 4
-charset
---- 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
-\- 9,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
-eq "
-> 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
-` 3,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
-or "
-ba "
-} 5,11,3 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 4,10 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 4,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/HR b/contrib/groff/devX100/HR
deleted file mode 100644
index f462a24..0000000
--- a/contrib/groff/devX100/HR
+++ /dev/null
@@ -1,308 +0,0 @@
-name HR
-spacewidth 4
-charset
---- 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
-\- 9,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
-eq "
-> 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
-` 3,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
-or "
-ba "
-} 5,11,3 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 4,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 4,10 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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,13 0 0303
-Ã "
-:A 9,14 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
-Ö "
-mu 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
-ö "
-di 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,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/devX100/Makefile.sub b/contrib/groff/devX100/Makefile.sub
deleted file mode 100644
index 4d40f0f..0000000
--- a/contrib/groff/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/devX100/NB b/contrib/groff/devX100/NB
deleted file mode 100644
index f99169e..0000000
--- a/contrib/groff/devX100/NB
+++ /dev/null
@@ -1,308 +0,0 @@
-name NB
-spacewidth 11
-charset
---- 11,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
-' 4,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
-\- 8,5 0 055
-. 4,3 0 056
-/ 5,11 0 057
-sl "
-0 8,11 0 060
-1 6,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 6,11,2 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,6 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 7,9 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 8,8 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 6,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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,14 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
-ö "
-di 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/devX100/NBI b/contrib/groff/devX100/NBI
deleted file mode 100644
index dd940af..0000000
--- a/contrib/groff/devX100/NBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 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
-\- 8,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 6,11,2 0 0175
-rC "
-~ 11,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,7 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 12,11 0 0256
-® "
-a- 6,9 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 8,8 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/NI b/contrib/groff/devX100/NI
deleted file mode 100644
index bb31b53..0000000
--- a/contrib/groff/devX100/NI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NI
-spacewidth 4
-charset
---- 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
-\- 9,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
-eq "
-> 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
-or "
-ba "
-} 6,11,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,6 0 0254
-¬ "
-- 5,5 0 0255
-hy "
-­ "
-rg 13,11 0 0256
-® "
-a- 6,9 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 8,8 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 4,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/NR b/contrib/groff/devX100/NR
deleted file mode 100644
index 729f76e..0000000
--- a/contrib/groff/devX100/NR
+++ /dev/null
@@ -1,308 +0,0 @@
-name NR
-spacewidth 4
-charset
---- 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
-' 4,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
-\- 9,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 5,11,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,5 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 14,11 0 0256
-® "
-a- 5,9 0 0257
-¯ "
-de 6,11 0 0260
-° "
-+- 9,7 0 0261
-± "
-S2 5,11 0 0262
-² "
-S3 5,11 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/S b/contrib/groff/devX100/S
deleted file mode 100644
index 59af889..0000000
--- a/contrib/groff/devX100/S
+++ /dev/null
@@ -1,226 +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
-or "
-| "
-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
---- 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
-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 "
-bv "
---- 12,12 0 0360
-ra 5,12,3 0 0361
-is 4,12,1 0 0362
---- 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/devX100/TB b/contrib/groff/devX100/TB
deleted file mode 100644
index f9f191c..0000000
--- a/contrib/groff/devX100/TB
+++ /dev/null
@@ -1,308 +0,0 @@
-name TB
-spacewidth 3
-charset
---- 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
-\- 9,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
-eq "
-> 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
-` 4,10 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
-or "
-ba "
-} 7,10,3 0 0175
-rC "
-~ 8,7 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 12,10 0 0256
-® "
-a- 5,9 0 0257
-¯ "
-de 6,10 0 0260
-° "
-+- 8,9 0 0261
-± "
-S2 4,10 0 0262
-² "
-S3 4,10 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/TBI b/contrib/groff/devX100/TBI
deleted file mode 100644
index 76e9828..0000000
--- a/contrib/groff/devX100/TBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TBI
-spacewidth 3
-charset
---- 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
-' 5,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
-\- 9,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
-eq "
-> 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
-` 5,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
-or "
-ba "
-} 7,10,3 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,5 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 12,10 0 0256
-® "
-a- 6,9 0 0257
-¯ "
-de 6,10 0 0260
-° "
-+- 9,9 0 0261
-± "
-S2 4,10 0 0262
-² "
-S3 4,10 0 0263
-³ "
-aa 6,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/TI b/contrib/groff/devX100/TI
deleted file mode 100644
index 53401e5..0000000
--- a/contrib/groff/devX100/TI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TI
-spacewidth 3
-charset
---- 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
-' 5,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
-\- 9,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
-eq "
-> 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
-or "
-ba "
-} 6,10,3 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 12,10 0 0256
-® "
-a- 5,10 0 0257
-¯ "
-de 6,10 0 0260
-° "
-+- 10,9 0 0261
-± "
-S2 4,10 0 0262
-² "
-S3 4,10 0 0263
-³ "
-aa 4,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX100/TR b/contrib/groff/devX100/TR
deleted file mode 100644
index 39d106a..0000000
--- a/contrib/groff/devX100/TR
+++ /dev/null
@@ -1,308 +0,0 @@
-name TR
-spacewidth 3
-charset
---- 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
-' 4,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
-\- 9,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
-eq "
-> 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
-` 4,10 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
-or "
-ba "
-} 7,10,3 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 9,6 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 12,10 0 0256
-® "
-a- 4,9 0 0257
-¯ "
-de 6,10 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,10 0 0262
-² "
-S3 4,10 0 0263
-³ "
-aa 5,11 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/CB b/contrib/groff/devX75-12/CB
deleted file mode 100644
index 8b3766c..0000000
--- a/contrib/groff/devX75-12/CB
+++ /dev/null
@@ -1,308 +0,0 @@
-name CB
-spacewidth 7
-charset
---- 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
-eq "
-> 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,8 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
-or "
-ba "
-} 7,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 7,4 0 0255
-hy "
-­ "
-rg 7,8 0 0256
-® "
-a- 7,8 0 0257
-¯ "
-de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
-S2 7,8 0 0262
-² "
-S3 7,8 0 0263
-³ "
-aa 7,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/CBI b/contrib/groff/devX75-12/CBI
deleted file mode 100644
index 23df8ea..0000000
--- a/contrib/groff/devX75-12/CBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CBI
-spacewidth 7
-charset
---- 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
-eq "
-> 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,8 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
-or "
-ba "
-} 7,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 7,4 0 0255
-hy "
-­ "
-rg 7,8 0 0256
-® "
-a- 7,8 0 0257
-¯ "
-de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
-S2 7,8 0 0262
-² "
-S3 7,8 0 0263
-³ "
-aa 7,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/CI b/contrib/groff/devX75-12/CI
deleted file mode 100644
index 04f4c46..0000000
--- a/contrib/groff/devX75-12/CI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CI
-spacewidth 7
-charset
---- 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
-eq "
-> 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,8 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
-or "
-ba "
-} 7,9,2 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 7,4 0 0255
-hy "
-­ "
-rg 7,8 0 0256
-® "
-a- 7,8 0 0257
-¯ "
-de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
-S2 7,8 0 0262
-² "
-S3 7,8 0 0263
-³ "
-aa 7,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/CR b/contrib/groff/devX75-12/CR
deleted file mode 100644
index 957ce6a..0000000
--- a/contrib/groff/devX75-12/CR
+++ /dev/null
@@ -1,308 +0,0 @@
-name CR
-spacewidth 7
-charset
---- 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
-eq "
-> 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,8 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
-or "
-ba "
-} 7,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 7,4 0 0255
-hy "
-­ "
-rg 7,8 0 0256
-® "
-a- 7,8 0 0257
-¯ "
-de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
-S2 7,8 0 0262
-² "
-S3 7,8 0 0263
-³ "
-aa 7,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/DESC b/contrib/groff/devX75-12/DESC
deleted file mode 100644
index 4793e59..0000000
--- a/contrib/groff/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/devX75-12/HB b/contrib/groff/devX75-12/HB
deleted file mode 100644
index f9ccd5f..0000000
--- a/contrib/groff/devX75-12/HB
+++ /dev/null
@@ -1,308 +0,0 @@
-name HB
-spacewidth 4
-charset
---- 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
-' 4,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
-\- 8,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
-eq "
-> 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,9 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
-or "
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,9 0 0257
-¯ "
-de 5,8 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/HBI b/contrib/groff/devX75-12/HBI
deleted file mode 100644
index 21d4355..0000000
--- a/contrib/groff/devX75-12/HBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HBI
-spacewidth 4
-charset
---- 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
-\- 8,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
-eq "
-> 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
-or "
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,5 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,9 0 0257
-¯ "
-de 5,8 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/HI b/contrib/groff/devX75-12/HI
deleted file mode 100644
index 6051dc7..0000000
--- a/contrib/groff/devX75-12/HI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HI
-spacewidth 4
-charset
---- 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
-\- 8,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
-eq "
-> 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
-` 3,9 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
-or "
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,9 0 0257
-¯ "
-de 5,8 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 4,8 0 0262
-² "
-S3 4,8 0 0263
-³ "
-aa 2,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/HR b/contrib/groff/devX75-12/HR
deleted file mode 100644
index f78bed5..0000000
--- a/contrib/groff/devX75-12/HR
+++ /dev/null
@@ -1,308 +0,0 @@
-name HR
-spacewidth 4
-charset
---- 4,1 0 040
-! 3,9 0 041
-" 5,9 0 042
-dq "
-# 7,8 0 043
-sh "
-$ 6,9,2 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
-\- 8,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
-eq "
-> 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
-` 3,9 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 4,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
-or "
-ba "
-} 4,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,6 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,9 0 0257
-¯ "
-de 5,8 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 4,8 0 0262
-² "
-S3 4,8 0 0263
-³ "
-aa 2,10 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/Makefile.sub b/contrib/groff/devX75-12/Makefile.sub
deleted file mode 100644
index 37f4b7c..0000000
--- a/contrib/groff/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/devX75-12/NB b/contrib/groff/devX75-12/NB
deleted file mode 100644
index b5f4a08..0000000
--- a/contrib/groff/devX75-12/NB
+++ /dev/null
@@ -1,308 +0,0 @@
-name NB
-spacewidth 4
-charset
---- 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
-' 3,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
-\- 7,4 0 055
-. 4,2 0 056
-/ 4,9 0 057
-sl "
-0 7,9 0 060
-1 5,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
-eq "
-> 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 "
-_ 7,0,2 0 0137
-` 3,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
-or "
-ba "
-} 5,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 6,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 5,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/NBI b/contrib/groff/devX75-12/NBI
deleted file mode 100644
index 01539d5..0000000
--- a/contrib/groff/devX75-12/NBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 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
-' 3,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
-\- 8,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
-eq "
-> 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 "
-_ 8,0,2 0 0137
-` 3,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
-or "
-ba "
-} 6,9,2 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 10,9 0 0256
-® "
-a- 5,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/NI b/contrib/groff/devX75-12/NI
deleted file mode 100644
index 3ffc940..0000000
--- a/contrib/groff/devX75-12/NI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NI
-spacewidth 3
-charset
---- 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
-' 3,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
-\- 7,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
-eq "
-> 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 "
-_ 8,0,2 0 0137
-` 3,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
-or "
-ba "
-} 5,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 10,9 0 0256
-® "
-a- 5,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/NR b/contrib/groff/devX75-12/NR
deleted file mode 100644
index 1d91f11..0000000
--- a/contrib/groff/devX75-12/NR
+++ /dev/null
@@ -1,308 +0,0 @@
-name NR
-spacewidth 3
-charset
---- 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
-\- 7,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 4,9,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 5,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 3,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/S b/contrib/groff/devX75-12/S
deleted file mode 100644
index 2e66ad0..0000000
--- a/contrib/groff/devX75-12/S
+++ /dev/null
@@ -1,226 +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
-or "
-| "
-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
---- 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
-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 "
-bv "
---- 10,11 0 0360
-ra 4,10,2 0 0361
-is 4,12,3 0 0362
---- 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/devX75-12/TB b/contrib/groff/devX75-12/TB
deleted file mode 100644
index 1ac16ec..0000000
--- a/contrib/groff/devX75-12/TB
+++ /dev/null
@@ -1,308 +0,0 @@
-name TB
-spacewidth 3
-charset
---- 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
-' 4,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
-\- 8,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
-eq "
-> 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
-or "
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,6 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/TBI b/contrib/groff/devX75-12/TBI
deleted file mode 100644
index 68d97ed..0000000
--- a/contrib/groff/devX75-12/TBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TBI
-spacewidth 3
-charset
---- 3,1 0 040
-! 5,9 0 041
-" 7,9 0 042
-dq "
-# 7,9 0 043
-sh "
-$ 7,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
-\- 8,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
-eq "
-> 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
-` 5,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
-or "
-ba "
-} 6,9,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,6 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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,11 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/TI b/contrib/groff/devX75-12/TI
deleted file mode 100644
index 037cec3..0000000
--- a/contrib/groff/devX75-12/TI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TI
-spacewidth 3
-charset
---- 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
-' 4,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
-\- 8,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
-eq "
-> 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
-or "
-ba "
-} 5,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 8,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75-12/TR b/contrib/groff/devX75-12/TR
deleted file mode 100644
index 16de8a9..0000000
--- a/contrib/groff/devX75-12/TR
+++ /dev/null
@@ -1,308 +0,0 @@
-name TR
-spacewidth 3
-charset
---- 3,1 0 040
-! 3,9 0 041
-" 5,9 0 042
-dq "
-# 6,8 0 043
-sh "
-$ 6,10,1 0 044
-Do "
-% 9,9 0 045
-& 10,9 0 046
-' 4,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
-\- 8,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
-< 8,6 0 074
-= 7,5 0 075
-eq "
-> 8,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 8,9 0 0106
-G 9,9 0 0107
-H 9,9 0 0110
-I 4,9 0 0111
-J 4,9 0 0112
-K 8,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 8,9 0 0125
-V 9,9 0 0126
-W 12,9 0 0127
-X 8,9 0 0130
-Y 9,9 0 0131
-Z 8,9 0 0132
-[ 5,9,3 0 0133
-lB "
-\ 3,9 0 0134
-rs "
-] 5,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 5,6 0 0143
-d 6,9 0 0144
-e 6,6 0 0145
-f 3,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
-or "
-ba "
-} 6,9,3 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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 11,9 0 0251
-© "
-Of 5,9 0 0252
-ª "
-Fo 7,5 0 0253
-« "
-no 8,5 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 11,9 0 0256
-® "
-a- 4,8 0 0257
-¯ "
-de 5,9 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 4,9 0 0262
-² "
-S3 4,9 0 0263
-³ "
-aa 4,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/CB b/contrib/groff/devX75/CB
deleted file mode 100644
index 58e0d8b..0000000
--- a/contrib/groff/devX75/CB
+++ /dev/null
@@ -1,308 +0,0 @@
-name CB
-spacewidth 6
-charset
---- 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,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
-eq "
-> 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,7 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
-or "
-ba "
-} 6,7,1 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,5 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 6,7 0 0256
-® "
-a- 6,7 0 0257
-¯ "
-de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
-S2 6,7 0 0262
-² "
-S3 6,7 0 0263
-³ "
-aa 6,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/CBI b/contrib/groff/devX75/CBI
deleted file mode 100644
index db6f6ba..0000000
--- a/contrib/groff/devX75/CBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CBI
-spacewidth 6
-charset
---- 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
-eq "
-> 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,7 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
-or "
-ba "
-} 6,7,2 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,5 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 6,7 0 0256
-® "
-a- 6,7 0 0257
-¯ "
-de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
-S2 6,7 0 0262
-² "
-S3 6,7 0 0263
-³ "
-aa 6,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/CI b/contrib/groff/devX75/CI
deleted file mode 100644
index 43d383a..0000000
--- a/contrib/groff/devX75/CI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CI
-spacewidth 6
-charset
---- 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
-eq "
-> 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,7 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
-or "
-ba "
-} 6,7,1 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,5 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 6,7 0 0256
-® "
-a- 6,7 0 0257
-¯ "
-de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
-S2 6,7 0 0262
-² "
-S3 6,7 0 0263
-³ "
-aa 6,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/CR b/contrib/groff/devX75/CR
deleted file mode 100644
index 900a4a0..0000000
--- a/contrib/groff/devX75/CR
+++ /dev/null
@@ -1,308 +0,0 @@
-name CR
-spacewidth 6
-charset
---- 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
-eq "
-> 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,7 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
-or "
-ba "
-} 6,7,2 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,5 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 6,7 0 0256
-® "
-a- 6,7 0 0257
-¯ "
-de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
-S2 6,7 0 0262
-² "
-S3 6,7 0 0263
-³ "
-aa 6,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/DESC b/contrib/groff/devX75/DESC
deleted file mode 100644
index 172170c..0000000
--- a/contrib/groff/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/devX75/HB b/contrib/groff/devX75/HB
deleted file mode 100644
index ab6f979..0000000
--- a/contrib/groff/devX75/HB
+++ /dev/null
@@ -1,308 +0,0 @@
-name HB
-spacewidth 3
-charset
---- 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
-\- 7,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
-eq "
-> 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
-or "
-ba "
-} 5,8,2 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 10,8 0 0256
-® "
-a- 3,8 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 3,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/HBI b/contrib/groff/devX75/HBI
deleted file mode 100644
index ec132d3..0000000
--- a/contrib/groff/devX75/HBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HBI
-spacewidth 3
-charset
---- 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
-\- 7,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
-eq "
-> 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
-` 4,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
-or "
-ba "
-} 5,8,2 0 0175
-rC "
-~ 6,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 5,4 0 0255
-hy "
-­ "
-rg 10,8 0 0256
-® "
-a- 4,8 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 3,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/HI b/contrib/groff/devX75/HI
deleted file mode 100644
index 324e4b7..0000000
--- a/contrib/groff/devX75/HI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HI
-spacewidth 3
-charset
---- 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
-' 3,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
-\- 7,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
-eq "
-> 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
-or "
-ba "
-} 4,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 6,4 0 0255
-hy "
-­ "
-rg 10,8 0 0256
-® "
-a- 3,8 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
-S2 3,8 0 0262
-² "
-S3 3,8 0 0263
-³ "
-aa 3,9 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/HR b/contrib/groff/devX75/HR
deleted file mode 100644
index fc0143d..0000000
--- a/contrib/groff/devX75/HR
+++ /dev/null
@@ -1,308 +0,0 @@
-name HR
-spacewidth 3
-charset
---- 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
-' 3,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
-\- 7,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
-eq "
-> 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
-or "
-ba "
-} 3,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 9,7 0 0256
-® "
-a- 3,8 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 3,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/Makefile.sub b/contrib/groff/devX75/Makefile.sub
deleted file mode 100644
index 2a90fca..0000000
--- a/contrib/groff/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/devX75/NB b/contrib/groff/devX75/NB
deleted file mode 100644
index 9ea6576..0000000
--- a/contrib/groff/devX75/NB
+++ /dev/null
@@ -1,308 +0,0 @@
-name NB
-spacewidth 2
-charset
---- 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
-' 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
-\- 6,4 0 055
-. 3,2 0 056
-/ 5,8 0 057
-sl "
-0 6,8 0 060
-1 5,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 5,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
-eq "
-> 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 "
-_ 6,0,2 0 0137
-` 3,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
-or "
-ba "
-} 5,8,2 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 9,8 0 0256
-® "
-a- 5,7 0 0257
-¯ "
-de 4,8 0 0260
-° "
-+- 6,6 0 0261
-± "
-S2 3,8 0 0262
-² "
-S3 3,8 0 0263
-³ "
-aa 4,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/NBI b/contrib/groff/devX75/NBI
deleted file mode 100644
index 9346faf..0000000
--- a/contrib/groff/devX75/NBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NBI
-spacewidth 2
-charset
---- 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
-' 3,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
-\- 7,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
-eq "
-> 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 "
-_ 7,0,2 0 0137
-` 3,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
-or "
-ba "
-} 5,8,1 0 0175
-rC "
-~ 7,5 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,5 0 0254
-¬ "
-- 4,4 0 0255
-hy "
-­ "
-rg 9,8 0 0256
-® "
-a- 5,7 0 0257
-¯ "
-de 4,8 0 0260
-° "
-+- 6,6 0 0261
-± "
-S2 3,8 0 0262
-² "
-S3 3,8 0 0263
-³ "
-aa 4,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/NI b/contrib/groff/devX75/NI
deleted file mode 100644
index d14f9ca..0000000
--- a/contrib/groff/devX75/NI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NI
-spacewidth 2
-charset
---- 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
-' 3,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
-\- 6,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
-eq "
-> 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 "
-_ 7,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
-or "
-ba "
-} 5,8,1 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,4 0 0254
-¬ "
-- 4,3 0 0255
-hy "
-­ "
-rg 9,8 0 0256
-® "
-a- 4,7 0 0257
-¯ "
-de 4,8 0 0260
-° "
-+- 6,5 0 0261
-± "
-S2 3,8 0 0262
-² "
-S3 3,8 0 0263
-³ "
-aa 3,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/NR b/contrib/groff/devX75/NR
deleted file mode 100644
index 8a04d77..0000000
--- a/contrib/groff/devX75/NR
+++ /dev/null
@@ -1,308 +0,0 @@
-name NR
-spacewidth 2
-charset
---- 2,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
-' 3,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
-\- 6,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
-eq "
-> 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 "
-_ 6,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
-or "
-ba "
-} 4,8,1 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 6,4 0 0254
-¬ "
-- 4,3 0 0255
-hy "
-­ "
-rg 10,8 0 0256
-® "
-a- 5,7 0 0257
-¯ "
-de 4,8 0 0260
-° "
-+- 6,5 0 0261
-± "
-S2 3,8 0 0262
-² "
-S3 3,8 0 0263
-³ "
-aa 3,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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,10 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
-ö "
-di 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/devX75/S b/contrib/groff/devX75/S
deleted file mode 100644
index b1cfbbf..0000000
--- a/contrib/groff/devX75/S
+++ /dev/null
@@ -1,226 +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,3 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
-or "
-| "
-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
---- 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
-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 "
-bv "
---- 8,9 0 0360
-ra 3,7,2 0 0361
-is 3,10,2 0 0362
---- 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/devX75/TB b/contrib/groff/devX75/TB
deleted file mode 100644
index 29fa10a..0000000
--- a/contrib/groff/devX75/TB
+++ /dev/null
@@ -1,308 +0,0 @@
-name TB
-spacewidth 2
-charset
---- 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
-' 4,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
-\- 7,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
-eq "
-> 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,7 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
-or "
-ba "
-} 4,7,3 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 3,3 0 0255
-hy "
-­ "
-rg 9,7 0 0256
-® "
-a- 4,7 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 4,7 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/TBI b/contrib/groff/devX75/TBI
deleted file mode 100644
index 064d31d..0000000
--- a/contrib/groff/devX75/TBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TBI
-spacewidth 2
-charset
---- 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
-\- 7,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
-eq "
-> 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,7 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
-or "
-ba "
-} 5,7,2 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,5 0 0254
-¬ "
-- 3,3 0 0255
-hy "
-­ "
-rg 9,7 0 0256
-® "
-a- 4,7 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 4,7 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/TI b/contrib/groff/devX75/TI
deleted file mode 100644
index 6e091e2..0000000
--- a/contrib/groff/devX75/TI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TI
-spacewidth 2
-charset
---- 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
-\- 7,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
-eq "
-> 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
-or "
-ba "
-} 4,7,2 0 0175
-rC "
-~ 6,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,4 0 0254
-¬ "
-- 4,3 0 0255
-hy "
-­ "
-rg 9,7 0 0256
-® "
-a- 3,7 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 7,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 3,8 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devX75/TR b/contrib/groff/devX75/TR
deleted file mode 100644
index 819dff4..0000000
--- a/contrib/groff/devX75/TR
+++ /dev/null
@@ -1,308 +0,0 @@
-name TR
-spacewidth 2
-charset
---- 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
-' 3,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
-\- 7,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
-eq "
-> 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,7 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
-or "
-ba "
-} 4,7,2 0 0175
-rC "
-~ 7,4 0 0176
-a~ "
-ap "
-ti "
-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
-« "
-no 7,4 0 0254
-¬ "
-- 4,3 0 0255
-hy "
-­ "
-rg 9,7 0 0256
-® "
-a- 4,7 0 0257
-¯ "
-de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
-S2 3,7 0 0262
-² "
-S3 3,7 0 0263
-³ "
-aa 3,7 0 0264
-´ "
-µ 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
-Ö "
-mu 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
-ö "
-di 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/devascii/Makefile.sub b/contrib/groff/devascii/Makefile.sub
deleted file mode 100644
index 238f7b7..0000000
--- a/contrib/groff/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/devcp1047/DESC.proto b/contrib/groff/devcp1047/DESC.proto
deleted file mode 100644
index 88399ab..0000000
--- a/contrib/groff/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/devcp1047/Makefile.sub b/contrib/groff/devcp1047/Makefile.sub
deleted file mode 100644
index 42721cb..0000000
--- a/contrib/groff/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/devcp1047/R.proto b/contrib/groff/devcp1047/R.proto
deleted file mode 100644
index 6a624c3..0000000
--- a/contrib/groff/devcp1047/R.proto
+++ /dev/null
@@ -1,356 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
-^a 24 0 0102
-char66 "
-:a 24 0 0103
-char67 "
-`a 24 0 0104
-char68 "
-'a 24 0 0105
-char69 "
-~a 24 0 0106
-char70 "
-oa 24 0 0107
-char71 "
-,c 24 0 0110
-char72 "
-~n 24 0 0111
-char73 "
-ct 24 0 0112
-char74 "
-. 24 0 0113
-< 24 0 0114
-fo "
-la "
-( 24 0 0115
-+ 24 0 0116
-pl "
-| 24 0 0117
-ba "
-br "
-bv "
-lb "
-lc "
-lf "
-lk "
-lt "
-or "
-rb "
-rc "
-rf "
-rk "
-rt "
-& 24 0 0120
-'e 24 0 0121
-char81 "
-^e 24 0 0122
-char82 "
-:e 24 0 0123
-char83 "
-`e 24 0 0124
-char84 "
-'i 24 0 0125
-char85 "
-^i 24 0 0126
-char86 "
-:i 24 0 0127
-char87 "
-`i 24 0 0130
-char88 "
-ss 24 0 0131
-char89 "
-! 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
-char98 "
-:A 24 0 0143
-char99 "
-`A 24 0 0144
-char100 "
-'A 24 0 0145
-char101 "
-~A 24 0 0146
-char102 "
-oA 24 0 0147
-char103 "
-,C 24 0 0150
-char104 "
-~N 24 0 0151
-char105 "
-bb 24 0 0152
-char106 "
-, 24 0 0153
-% 24 0 0154
-_ 24 0 0155
-ru "
-ul "
-> 24 0 0156
-fc "
-ra "
-? 24 0 0157
-/o 24 0 0160
-char112 "
-'E 24 0 0161
-char113 "
-^E 24 0 0162
-char114 "
-:E 24 0 0163
-char115 "
-`E 24 0 0164
-char116 "
-'I 24 0 0165
-char117 "
-^I 24 0 0166
-char118 "
-:I 24 0 0167
-char119 "
-`I 24 0 0170
-char120 "
-` 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
-char128 "
-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
-.i "
-Fo 24 0 0212
-char138 "
-Fc 24 0 0213
-char139 "
-Sd 24 0 0214
-char140 "
-'y 24 0 0215
-char141 "
-Tp 24 0 0216
-char142 "
-+- 24 0 0217
-char143 "
-de 24 0 0220
-char144 "
-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
-char154 "
-Om 24 0 0233
-char155 "
-ae 24 0 0234
-char156 "
-ac 24 0 0235
-char157 "
-AE 24 0 0236
-char158 "
-Cs 24 0 0237
-char159 "
-*m 24 0 0240
-char160 "
-~ 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
-char170 "
-r? 24 0 0253
-char171 "
--D 24 0 0254
-char172 "
-[ 24 0 0255
-lB "
-TP 24 0 0256
-char174 "
-rg 24 0 0257
-char175 "
-no 24 0 0260
-char176 "
-Po 24 0 0261
-char177 "
-Ye 24 0 0262
-char178 "
-md 24 0 0263
-pc "
-char179 "
-co 24 0 0264
-char180 "
-sc 24 0 0265
-char181 "
-ps 24 0 0266
-char182 "
-14 24 0 0267
-char183 "
-12 24 0 0270
-char184 "
-34 24 0 0271
-char185 "
-'Y 24 0 0272
-char186 "
-ad 24 0 0273
-char187 "
-a- 24 0 0274
-char188 "
-] 24 0 0275
-rB "
-aa 24 0 0276
-char190 "
-mu 24 0 0277
-char191 "
-{ 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
-char202 "
-^o 24 0 0313
-char203 "
-:o 24 0 0314
-char204 "
-`o 24 0 0315
-char205 "
-'o 24 0 0316
-char206 "
-~o 24 0 0317
-char207 "
-} 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
-char218 "
-^u 24 0 0333
-char219 "
-:u 24 0 0334
-char220 "
-`u 24 0 0335
-char221 "
-'u 24 0 0336
-char222 "
-:y 24 0 0337
-char223 "
-\ 24 0 0340
-rs "
-di 24 0 0341
-char225 "
-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
-char234 "
-^O 24 0 0353
-char235 "
-:O 24 0 0354
-char236 "
-`O 24 0 0355
-char237 "
-'O 24 0 0356
-char238 "
-~O 24 0 0357
-char239 "
-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
-char250 "
-^U 24 0 0373
-char251 "
-:U 24 0 0374
-char252 "
-`U 24 0 0375
-char253 "
-'U 24 0 0376
-char254 "
diff --git a/contrib/groff/devdvi/B b/contrib/groff/devdvi/B
deleted file mode 100644
index 53a2b9c..0000000
--- a/contrib/groff/devdvi/B
+++ /dev/null
@@ -1,358 +0,0 @@
-#
-# manually added kernings for `` and ''
-#
-name B
-internalname cmbx10
-spacewidth 401952
-ligatures ff fi fl ffi ffl 0
-checksum 452076118
-designsize 10485760
-kernpairs
-ff ' 114323
-ff cq 114323
-ff ? 114323
-ff ! 114323
-ff ) 114323
-ff rB 114323
-ff ] 114323
-' ' -100488
-' cq -100488
-cq ' -100488
-cq cq -100488
-' ? 133984
-cq ? 133984
-' ! 133984
-cq ! 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 ' 114323
-f cq 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
-char180 602928,728178 2 0023
-aa "
-ah 602928,662642 2 0024
-ab 602928,728178 2 0025
-char175 602928,625066 2 0026
-a- "
-ao 911674,728178 2 0027
-char184 535936,0,178403 1 0030
-ac "
-char223 626230,728178 2 0031
-ss "
-char230 870896,466034 0 0032
-ae "
-oe 937888,466034 0 0033
-char248 602928,567979,101946 3 0034
-/o "
-char198 1092261,719440 2 0035
-AE "
-OE 1226245,719440 2 0036
-char216 937888,770413,50973 3 0037
-/O "
---- 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
-char173 401952,466034 0 0055
-hy "
-- "
-. 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
-char161 367000,524288,203890 3 0074
-r! "
-= 937888,410110,-114178 0 0075
-char191 569432,524288,203890 3 0076
-r? "
-? 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~ "
-char168 602928,728178 2 0177
-ad "
diff --git a/contrib/groff/devdvi/BI b/contrib/groff/devdvi/BI
deleted file mode 100644
index 35e2824..0000000
--- a/contrib/groff/devdvi/BI
+++ /dev/null
@@ -1,365 +0,0 @@
-#
-# manually added kernings for `` and ''
-#
-name BI
-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
-' ? 123498
-cq ? 123498
-' ! 123498
-cq ! 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 ' -123498
-n cq -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
-char180 619819,728178,0,89421 2 0023
-aa "
-ah 619819,662642,0,86728 2 0024
-ab 619819,728178,0,108354 2 0025
-char175 619819,623318,0,109518 2 0026
-a- "
-ao 994973,728178 2 0027
-char184 558070,0,178403 1 0030
-ac "
-char223 697302,728178,203890,102090 3 0031
-ss "
-char230 866814,466034,0,89131 0 0032
-ae "
-oe 866814,466034,0,89131 0 0033
-char248 619819,567979,101946,99179 3 0034
-/o "
-char198 1072450,719440,0,119859 2 0035
-AE "
-OE 1195947,719440,0,119859 2 0036
-char216 928563,770413,50973,95027 3 0037
-/O "
---- 311075,466034 0 0040
-! 404864,728178,0,119714 2 0041
-rq 650696,728178,0,83248 2 0042
-sh 990312,728178,203888,71653 3 0043
-# "
-char163 910723,728178 2 0044
-Po "
-% 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
-char173 434573,466034,0,27379 0 0055
-hy "
-- "
-. 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
-char161 404864,524288,203890,68741 3 0074
-r! "
-= 928563,410110,-114178,71653 0 0075
-char191 619819,524288,203890 3 0076
-r? "
-? 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~ "
-char168 619819,728178,0,120298 2 0177
-ad "
diff --git a/contrib/groff/devdvi/CW b/contrib/groff/devdvi/CW
deleted file mode 100644
index 2039d23..0000000
--- a/contrib/groff/devdvi/CW
+++ /dev/null
@@ -1,160 +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
-char180 550498,640797 2 0023
-aa "
-ah 550498,593466 2 0024
-ab 550498,640797 2 0025
-char175 550498,593027 2 0026
-a- "
-ao 550498,640797 2 0027
-char184 550498,0,203891 1 0030
-ac "
-char223 550498,640797 2 0031
-ss "
-char230 550498,451470 0 0032
-ae "
-oe 550498,451470 0 0033
-char248 550498,567979,116509 3 0034
-/o "
-char198 550498,640797 2 0035
-AE "
-OE 550498,640797 2 0036
-char216 550498,699051,58254 3 0037
-/O "
---- 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~ "
---- 550498,640797 2 0177
diff --git a/contrib/groff/devdvi/CWI b/contrib/groff/devdvi/CWI
deleted file mode 100644
index 7e7b540..0000000
--- a/contrib/groff/devdvi/CWI
+++ /dev/null
@@ -1,160 +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
-char180 550498,640797,0,182045 2 0023
-aa "
-ah 550498,593466,0,182045 2 0024
-ab 550498,640797,0,182045 2 0025
-char175 550498,593027,0,182045 2 0026
-a- "
-ao 550498,640797,0,182045 2 0027
-char184 550498,0,203891,182045 1 0030
-ac "
-char223 550498,640797,233018,182045 3 0031
-ss "
-char230 550498,451470,0,182045 0 0032
-ae "
-oe 550498,451470,0,182045 0 0033
-char248 550498,567979,116509,182045 3 0034
-/o "
-char198 550498,640797,0,182045 2 0035
-AE "
-OE 550498,640797,0,182045 2 0036
-char216 550498,699051,58254,182045 3 0037
-/O "
---- 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~ "
---- 550498,640797,0,182045 2 0177
diff --git a/contrib/groff/devdvi/DESC.in b/contrib/groff/devdvi/DESC.in
deleted file mode 100644
index 54c1302b..0000000
--- a/contrib/groff/devdvi/DESC.in
+++ /dev/null
@@ -1,10 +0,0 @@
-sizescale 100
-unitwidth 131072
-res 57816
-hor 1
-vert 1
-sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 1728 1800
-2000 2074 2200 2400 2488 2800 3600 0
-fonts 14 R I B BI 0 0 0 0 0 MI S EX CW CWI
-tcommand
-postpro grodvi
diff --git a/contrib/groff/devdvi/EX b/contrib/groff/devdvi/EX
deleted file mode 100644
index 6e83d02..0000000
--- a/contrib/groff/devdvi/EX
+++ /dev/null
@@ -1,144 +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
-is "
-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
-sr0 1048579,41942,1216362 1 0160
-sr1 1048579,41942,1845514 1 0161
-sr2 1048579,41942,2474666 1 0162
-sr3 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/devdvi/H b/contrib/groff/devdvi/H
deleted file mode 100644
index f563c18..0000000
--- a/contrib/groff/devdvi/H
+++ /dev/null
@@ -1,307 +0,0 @@
-name H
-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
-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
-char180 524290,728178 2 0023
-aa "
-ah 524290,662642 2 0024
-ab 524290,728178 2 0025
-char175 524290,638464 2 0026
-a- "
-ao 699054,728178 2 0027
-char184 466035,0,178403 1 0030
-ac "
-char223 503902,728178 2 0031
-ss "
-char230 757307,466034 0 0032
-ae "
-oe 815562,466034 0 0033
-char248 524290,567979,101946 3 0034
-/o "
-char198 902944,728178 2 0035
-AE "
-OE 1019453,728178 2 0036
-char216 815562,779150,50973 3 0037
-/O "
---- 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
-char173 349526,466034 0 0055
-hy "
-- "
-. 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
-char161 334963,524288,203890 3 0074
-r! "
-= 815562,387973,-136315 0 0075
-char191 495163,524288,203890 3 0076
-r? "
-? 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~ "
-char168 524290,712366 2 0177
-ad "
diff --git a/contrib/groff/devdvi/HB b/contrib/groff/devdvi/HB
deleted file mode 100644
index c0cc6e2..0000000
--- a/contrib/groff/devdvi/HB
+++ /dev/null
@@ -1,307 +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
-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
-char180 576720,728178 2 0023
-aa "
-ah 576720,666283 2 0024
-ab 576720,728178 2 0025
-char175 576720,668757 2 0026
-a- "
-ao 768960,728178 2 0027
-char184 512640,0,178403 1 0030
-ac "
-char223 592739,728178 2 0031
-ss "
-char230 833040,480597 0 0032
-ae "
-oe 897120,480597 0 0033
-char248 576720,582542,101946 3 0034
-/o "
-char198 993240,728178 2 0035
-AE "
-OE 1121400,728178 2 0036
-char216 897120,779150,50973 3 0037
-/O "
---- 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
-char173 384480,480597 0 0055
-hy "
-- "
-. 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
-char161 384480,524288,203890 3 0074
-r! "
-= 897120,425984,-98304 0 0075
-char191 544680,524288,203890 3 0076
-r? "
-? 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~ "
-char168 576720,728178 2 0177
-ad "
diff --git a/contrib/groff/devdvi/HI b/contrib/groff/devdvi/HI
deleted file mode 100644
index 4f96bdb..0000000
--- a/contrib/groff/devdvi/HI
+++ /dev/null
@@ -1,308 +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
-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
-char180 524290,728178,0,96523 2 0023
-aa "
-ah 524290,662642,0,88419 2 0024
-ab 524290,728178,0,99435 2 0025
-char175 524290,638464,0,92018 2 0026
-a- "
-ao 773347,728178 2 0027
-char184 466035,0,178403 1 0030
-ac "
-char223 503902,728178,0,96523 2 0031
-ss "
-char230 757307,466034,0,71070 0 0032
-ae "
-oe 815562,466034,0,71070 0 0033
-char248 524290,567979,101946,50821 3 0034
-/o "
-char198 902944,728178,0,125650 2 0035
-AE "
-OE 1019453,728178,0,125650 2 0036
-char216 815562,779150,50973,79216 3 0037
-/O "
---- 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
-char173 349526,466034,0,20402 0 0055
-hy "
-- "
-. 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
-char161 334963,524288,203890,16776 3 0074
-r! "
-= 815562,387973,-136315,53338 0 0075
-char191 495163,524288,203890 3 0076
-r? "
-? 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~ "
-char168 524290,712366,0,66949 2 0177
-ad "
diff --git a/contrib/groff/devdvi/I b/contrib/groff/devdvi/I
deleted file mode 100644
index 2323eed..0000000
--- a/contrib/groff/devdvi/I
+++ /dev/null
@@ -1,366 +0,0 @@
-#
-# manually added kernings for `` and ''
-#
-name I
-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
-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
-char180 535936,728178,0,101654 2 0023
-aa "
-ah 535936,659002,0,86982 2 0024
-ab 535936,728178,0,113306 2 0025
-char175 535936,588949,0,108354 2 0026
-a- "
-ao 871672,728178 2 0027
-char184 482342,0,178403 1 0030
-ac "
-char223 562733,728178,203890,110245 3 0031
-ss "
-char230 750310,451470,0,78789 0 0032
-ae "
-oe 750310,451470,0,78789 0 0033
-char248 535936,553416,101946,96411 3 0034
-/o "
-char198 925654,716526,0,126120 2 0035
-AE "
-OE 1032842,716526,0,126120 2 0036
-char216 803904,767499,50973,98595 3 0037
-/O "
---- 267968,451470 0 0040
-! 321562,728178,0,130200 2 0041
-rq 539432,728178,0,72994 2 0042
-sh 857498,728178,203888,69378 3 0043
-# "
-char163 806453,728178 2 0044
-Po "
-% 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
-char173 375155,451470,0,29637 0 0055
-hy "
-- "
-. 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
-char161 321562,524288,203890,79227 3 0074
-r! "
-= 803904,384696,-139592,69378 0 0075
-char191 535936,524288,203890 3 0076
-r? "
-? 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~ "
-char168 535936,700301,0,109832 2 0177
-ad "
diff --git a/contrib/groff/devdvi/MI b/contrib/groff/devdvi/MI
deleted file mode 100644
index 2b2e349..0000000
--- a/contrib/groff/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
-char181 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
---- 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
---- 1048579,384696,-139592 0 0050
---- 1048579,384696,-139592 0 0051
---- 1048579,384696,-139592 0 0052
---- 1048579,384696,-139592 0 0053
---- 291272,486275,-38013 2 0054
---- 291272,486275,-38013 2 0055
---- 524290,487880,-36408 2 0056
---- 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
---- 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
---- 407781,786432 2 0133
---- 407781,728178,203890 3 0134
---- 407781,728178,203890 3 0135
---- 1048579,375013,-149275 0 0136
---- 1048579,375013,-149275 0 0137
---- 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/devdvi/Makefile.sub b/contrib/groff/devdvi/Makefile.sub
deleted file mode 100644
index 5f30be2..0000000
--- a/contrib/groff/devdvi/Makefile.sub
+++ /dev/null
@@ -1,11 +0,0 @@
-DEV=dvi
-DEVFILES=DESC R I B BI CW CWI MI S EX H HI HB SA SB \
- generate/CompileFonts 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
-
-CLEANADD=DESC
-
-DESC: DESC.in
- cat $(srcdir)/DESC.in >DESC
- test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>DESC
diff --git a/contrib/groff/devdvi/R b/contrib/groff/devdvi/R
deleted file mode 100644
index 2c7fe30..0000000
--- a/contrib/groff/devdvi/R
+++ /dev/null
@@ -1,441 +0,0 @@
-#
-# manually added kernings for `` and ''
-#
-name R
-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
-' ? 116509
-cq ? 116509
-' ! 116509
-cq ! 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 ' 81557
-f cq 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
-char180 524290,728178 2 0023
-aa "
-ah 524290,659002 2 0024
-ab 524290,728178 2 0025
-char175 524290,595357 2 0026
-a- "
-ao 786434,728178 2 0027
-char184 466035,0,178403 1 0030
-ac "
-char223 524291,728178 2 0031
-ss "
-char230 757307,451470 0 0032
-ae "
-oe 815562,451470 0 0033
-char248 524290,553416,101946 3 0034
-/o "
-char198 946634,716526 2 0035
-AE "
-OE 1063142,716526 2 0036
-char216 815562,767499,50973 3 0037
-/O "
---- 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
-char173 349526,451470 0 0055
-hy "
-- "
-. 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
-char161 291272,524288,203890 3 0074
-r! "
-eq 815562,384696,-139592 0 0075
-= "
-char191 495163,524288,203890 3 0076
-r? "
-? 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~ "
-char168 524290,700301 2 0177
-ad "
diff --git a/contrib/groff/devdvi/S b/contrib/groff/devdvi/S
deleted file mode 100644
index 75abc6c..0000000
--- a/contrib/groff/devdvi/S
+++ /dev/null
@@ -1,153 +0,0 @@
-name S
-special
-internalname cmsy10
-slant 14.036243
-checksum 555887770
-designsize 10485760
-charset
-mi 815562,611670,87382 3 0000
-\- "
-md 291272,466035,-58253 2 0001
-pc "
-char215 815562,611670,87382 3 0002
-mu "
-** 524290,487880,-36408 2 0003
-char247 815562,611670,87382 3 0004
-di "
---- 524290,466035,-58253 2 0005
-char177 815562,611670,87382 3 0006
-+- "
--+ 815562,611670,87382 3 0007
-c+ 815562,611670,87382 3 0010
---- 815562,611670,87382 3 0011
-c* 815562,611670,87382 3 0012
---- 815562,611670,87382 3 0013
---- 815562,611670,87382 3 0014
-ci 1048579,728178,203890 3 0015
---- 524290,466035,-58253 2 0016
-bu 524290,466035,-58253 2 0017
---- 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
---- 815562,666864,142576 3 0026
---- 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
---- 815562,565285,40997 3 0036
---- 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
---- 1048579,728178,203888 3 0045
---- 1048579,728178,203888 3 0046
-~= 815562,486275,-38013 2 0047
-lh 1048579,384696,-139592 0 0050
-lA "
-rh 1048579,384696,-139592 0 0051
-rA "
-uA 640798,728178,203888 3 0052
-dA 640798,728178,203888 3 0053
-hA 1048579,384696,-139592 0 0054
---- 1048579,728178,203888 3 0055
---- 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
---- 932070,728178,203890 3 0064
---- 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
-char172 699053,451470 0 0072
-no "
-es 524290,786432,58254 3 0073
-Re 757307,728178 2 0074
-Im 757307,728178 2 0075
---- 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
---- 699053,582544 2 0135
-AN 699053,582544 2 0136
-OR 699053,582544 2 0137
---- 640798,728178 2 0140
---- 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
-or "
-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
-\ "
---- 291272,728178,203888 3 0157
-sr 873816,41942,1006634 1 0160
---- 786434,716526 2 0161
-gr 873816,716526 2 0162
---- 436909,728178,203890,116509 3 0163
---- 699053,582544 2 0164
---- 699053,582544 2 0165
---- 815562,666864,142576 3 0166
---- 815562,666864,142576 3 0167
-char167 466037,728178,203890 3 0170
-sc "
-dg 466035,728178,203890 3 0171
-dd 466035,728178,203890 3 0172
-char182 640798,728178,203890 3 0173
-ps "
-CL 815562,728178,135926 3 0174
-DI 815562,728178,135926 3 0175
-HE 815562,728178,135926 3 0176
-SP 815562,728178,135926 3 0177
diff --git a/contrib/groff/devdvi/SA b/contrib/groff/devdvi/SA
deleted file mode 100644
index 91879fc..0000000
--- a/contrib/groff/devdvi/SA
+++ /dev/null
@@ -1,143 +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
-char165 786434,707789,0,26214 2 0125
-Ye "
-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
-char174 "
-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/devdvi/SB b/contrib/groff/devdvi/SB
deleted file mode 100644
index 811b351..0000000
--- a/contrib/groff/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/devdvi/generate/CompileFonts b/contrib/groff/devdvi/generate/CompileFonts
deleted file mode 100755
index 8859f8e..0000000
--- a/contrib/groff/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 11 12 14 16 18 20 22 24 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/devdvi/generate/Makefile b/contrib/groff/devdvi/generate/Makefile
deleted file mode 100644
index c8cd656..0000000
--- a/contrib/groff/devdvi/generate/Makefile
+++ /dev/null
@@ -1,107 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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=.
-tfmdir=/usr/local/lib/groff-tfm
-gfdir=/usr/local/lib/groff-gf
-
-TFMTODIT=tfmtodit
-FONTS=R I B BI CW CWI MI S EX H HI HB SA SB
-SPECIALFLAG=-s
-
-all: $(FONTS)
-
-# R is special because it contains \(pl \(eq
-
-R: $(srcdir)/texr.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/cmr10.300gf \
- $(tfmdir)/cmr10.tfm $(srcdir)/texr.map $@
-
-# I is special because it contains \(Po
-
-I: $(srcdir)/texi.map
- $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/cmti10.300gf \
- $(tfmdir)/cmti10.tfm $(srcdir)/texi.map $@
-
-B: $(srcdir)/texb.map
- $(TFMTODIT) -g $(gfdir)/cmbx10.300gf \
- $(tfmdir)/cmbx10.tfm $(srcdir)/texb.map $@
-
-BI: $(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 $@
-
-EX: $(srcdir)/texex.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/cmex10.tfm $(srcdir)/texex.map $@
-
-H: $(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 $@
-
-SA: $(srcdir)/msam.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/msam10.tfm $(srcdir)/msam.map $@
-
-SB: $(srcdir)/msbm.map
- $(TFMTODIT) $(SPECIALFLAG) \
- $(tfmdir)/msbm10.tfm $(srcdir)/msbm.map $@
-
-clean:
-
-realclean:
- -rm -f $(FONTS)
-
-extraclean: realclean
- -rm -f core *~ \#*
-
-.PHONY: clean realclean extraclean all
diff --git a/contrib/groff/devdvi/generate/cork.map b/contrib/groff/devdvi/generate/cork.map
deleted file mode 100644
index 4e4a35a..0000000
--- a/contrib/groff/devdvi/generate/cork.map
+++ /dev/null
@@ -1,206 +0,0 @@
-# Map for DC/EC fonts with Cork encoding.
-# Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-0 ga
-1 aa char180
-2 a^
-3 a~
-4 ad char168
-5 a"
-6 ao
-7 ah
-8 ab
-9 a- char175
-10 a.
-11 ac char184
-12 ho
-13 bq
-14 fo
-15 fc
-16 lq
-17 rq
-18 Bq
-19 Fo char171
-20 Fc char187
-21 en
-22 em
-25 .i
-26 .j
-27 ff
-28 fi
-29 fl
-30 Fi
-31 Fl
-33 !
-34 " dq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' aq cq
-40 (
-41 )
-42 *
-43 + pl
-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 = eq
-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 | or bv ba
-125 } rC
-126 ~
-127 hy char173
-130 'C
-138 /L
-146 vS
-152 :Y
-154 vZ
-156 IJ
-159 sc char167
-162 'c
-170 (l
-178 vs
-184 :y char255
-186 vz
-188 ij
-189 r! char161
-190 r? char191
-191 Po char163
-192 `A char192
-193 'A char193
-194 ^A char194
-195 ~A char195
-196 :A char196
-197 oA char197
-198 AE char198
-199 ,C char199
-200 `E char200
-201 'E char201
-202 ^E char202
-203 :E char203
-204 `I char204
-205 'I char205
-206 ^I char206
-207 :I char207
-208 -D char208
-209 ~N char209
-210 `O char210
-211 'O char211
-212 ^O char212
-213 ~O char213
-214 :O char214
-215 OE
-216 /O char216
-217 `U char217
-218 'U char218
-219 ^U char219
-220 :U char220
-221 char221
-222 TP char222
-224 `a char224
-225 'a char225
-226 ^a char226
-227 ~a char227
-228 :a char228
-229 oa char229
-230 ae char230
-231 ,c char231
-232 `e char232
-233 'e char233
-234 ^e char234
-235 :e char235
-236 `i char236
-237 'i char237
-238 ^i char238
-239 :i char239
-240 Sd char240
-241 ~n char241
-242 `o char242
-243 'o char243
-244 ^o char244
-245 ~o char245
-246 :o char246
-247 oe
-248 /o char248
-249 `u char249
-250 'u char250
-251 ^u char251
-252 :u char252
-253 char253
-254 Tp char254
-255 ss char223
diff --git a/contrib/groff/devdvi/generate/msam.map b/contrib/groff/devdvi/generate/msam.map
deleted file mode 100644
index 90006c9..0000000
--- a/contrib/groff/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 char165
-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 char174 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/devdvi/generate/msbm.map b/contrib/groff/devdvi/generate/msbm.map
deleted file mode 100644
index 07ee095..0000000
--- a/contrib/groff/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/devdvi/generate/texb.map b/contrib/groff/devdvi/generate/texb.map
deleted file mode 100644
index b2bcd15..0000000
--- a/contrib/groff/devdvi/generate/texb.map
+++ /dev/null
@@ -1,127 +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 char180
-20 ah
-21 ab
-22 a- char175
-23 ao
-24 ac char184
-25 ss char223
-26 ae char230
-27 oe
-28 /o char248
-29 AE char198
-30 OE
-31 /O char216
-33 !
-34 rq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 +
-44 ,
-45 - hy char173
-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! char161
-61 =
-62 r? char191
-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 char168
diff --git a/contrib/groff/devdvi/generate/texex.map b/contrib/groff/devdvi/generate/texex.map
deleted file mode 100644
index a5b2690..0000000
--- a/contrib/groff/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 is 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 sr0
-113 sr1
-114 sr2
-115 sr3
-119 arrowvertdblex
-120 arrowverttp
-121 arrowvertbt
-126 arrowvertdbltp
-127 arrowvertdblbt
diff --git a/contrib/groff/devdvi/generate/texi.map b/contrib/groff/devdvi/generate/texi.map
deleted file mode 100644
index 4ca802a..0000000
--- a/contrib/groff/devdvi/generate/texi.map
+++ /dev/null
@@ -1,127 +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 char180
-20 ah
-21 ab
-22 a- char175
-23 ao
-24 ac char184
-25 ss char223
-26 ae char230
-27 oe
-28 /o char248
-29 AE char198
-30 OE
-31 /O char216
-33 !
-34 rq
-35 # sh
-36 Po char163
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 +
-44 ,
-45 - hy char173
-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! char161
-61 =
-62 r? char191
-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 char168
diff --git a/contrib/groff/devdvi/generate/texmi.map b/contrib/groff/devdvi/generate/texmi.map
deleted file mode 100644
index 6d01dc4..0000000
--- a/contrib/groff/devdvi/generate/texmi.map
+++ /dev/null
@@ -1,32 +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 char181
-23 *n
-24 *c
-25 *p
-26 *r
-27 *s
-28 *t
-29 *u
-30 *f
-31 *x
-32 *q
-33 *w
-35 +h
-36 +p
-38 ts
-39 +f
-60 <
-62 >
-64 pd
-111 *o
-125 wp
diff --git a/contrib/groff/devdvi/generate/texr.map b/contrib/groff/devdvi/generate/texr.map
deleted file mode 100644
index 7db0e5f..0000000
--- a/contrib/groff/devdvi/generate/texr.map
+++ /dev/null
@@ -1,127 +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 char180
-20 ah
-21 ab
-22 a- char175
-23 ao
-24 ac char184
-25 ss char223
-26 ae char230
-27 oe
-28 /o char248
-29 AE char198
-30 OE
-31 /O char216
-33 !
-34 rq
-35 # sh
-36 $ Do
-37 %
-38 &
-39 ' cq
-40 (
-41 )
-42 *
-43 + pl
-44 ,
-45 - hy char173
-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! char161
-61 = eq
-62 r? char191
-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 char168
diff --git a/contrib/groff/devdvi/generate/texsy.map b/contrib/groff/devdvi/generate/texsy.map
deleted file mode 100644
index fe98eb2..0000000
--- a/contrib/groff/devdvi/generate/texsy.map
+++ /dev/null
@@ -1,100 +0,0 @@
-0 \- mi
-1 md pc
-2 mu char215
-3 **
-4 di char247
-6 +- char177
-7 -+
-8 c+
-10 c*
-13 ci
-15 bu
-17 ==
-18 ib
-19 ip
-20 <=
-21 >=
-24 ap ti
-25 ~~
-26 sb
-27 sp
-28 <<
-29 >>
-32 <-
-33 ->
-34 ua
-35 da
-36 <>
-39 ~=
-40 lA lh
-41 rA rh
-42 uA
-43 dA
-44 hA
-47 pt
-48 prime
-49 if
-50 mo
-51 st
-54 slashnot
-56 fa
-57 te
-58 no char172
-59 es
-60 Re
-61 Im
-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
-94 AN
-95 OR
-98 lf
-99 rf
-100 lc
-101 rc
-102 lC {
-103 rC }
-104 la
-105 ra
-106 ba | bv or bar
-107 bardbl
-108 va
-109 vA
-110 \ rs
-112 sr
-114 gr
-120 sc char167
-121 dg
-122 dd
-123 ps char182
-124 CL
-125 DI
-126 HE
-127 SP
diff --git a/contrib/groff/devdvi/generate/textt.map b/contrib/groff/devdvi/generate/textt.map
deleted file mode 100644
index 80e8911..0000000
--- a/contrib/groff/devdvi/generate/textt.map
+++ /dev/null
@@ -1,126 +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 char180
-20 ah
-21 ab
-22 a- char175
-23 ao
-24 ac char184
-25 ss char223
-26 ae char230
-27 oe
-28 /o char248
-29 AE char198
-30 OE
-31 /O char216
-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~ ~
diff --git a/contrib/groff/devhtml/CB b/contrib/groff/devhtml/CB
deleted file mode 100644
index b726465..0000000
--- a/contrib/groff/devhtml/CB
+++ /dev/null
@@ -1,308 +0,0 @@
-name CB
-spacewidth 9
-charset
---- 9,1 0 040
-! 9,9 0 041
-" 9,10 0 042 &quot;
-dq "
-# 9,10,1 0 043
-sh "
-$ 9,11,1 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046 &amp;
-' 9,10 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 &lt;
-= 9,6 0 075
-eq "
-> 9,8 0 076 &gt;
-? 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,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,9,2 0 0173
-lC "
-| 9,9,2 0 0174
-or "
-ba "
-} 9,9,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-r! 9,7,2 0 0241 &iexcl;
-¡ "
-ct 9,9,1 0 0242 &cent;
-¢ "
-Po 9,9 0 0243 &pound;
-£ "
-Cs 9,7 0 0244 &curren;
-¤ "
-Ye 9,9 0 0245 &yen;
-¥ "
-bb 9,9,2 0 0246 &brvbar;
-¦ "
-sc 9,10,1 0 0247 &sect;
-§ "
-ad 9,10 0 0250 &uml;
-¨ "
-co 9,9 0 0251 &copy;
-© "
-Of 9,9 0 0252 &ordf;
-ª "
-Fo 9,6 0 0253 &laquo;
-« "
-no 9,5 0 0254 &not;
-¬ "
-- 9,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 9,9 0 0256 &reg;
-® "
-a- 9,9 0 0257 &macr;
-¯ "
-de 9,9 0 0260 &deg;
-° "
-+- 9,8 0 0261 &plusmn;
-± "
-S2 9,10 0 0262 &sup2;
-² "
-S3 9,10 0 0263 &sup3;
-³ "
-aa 9,9 0 0264 &acute;
-´ "
-µ 9,7,3 0 0265 &micro;
-ps 9,10,1 0 0266 &para;
-¶ "
-pc 9,5 0 0267 &middot;
-· "
-ac 9,1,3 0 0270 &cedil;
-¸ "
-S1 9,10 0 0271 &sup1;
-¹ "
-Om 9,9 0 0272 &ordm;
-º "
-Fc 9,6 0 0273 &raquo;
-» "
-14 9,10 0 0274 &frac14;
-¼ "
-12 9,10 0 0275 &frac12;
-½ "
-34 9,10 0 0276 &frac34;
-¾ "
-r? 9,7,2 0 0277 &iquest;
-¿ "
-`A 9,12 0 0300 &Agrave;
-À "
-'A 9,12 0 0301 &Aacute;
-Á "
-^A 9,12 0 0302 &Acirc;
-Â "
-~A 9,12 0 0303 &Atilde;
-Ã "
-:A 9,12 0 0304 &Auml;
-Ä "
-oA 9,12 0 0305 &Aring;
-Å "
-AE 9,9 0 0306 &AElig;
-Æ "
-,C 9,9,4 0 0307 &Ccedil;
-Ç "
-`E 9,12 0 0310 &Egrave;
-È "
-'E 9,12 0 0311 &Eacute;
-É "
-^E 9,12 0 0312 &Ecirc;
-Ê "
-:E 9,12 0 0313 &Euml;
-Ë "
-`I 9,12 0 0314 &Igrave;
-Ì "
-'I 9,12 0 0315 &Iacute;
-Í "
-^I 9,12 0 0316 &Icirc;
-Î "
-:I 9,12 0 0317 &Iuml;
-Ï "
--D 9,9 0 0320 &ETH;
-Ð "
-~N 9,12 0 0321 &Ntilde;
-Ñ "
-`O 9,12 0 0322 &Ograve;
-Ò "
-'O 9,12 0 0323 &Oacute;
-Ó "
-^O 9,12 0 0324 &Ocirc;
-Ô "
-~O 9,12 0 0325 &Otilde;
-Õ "
-:O 9,12 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 9,10 0 0330 &Oslash;
-Ø "
-`U 9,12 0 0331 &Ugrave;
-Ù "
-'U 9,12 0 0332 &Uacute;
-Ú "
-^U 9,12 0 0333 &Ucirc;
-Û "
-:U 9,12 0 0334 &Uuml;
-Ü "
-'Y 9,12 0 0335 &Yacute;
-Ý "
-TP 9,9 0 0336 &THORN;
-Þ "
-ss 9,9 0 0337 &szlig;
-ß "
-`a 9,10 0 0340 &agrave;
-à "
-'a 9,10 0 0341 &aacute;
-á "
-^a 9,10 0 0342 &acirc;
-â "
-~a 9,10 0 0343 &atilde;
-ã "
-:a 9,10 0 0344 &auml;
-ä "
-oa 9,10 0 0345 &aring;
-å "
-ae 9,7 0 0346 &aelig;
-æ "
-,c 9,7,4 0 0347 &ccedil;
-ç "
-`e 9,10 0 0350 &egrave;
-è "
-'e 9,10 0 0351 &eacute;
-é "
-^e 9,10 0 0352 &ecirc;
-ê "
-:e 9,10 0 0353 &euml;
-ë "
-`i 9,10 0 0354 &igrave;
-ì "
-'i 9,10 0 0355 &iacute;
-í "
-^i 9,10 0 0356 &icirc;
-î "
-:i 9,10 0 0357 &iuml;
-ï "
-Sd 9,10 0 0360 &eth;
-ð "
-~n 9,10 0 0361 &ntilde;
-ñ "
-`o 9,10 0 0362 &ograve;
-ò "
-'o 9,10 0 0363 &oacute;
-ó "
-^o 9,10 0 0364 &ocirc;
-ô "
-~o 9,10 0 0365 &otilde;
-õ "
-:o 9,10 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 9,7 0 0370 &oslash;
-ø "
-`u 9,10 0 0371 &ugrave;
-ù "
-'u 9,10 0 0372 &uacute;
-ú "
-^u 9,10 0 0373 &ucirc;
-û "
-:u 9,10 0 0374 &uuml;
-ü "
-'y 9,10,3 0 0375 &yacute;
-ý "
-Tp 9,9,3 0 0376 &thorn;
-þ "
-:y 9,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/CBI b/contrib/groff/devhtml/CBI
deleted file mode 100644
index 54d69b9..0000000
--- a/contrib/groff/devhtml/CBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CBI
-spacewidth 9
-charset
---- 9,1 0 040
-! 9,10 0 041
-" 9,9 0 042 &quot;
-dq "
-# 9,11,1 0 043
-sh "
-$ 9,11,1 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046 &amp;
-' 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 &lt;
-= 9,6 0 075
-eq "
-> 9,8 0 076 &gt;
-? 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
-or "
-ba "
-} 9,9,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-r! 9,7,3 0 0241 &iexcl;
-¡ "
-ct 9,9,1 0 0242 &cent;
-¢ "
-Po 9,9 0 0243 &pound;
-£ "
-Cs 9,7 0 0244 &curren;
-¤ "
-Ye 9,9 0 0245 &yen;
-¥ "
-bb 9,10,2 0 0246 &brvbar;
-¦ "
-sc 9,10,1 0 0247 &sect;
-§ "
-ad 9,10 0 0250 &uml;
-¨ "
-co 9,9 0 0251 &copy;
-© "
-Of 9,9 0 0252 &ordf;
-ª "
-Fo 9,6 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 9,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 9,9 0 0256 &reg;
-® "
-a- 9,9 0 0257 &macr;
-¯ "
-de 9,10 0 0260 &deg;
-° "
-+- 9,8 0 0261 &plusmn;
-± "
-S2 9,10 0 0262 &sup2;
-² "
-S3 9,10 0 0263 &sup3;
-³ "
-aa 9,10 0 0264 &acute;
-´ "
-µ 9,7,3 0 0265 &micro;
-ps 9,10,1 0 0266 &para;
-¶ "
-pc 9,5 0 0267 &middot;
-· "
-ac 9,1,3 0 0270 &cedil;
-¸ "
-S1 9,10 0 0271 &sup1;
-¹ "
-Om 9,9 0 0272 &ordm;
-º "
-Fc 9,6 0 0273 &raquo;
-» "
-14 9,10 0 0274 &frac14;
-¼ "
-12 9,10 0 0275 &frac12;
-½ "
-34 9,10 0 0276 &frac34;
-¾ "
-r? 9,7,2 0 0277 &iquest;
-¿ "
-`A 9,12 0 0300 &Agrave;
-À "
-'A 9,12 0 0301 &Aacute;
-Á "
-^A 9,12 0 0302 &Acirc;
-Â "
-~A 9,12 0 0303 &Atilde;
-Ã "
-:A 9,12 0 0304 &Auml;
-Ä "
-oA 9,12 0 0305 &Aring;
-Å "
-AE 9,9 0 0306 &AElig;
-Æ "
-,C 9,9,4 0 0307 &Ccedil;
-Ç "
-`E 9,12 0 0310 &Egrave;
-È "
-'E 9,12 0 0311 &Eacute;
-É "
-^E 9,12 0 0312 &Ecirc;
-Ê "
-:E 9,12 0 0313 &Euml;
-Ë "
-`I 9,12 0 0314 &Igrave;
-Ì "
-'I 9,12 0 0315 &Iacute;
-Í "
-^I 9,12 0 0316 &Icirc;
-Î "
-:I 9,12 0 0317 &Iuml;
-Ï "
--D 9,9 0 0320 &ETH;
-Ð "
-~N 9,12 0 0321 &Ntilde;
-Ñ "
-`O 9,12 0 0322 &Ograve;
-Ò "
-'O 9,12 0 0323 &Oacute;
-Ó "
-^O 9,12 0 0324 &Ocirc;
-Ô "
-~O 9,12 0 0325 &Otilde;
-Õ "
-:O 9,12 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 9,9 0 0330 &Oslash;
-Ø "
-`U 9,12 0 0331 &Ugrave;
-Ù "
-'U 9,12 0 0332 &Uacute;
-Ú "
-^U 9,12 0 0333 &Ucirc;
-Û "
-:U 9,12 0 0334 &Uuml;
-Ü "
-'Y 9,12 0 0335 &Yacute;
-Ý "
-TP 9,9 0 0336 &THORN;
-Þ "
-ss 9,9 0 0337 &szlig;
-ß "
-`a 9,10 0 0340 &agrave;
-à "
-'a 9,10 0 0341 &aacute;
-á "
-^a 9,10 0 0342 &acirc;
-â "
-~a 9,10 0 0343 &atilde;
-ã "
-:a 9,10 0 0344 &auml;
-ä "
-oa 9,10 0 0345 &aring;
-å "
-ae 9,7 0 0346 &aelig;
-æ "
-,c 9,7,4 0 0347 &ccedil;
-ç "
-`e 9,10 0 0350 &egrave;
-è "
-'e 9,10 0 0351 &eacute;
-é "
-^e 9,10 0 0352 &ecirc;
-ê "
-:e 9,10 0 0353 &euml;
-ë "
-`i 9,10 0 0354 &igrave;
-ì "
-'i 9,10 0 0355 &iacute;
-í "
-^i 9,10 0 0356 &icirc;
-î "
-:i 9,10 0 0357 &iuml;
-ï "
-Sd 9,10 0 0360 &eth;
-ð "
-~n 9,10 0 0361 &ntilde;
-ñ "
-`o 9,10 0 0362 &ograve;
-ò "
-'o 9,10 0 0363 &oacute;
-ó "
-^o 9,10 0 0364 &ocirc;
-ô "
-~o 9,10 0 0365 &otilde;
-õ "
-:o 9,10 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 9,8 0 0370 &oslash;
-ø "
-`u 9,10 0 0371 &ugrave;
-ù "
-'u 9,10 0 0372 &uacute;
-ú "
-^u 9,10 0 0373 &ucirc;
-û "
-:u 9,10 0 0374 &uuml;
-ü "
-'y 9,10,3 0 0375 &yacute;
-ý "
-Tp 9,9,3 0 0376 &thorn;
-þ "
-:y 9,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/CI b/contrib/groff/devhtml/CI
deleted file mode 100644
index 13dacff..0000000
--- a/contrib/groff/devhtml/CI
+++ /dev/null
@@ -1,308 +0,0 @@
-name CI
-spacewidth 9
-charset
---- 9,1 0 040
-! 9,9 0 041
-" 9,10 0 042 &quot;
-dq "
-# 9,10,1 0 043
-sh "
-$ 9,10,1 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046 &amp;
-' 9,10 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 &lt;
-= 9,6 0 075
-eq "
-> 9,8 0 076 &gt;
-? 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,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,3 0 0173
-lC "
-| 9,9,2 0 0174
-or "
-ba "
-} 9,10,3 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-r! 9,7,2 0 0241 &iexcl;
-¡ "
-ct 9,10 0 0242 &cent;
-¢ "
-Po 9,9 0 0243 &pound;
-£ "
-Cs 9,7 0 0244 &curren;
-¤ "
-Ye 9,9 0 0245 &yen;
-¥ "
-bb 9,9,2 0 0246 &brvbar;
-¦ "
-sc 9,9,1 0 0247 &sect;
-§ "
-ad 9,9 0 0250 &uml;
-¨ "
-co 9,9 0 0251 &copy;
-© "
-Of 9,9 0 0252 &ordf;
-ª "
-Fo 9,7 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 9,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 9,9 0 0256 &reg;
-® "
-a- 9,9 0 0257 &macr;
-¯ "
-de 9,10 0 0260 &deg;
-° "
-+- 9,8 0 0261 &plusmn;
-± "
-S2 9,10 0 0262 &sup2;
-² "
-S3 9,10 0 0263 &sup3;
-³ "
-aa 9,9 0 0264 &acute;
-´ "
-µ 9,7,3 0 0265 &micro;
-ps 9,9,1 0 0266 &para;
-¶ "
-pc 9,5 0 0267 &middot;
-· "
-ac 9,1,3 0 0270 &cedil;
-¸ "
-S1 9,10 0 0271 &sup1;
-¹ "
-Om 9,9 0 0272 &ordm;
-º "
-Fc 9,7 0 0273 &raquo;
-» "
-14 9,10 0 0274 &frac14;
-¼ "
-12 9,10 0 0275 &frac12;
-½ "
-34 9,10 0 0276 &frac34;
-¾ "
-r? 9,7,2 0 0277 &iquest;
-¿ "
-`A 9,12 0 0300 &Agrave;
-À "
-'A 9,12 0 0301 &Aacute;
-Á "
-^A 9,12 0 0302 &Acirc;
-Â "
-~A 9,12 0 0303 &Atilde;
-Ã "
-:A 9,11 0 0304 &Auml;
-Ä "
-oA 9,12 0 0305 &Aring;
-Å "
-AE 9,9 0 0306 &AElig;
-Æ "
-,C 9,9,3 0 0307 &Ccedil;
-Ç "
-`E 9,12 0 0310 &Egrave;
-È "
-'E 9,12 0 0311 &Eacute;
-É "
-^E 9,12 0 0312 &Ecirc;
-Ê "
-:E 9,11 0 0313 &Euml;
-Ë "
-`I 9,12 0 0314 &Igrave;
-Ì "
-'I 9,12 0 0315 &Iacute;
-Í "
-^I 9,12 0 0316 &Icirc;
-Î "
-:I 9,11 0 0317 &Iuml;
-Ï "
--D 9,9 0 0320 &ETH;
-Ð "
-~N 9,12 0 0321 &Ntilde;
-Ñ "
-`O 9,12 0 0322 &Ograve;
-Ò "
-'O 9,12 0 0323 &Oacute;
-Ó "
-^O 9,12 0 0324 &Ocirc;
-Ô "
-~O 9,12 0 0325 &Otilde;
-Õ "
-:O 9,11 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 9,9 0 0330 &Oslash;
-Ø "
-`U 9,12 0 0331 &Ugrave;
-Ù "
-'U 9,12 0 0332 &Uacute;
-Ú "
-^U 9,12 0 0333 &Ucirc;
-Û "
-:U 9,11 0 0334 &Uuml;
-Ü "
-'Y 9,12 0 0335 &Yacute;
-Ý "
-TP 9,9 0 0336 &THORN;
-Þ "
-ss 9,9 0 0337 &szlig;
-ß "
-`a 9,10 0 0340 &agrave;
-à "
-'a 9,10 0 0341 &aacute;
-á "
-^a 9,10 0 0342 &acirc;
-â "
-~a 9,10 0 0343 &atilde;
-ã "
-:a 9,9 0 0344 &auml;
-ä "
-oa 9,11 0 0345 &aring;
-å "
-ae 9,7 0 0346 &aelig;
-æ "
-,c 9,7,3 0 0347 &ccedil;
-ç "
-`e 9,10 0 0350 &egrave;
-è "
-'e 9,10 0 0351 &eacute;
-é "
-^e 9,10 0 0352 &ecirc;
-ê "
-:e 9,9 0 0353 &euml;
-ë "
-`i 9,10 0 0354 &igrave;
-ì "
-'i 9,10 0 0355 &iacute;
-í "
-^i 9,10 0 0356 &icirc;
-î "
-:i 9,9 0 0357 &iuml;
-ï "
-Sd 9,10 0 0360 &eth;
-ð "
-~n 9,10 0 0361 &ntilde;
-ñ "
-`o 9,10 0 0362 &ograve;
-ò "
-'o 9,10 0 0363 &oacute;
-ó "
-^o 9,10 0 0364 &ocirc;
-ô "
-~o 9,10 0 0365 &otilde;
-õ "
-:o 9,9 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 9,7 0 0370 &oslash;
-ø "
-`u 9,10 0 0371 &ugrave;
-ù "
-'u 9,10 0 0372 &uacute;
-ú "
-^u 9,10 0 0373 &ucirc;
-û "
-:u 9,9 0 0374 &uuml;
-ü "
-'y 9,10,3 0 0375 &yacute;
-ý "
-Tp 9,9,3 0 0376 &thorn;
-þ "
-:y 9,9,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/CR b/contrib/groff/devhtml/CR
deleted file mode 100644
index 94939c9..0000000
--- a/contrib/groff/devhtml/CR
+++ /dev/null
@@ -1,308 +0,0 @@
-name CR
-spacewidth 9
-charset
---- 9,1 0 040
-! 9,9 0 041
-" 9,10 0 042 &quot;
-dq "
-# 9,9,1 0 043
-sh "
-$ 9,11,2 0 044
-Do "
-% 9,10 0 045
-& 9,8 0 046 &amp;
-' 9,10 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 &lt;
-= 9,6 0 075
-eq "
-> 9,8 0 076 &gt;
-? 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
-or "
-ba "
-} 9,10,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-r! 9,7,2 0 0241 &iexcl;
-¡ "
-ct 9,9 0 0242 &cent;
-¢ "
-Po 9,9 0 0243 &pound;
-£ "
-Cs 9,7 0 0244 &curren;
-¤ "
-Ye 9,9 0 0245 &yen;
-¥ "
-bb 9,9,2 0 0246 &brvbar;
-¦ "
-sc 9,9,1 0 0247 &sect;
-§ "
-ad 9,9 0 0250 &uml;
-¨ "
-co 9,9 0 0251 &copy;
-© "
-Of 9,9 0 0252 &ordf;
-ª "
-Fo 9,7 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 9,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 9,9 0 0256 &reg;
-® "
-a- 9,9 0 0257 &macr;
-¯ "
-de 9,10 0 0260 &deg;
-° "
-+- 9,8 0 0261 &plusmn;
-± "
-S2 9,10 0 0262 &sup2;
-² "
-S3 9,10 0 0263 &sup3;
-³ "
-aa 9,10 0 0264 &acute;
-´ "
-µ 9,7,3 0 0265 &micro;
-ps 9,9,1 0 0266 &para;
-¶ "
-pc 9,5 0 0267 &middot;
-· "
-ac 9,0,3 0 0270 &cedil;
-¸ "
-S1 9,10 0 0271 &sup1;
-¹ "
-Om 9,9 0 0272 &ordm;
-º "
-Fc 9,7 0 0273 &raquo;
-» "
-14 9,10 0 0274 &frac14;
-¼ "
-12 9,10 0 0275 &frac12;
-½ "
-34 9,10 0 0276 &frac34;
-¾ "
-r? 9,7,2 0 0277 &iquest;
-¿ "
-`A 9,12 0 0300 &Agrave;
-À "
-'A 9,12 0 0301 &Aacute;
-Á "
-^A 9,12 0 0302 &Acirc;
-Â "
-~A 9,12 0 0303 &Atilde;
-Ã "
-:A 9,11 0 0304 &Auml;
-Ä "
-oA 9,12 0 0305 &Aring;
-Å "
-AE 9,9 0 0306 &AElig;
-Æ "
-,C 9,9,3 0 0307 &Ccedil;
-Ç "
-`E 9,12 0 0310 &Egrave;
-È "
-'E 9,12 0 0311 &Eacute;
-É "
-^E 9,12 0 0312 &Ecirc;
-Ê "
-:E 9,11 0 0313 &Euml;
-Ë "
-`I 9,12 0 0314 &Igrave;
-Ì "
-'I 9,12 0 0315 &Iacute;
-Í "
-^I 9,12 0 0316 &Icirc;
-Î "
-:I 9,11 0 0317 &Iuml;
-Ï "
--D 9,9 0 0320 &ETH;
-Ð "
-~N 9,12 0 0321 &Ntilde;
-Ñ "
-`O 9,12 0 0322 &Ograve;
-Ò "
-'O 9,12 0 0323 &Oacute;
-Ó "
-^O 9,12 0 0324 &Ocirc;
-Ô "
-~O 9,12 0 0325 &Otilde;
-Õ "
-:O 9,11 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 9,9 0 0330 &Oslash;
-Ø "
-`U 9,12 0 0331 &Ugrave;
-Ù "
-'U 9,12 0 0332 &Uacute;
-Ú "
-^U 9,12 0 0333 &Ucirc;
-Û "
-:U 9,11 0 0334 &Uuml;
-Ü "
-'Y 9,12 0 0335 &Yacute;
-Ý "
-TP 9,9 0 0336 &THORN;
-Þ "
-ss 9,9 0 0337 &szlig;
-ß "
-`a 9,10 0 0340 &agrave;
-à "
-'a 9,10 0 0341 &aacute;
-á "
-^a 9,10 0 0342 &acirc;
-â "
-~a 9,10 0 0343 &atilde;
-ã "
-:a 9,9 0 0344 &auml;
-ä "
-oa 9,10 0 0345 &aring;
-å "
-ae 9,7 0 0346 &aelig;
-æ "
-,c 9,7,3 0 0347 &ccedil;
-ç "
-`e 9,10 0 0350 &egrave;
-è "
-'e 9,10 0 0351 &eacute;
-é "
-^e 9,10 0 0352 &ecirc;
-ê "
-:e 9,9 0 0353 &euml;
-ë "
-`i 9,10 0 0354 &igrave;
-ì "
-'i 9,10 0 0355 &iacute;
-í "
-^i 9,10 0 0356 &icirc;
-î "
-:i 9,9 0 0357 &iuml;
-ï "
-Sd 9,12 0 0360 &eth;
-ð "
-~n 9,10 0 0361 &ntilde;
-ñ "
-`o 9,10 0 0362 &ograve;
-ò "
-'o 9,10 0 0363 &oacute;
-ó "
-^o 9,10 0 0364 &ocirc;
-ô "
-~o 9,10 0 0365 &otilde;
-õ "
-:o 9,9 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 9,7 0 0370 &oslash;
-ø "
-`u 9,10 0 0371 &ugrave;
-ù "
-'u 9,10 0 0372 &uacute;
-ú "
-^u 9,10 0 0373 &ucirc;
-û "
-:u 9,9 0 0374 &uuml;
-ü "
-'y 9,10,3 0 0375 &yacute;
-ý "
-Tp 9,9,3 0 0376 &thorn;
-þ "
-:y 9,9,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/DESC b/contrib/groff/devhtml/DESC
deleted file mode 100644
index a897752..0000000
--- a/contrib/groff/devhtml/DESC
+++ /dev/null
@@ -1,12 +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
-tcommand
-html
-hor 1
-vert 1
-unitwidth 10
-postpro grohtml
-use_charnames_in_special
-pass_filenames
diff --git a/contrib/groff/devhtml/HB b/contrib/groff/devhtml/HB
deleted file mode 100644
index 0e42103..0000000
--- a/contrib/groff/devhtml/HB
+++ /dev/null
@@ -1,308 +0,0 @@
-name HB
-spacewidth 4
-charset
---- 4,1 0 040
-! 4,11 0 041
-" 7,11 0 042 &quot;
-dq "
-# 9,10 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 13,11 0 045
-& 11,10 0 046 &amp;
-' 5,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
-\- 9,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 &lt;
-= 9,6 0 075
-eq "
-> 8,7 0 076 &gt;
-? 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
-or "
-ba "
-} 6,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-r! 4,8,3 0 0241 &iexcl;
-¡ "
-ct 8,9,1 0 0242 &cent;
-¢ "
-Po 8,11 0 0243 &pound;
-£ "
-Cs 8,9 0 0244 &curren;
-¤ "
-Ye 9,11 0 0245 &yen;
-¥ "
-bb 4,11,3 0 0246 &brvbar;
-¦ "
-sc 8,11,3 0 0247 &sect;
-§ "
-ad 5,11 0 0250 &uml;
-¨ "
-co 12,11 0 0251 &copy;
-© "
-Of 6,11 0 0252 &ordf;
-ª "
-Fo 9,7 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 4,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,11 0 0256 &reg;
-® "
-a- 5,10 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 9,9 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 9,8,3 0 0265 &micro;
-ps 8,11,3 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 4,11 0 0271 &sup1;
-¹ "
-Om 6,11 0 0272 &ordm;
-º "
-Fc 9,7 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 9,8,3 0 0277 &iquest;
-¿ "
-`A 10,14 0 0300 &Agrave;
-À "
-'A 10,14 0 0301 &Aacute;
-Á "
-^A 10,14 0 0302 &Acirc;
-Â "
-~A 10,14 0 0303 &Atilde;
-Ã "
-:A 10,14 0 0304 &Auml;
-Ä "
-oA 10,14 0 0305 &Aring;
-Å "
-AE 15,11 0 0306 &AElig;
-Æ "
-,C 11,11,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,14 0 0313 &Euml;
-Ë "
-`I 4,14 0 0314 &Igrave;
-Ì "
-'I 4,14 0 0315 &Iacute;
-Í "
-^I 4,14 0 0316 &Icirc;
-Î "
-:I 4,14 0 0317 &Iuml;
-Ï "
--D 11,11 0 0320 &ETH;
-Ð "
-~N 11,14 0 0321 &Ntilde;
-Ñ "
-`O 12,14 0 0322 &Ograve;
-Ò "
-'O 12,14 0 0323 &Oacute;
-Ó "
-^O 12,14 0 0324 &Ocirc;
-Ô "
-~O 12,14 0 0325 &Otilde;
-Õ "
-:O 12,14 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 12,11 0 0330 &Oslash;
-Ø "
-`U 11,14 0 0331 &Ugrave;
-Ù "
-'U 11,14 0 0332 &Uacute;
-Ú "
-^U 11,14 0 0333 &Ucirc;
-Û "
-:U 11,14 0 0334 &Uuml;
-Ü "
-'Y 10,14 0 0335 &Yacute;
-Ý "
-TP 10,11 0 0336 &THORN;
-Þ "
-ss 8,11 0 0337 &szlig;
-ß "
-`a 8,11 0 0340 &agrave;
-à "
-'a 8,11 0 0341 &aacute;
-á "
-^a 8,11 0 0342 &acirc;
-â "
-~a 8,11 0 0343 &atilde;
-ã "
-:a 8,11 0 0344 &auml;
-ä "
-oa 8,11 0 0345 &aring;
-å "
-ae 13,8 0 0346 &aelig;
-æ "
-,c 9,8,3 0 0347 &ccedil;
-ç "
-`e 8,11 0 0350 &egrave;
-è "
-'e 8,11 0 0351 &eacute;
-é "
-^e 8,11 0 0352 &ecirc;
-ê "
-:e 8,11 0 0353 &euml;
-ë "
-`i 4,11 0 0354 &igrave;
-ì "
-'i 4,11 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,11 0 0357 &iuml;
-ï "
-Sd 9,11 0 0360 &eth;
-ð "
-~n 9,11 0 0361 &ntilde;
-ñ "
-`o 9,11 0 0362 &ograve;
-ò "
-'o 9,11 0 0363 &oacute;
-ó "
-^o 9,11 0 0364 &ocirc;
-ô "
-~o 9,11 0 0365 &otilde;
-õ "
-:o 9,11 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 9,8 0 0370 &oslash;
-ø "
-`u 9,11 0 0371 &ugrave;
-ù "
-'u 9,11 0 0372 &uacute;
-ú "
-^u 9,11 0 0373 &ucirc;
-û "
-:u 9,11 0 0374 &uuml;
-ü "
-'y 8,11,3 0 0375 &yacute;
-ý "
-Tp 9,11,3 0 0376 &thorn;
-þ "
-:y 8,11,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/HBI b/contrib/groff/devhtml/HBI
deleted file mode 100644
index a933cfb..0000000
--- a/contrib/groff/devhtml/HBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HBI
-spacewidth 4
-charset
---- 4,1 0 040
-! 5,11 0 041
-" 7,11 0 042 &quot;
-dq "
-# 10,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11 0 045
-& 11,10 0 046 &amp;
-' 5,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
-\- 9,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 &lt;
-= 9,6 0 075
-eq "
-> 9,7 0 076 &gt;
-? 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
-or "
-ba "
-} 6,11,3 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-r! 5,8,3 0 0241 &iexcl;
-¡ "
-ct 8,9,1 0 0242 &cent;
-¢ "
-Po 9,11 0 0243 &pound;
-£ "
-Cs 9,8 0 0244 &curren;
-¤ "
-Ye 9,11 0 0245 &yen;
-¥ "
-bb 4,11,3 0 0246 &brvbar;
-¦ "
-sc 9,11,3 0 0247 &sect;
-§ "
-ad 5,11 0 0250 &uml;
-¨ "
-co 12,11 0 0251 &copy;
-© "
-Of 6,11 0 0252 &ordf;
-ª "
-Fo 11,7 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 5,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,11 0 0256 &reg;
-® "
-a- 5,11 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 9,9 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 9,8,3 0 0265 &micro;
-ps 8,11,3 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 5,1,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 6,11 0 0272 &ordm;
-º "
-Fc 11,7 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 13,11 0 0276 &frac34;
-¾ "
-r? 8,8,3 0 0277 &iquest;
-¿ "
-`A 9,14 0 0300 &Agrave;
-À "
-'A 9,14 0 0301 &Aacute;
-Á "
-^A 9,14 0 0302 &Acirc;
-Â "
-~A 9,14 0 0303 &Atilde;
-Ã "
-:A 9,14 0 0304 &Auml;
-Ä "
-oA 9,14 0 0305 &Aring;
-Å "
-AE 14,11 0 0306 &AElig;
-Æ "
-,C 11,11,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,14 0 0313 &Euml;
-Ë "
-`I 4,14 0 0314 &Igrave;
-Ì "
-'I 4,14 0 0315 &Iacute;
-Í "
-^I 4,14 0 0316 &Icirc;
-Î "
-:I 4,14 0 0317 &Iuml;
-Ï "
--D 11,11 0 0320 &ETH;
-Ð "
-~N 11,14 0 0321 &Ntilde;
-Ñ "
-`O 12,14 0 0322 &Ograve;
-Ò "
-'O 12,14 0 0323 &Oacute;
-Ó "
-^O 12,14 0 0324 &Ocirc;
-Ô "
-~O 12,14 0 0325 &Otilde;
-Õ "
-:O 12,14 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 12,11 0 0330 &Oslash;
-Ø "
-`U 11,14 0 0331 &Ugrave;
-Ù "
-'U 11,14 0 0332 &Uacute;
-Ú "
-^U 11,14 0 0333 &Ucirc;
-Û "
-:U 11,14 0 0334 &Uuml;
-Ü "
-'Y 10,14 0 0335 &Yacute;
-Ý "
-TP 10,11 0 0336 &THORN;
-Þ "
-ss 9,11 0 0337 &szlig;
-ß "
-`a 8,11 0 0340 &agrave;
-à "
-'a 8,11 0 0341 &aacute;
-á "
-^a 8,11 0 0342 &acirc;
-â "
-~a 8,11 0 0343 &atilde;
-ã "
-:a 8,11 0 0344 &auml;
-ä "
-oa 8,11 0 0345 &aring;
-å "
-ae 13,8 0 0346 &aelig;
-æ "
-,c 8,8,3 0 0347 &ccedil;
-ç "
-`e 8,11 0 0350 &egrave;
-è "
-'e 8,11 0 0351 &eacute;
-é "
-^e 8,11 0 0352 &ecirc;
-ê "
-:e 8,11 0 0353 &euml;
-ë "
-`i 4,11 0 0354 &igrave;
-ì "
-'i 4,11 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,11 0 0357 &iuml;
-ï "
-Sd 8,11 0 0360 &eth;
-ð "
-~n 9,11 0 0361 &ntilde;
-ñ "
-`o 8,11 0 0362 &ograve;
-ò "
-'o 8,11 0 0363 &oacute;
-ó "
-^o 8,11 0 0364 &ocirc;
-ô "
-~o 8,11 0 0365 &otilde;
-õ "
-:o 8,11 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 8,8 0 0370 &oslash;
-ø "
-`u 9,11 0 0371 &ugrave;
-ù "
-'u 9,11 0 0372 &uacute;
-ú "
-^u 9,11 0 0373 &ucirc;
-û "
-:u 9,11 0 0374 &uuml;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 9,11,3 0 0376 &thorn;
-þ "
-:y 7,11,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/HI b/contrib/groff/devhtml/HI
deleted file mode 100644
index 7007ada..0000000
--- a/contrib/groff/devhtml/HI
+++ /dev/null
@@ -1,308 +0,0 @@
-name HI
-spacewidth 4
-charset
---- 4,1 0 040
-! 4,11 0 041
-" 5,11 0 042 &quot;
-dq "
-# 9,10 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 12,11 0 045
-& 10,10 0 046 &amp;
-' 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
-\- 9,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 &lt;
-= 9,6 0 075
-eq "
-> 9,7 0 076 &gt;
-? 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
-` 3,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
-or "
-ba "
-} 5,11,3 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ap "
-ti "
-r! 4,8,3 0 0241 &iexcl;
-¡ "
-ct 8,9,1 0 0242 &cent;
-¢ "
-Po 9,11 0 0243 &pound;
-£ "
-Cs 8,8 0 0244 &curren;
-¤ "
-Ye 9,11 0 0245 &yen;
-¥ "
-bb 4,11,3 0 0246 &brvbar;
-¦ "
-sc 8,11,3 0 0247 &sect;
-§ "
-ad 5,10 0 0250 &uml;
-¨ "
-co 12,11 0 0251 &copy;
-© "
-Of 5,11 0 0252 &ordf;
-ª "
-Fo 8,6 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 5,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,11 0 0256 &reg;
-® "
-a- 4,10 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 9,9 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 4,11 0 0264 &acute;
-´ "
-µ 8,8,3 0 0265 &micro;
-ps 8,11,3 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 3,0,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 5,11 0 0272 &ordm;
-º "
-Fc 8,6 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 8,8,3 0 0277 &iquest;
-¿ "
-`A 11,14 0 0300 &Agrave;
-À "
-'A 11,14 0 0301 &Aacute;
-Á "
-^A 11,14 0 0302 &Acirc;
-Â "
-~A 11,14 0 0303 &Atilde;
-Ã "
-:A 11,13 0 0304 &Auml;
-Ä "
-oA 11,14 0 0305 &Aring;
-Å "
-AE 15,11 0 0306 &AElig;
-Æ "
-,C 10,11,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,13 0 0313 &Euml;
-Ë "
-`I 5,14 0 0314 &Igrave;
-Ì "
-'I 5,14 0 0315 &Iacute;
-Í "
-^I 5,14 0 0316 &Icirc;
-Î "
-:I 5,13 0 0317 &Iuml;
-Ï "
--D 10,11 0 0320 &ETH;
-Ð "
-~N 11,14 0 0321 &Ntilde;
-Ñ "
-`O 11,14 0 0322 &Ograve;
-Ò "
-'O 11,14 0 0323 &Oacute;
-Ó "
-^O 11,14 0 0324 &Ocirc;
-Ô "
-~O 11,14 0 0325 &Otilde;
-Õ "
-:O 11,13 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 11,11 0 0330 &Oslash;
-Ø "
-`U 11,14 0 0331 &Ugrave;
-Ù "
-'U 11,14 0 0332 &Uacute;
-Ú "
-^U 11,14 0 0333 &Ucirc;
-Û "
-:U 11,13 0 0334 &Uuml;
-Ü "
-'Y 9,14 0 0335 &Yacute;
-Ý "
-TP 9,11 0 0336 &THORN;
-Þ "
-ss 8,11 0 0337 &szlig;
-ß "
-`a 8,11 0 0340 &agrave;
-à "
-'a 8,11 0 0341 &aacute;
-á "
-^a 8,11 0 0342 &acirc;
-â "
-~a 8,11 0 0343 &atilde;
-ã "
-:a 8,11 0 0344 &auml;
-ä "
-oa 8,11 0 0345 &aring;
-å "
-ae 12,8 0 0346 &aelig;
-æ "
-,c 7,8,3 0 0347 &ccedil;
-ç "
-`e 8,11 0 0350 &egrave;
-è "
-'e 8,11 0 0351 &eacute;
-é "
-^e 8,11 0 0352 &ecirc;
-ê "
-:e 8,11 0 0353 &euml;
-ë "
-`i 3,11 0 0354 &igrave;
-ì "
-'i 3,11 0 0355 &iacute;
-í "
-^i 3,11 0 0356 &icirc;
-î "
-:i 3,11 0 0357 &iuml;
-ï "
-Sd 8,11 0 0360 &eth;
-ð "
-~n 8,11 0 0361 &ntilde;
-ñ "
-`o 8,11 0 0362 &ograve;
-ò "
-'o 8,11 0 0363 &oacute;
-ó "
-^o 8,11 0 0364 &ocirc;
-ô "
-~o 8,11 0 0365 &otilde;
-õ "
-:o 8,11 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 8,9,1 0 0370 &oslash;
-ø "
-`u 8,11 0 0371 &ugrave;
-ù "
-'u 8,11 0 0372 &uacute;
-ú "
-^u 8,11 0 0373 &ucirc;
-û "
-:u 8,11 0 0374 &uuml;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 8,11,3 0 0376 &thorn;
-þ "
-:y 7,11,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/HR b/contrib/groff/devhtml/HR
deleted file mode 100644
index 57f5603..0000000
--- a/contrib/groff/devhtml/HR
+++ /dev/null
@@ -1,308 +0,0 @@
-name HR
-spacewidth 4
-charset
---- 4,1 0 040
-! 4,11 0 041
-" 5,11 0 042 &quot;
-dq "
-# 8,10 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 12,11 0 045
-& 10,10 0 046 &amp;
-' 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
-\- 9,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 &lt;
-= 9,6 0 075
-eq "
-> 8,7 0 076 &gt;
-? 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
-` 3,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
-or "
-ba "
-} 5,11,3 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ap "
-ti "
-r! 4,8,3 0 0241 &iexcl;
-¡ "
-ct 8,9,1 0 0242 &cent;
-¢ "
-Po 8,11 0 0243 &pound;
-£ "
-Cs 8,8 0 0244 &curren;
-¤ "
-Ye 7,11 0 0245 &yen;
-¥ "
-bb 3,11,3 0 0246 &brvbar;
-¦ "
-sc 8,11,3 0 0247 &sect;
-§ "
-ad 5,10 0 0250 &uml;
-¨ "
-co 12,11 0 0251 &copy;
-© "
-Of 6,11 0 0252 &ordf;
-ª "
-Fo 8,7 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 4,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,11 0 0256 &reg;
-® "
-a- 4,10 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 9,9 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 8,8,3 0 0265 &micro;
-ps 8,11,3 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 6,11 0 0272 &ordm;
-º "
-Fc 8,7 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 8,8,3 0 0277 &iquest;
-¿ "
-`A 9,14 0 0300 &Agrave;
-À "
-'A 9,14 0 0301 &Aacute;
-Á "
-^A 9,14 0 0302 &Acirc;
-Â "
-~A 9,13 0 0303 &Atilde;
-Ã "
-:A 9,14 0 0304 &Auml;
-Ä "
-oA 9,14 0 0305 &Aring;
-Å "
-AE 14,11 0 0306 &AElig;
-Æ "
-,C 10,11,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,13 0 0313 &Euml;
-Ë "
-`I 4,14 0 0314 &Igrave;
-Ì "
-'I 4,14 0 0315 &Iacute;
-Í "
-^I 4,14 0 0316 &Icirc;
-Î "
-:I 4,13 0 0317 &Iuml;
-Ï "
--D 10,11 0 0320 &ETH;
-Ð "
-~N 10,14 0 0321 &Ntilde;
-Ñ "
-`O 11,14 0 0322 &Ograve;
-Ò "
-'O 11,14 0 0323 &Oacute;
-Ó "
-^O 11,14 0 0324 &Ocirc;
-Ô "
-~O 11,14 0 0325 &Otilde;
-Õ "
-:O 11,13 0 0326 &Ouml;
-Ö "
-mu 9,8 0 0327 &times;
-× "
-/O 11,11 0 0330 &Oslash;
-Ø "
-`U 10,14 0 0331 &Ugrave;
-Ù "
-'U 10,14 0 0332 &Uacute;
-Ú "
-^U 10,14 0 0333 &Ucirc;
-Û "
-:U 10,13 0 0334 &Uuml;
-Ü "
-'Y 9,14 0 0335 &Yacute;
-Ý "
-TP 9,11 0 0336 &THORN;
-Þ "
-ss 7,11 0 0337 &szlig;
-ß "
-`a 8,11 0 0340 &agrave;
-à "
-'a 8,11 0 0341 &aacute;
-á "
-^a 8,11 0 0342 &acirc;
-â "
-~a 8,11 0 0343 &atilde;
-ã "
-:a 8,11 0 0344 &auml;
-ä "
-oa 8,12 0 0345 &aring;
-å "
-ae 13,8 0 0346 &aelig;
-æ "
-,c 8,8,3 0 0347 &ccedil;
-ç "
-`e 8,11 0 0350 &egrave;
-è "
-'e 8,11 0 0351 &eacute;
-é "
-^e 8,11 0 0352 &ecirc;
-ê "
-:e 8,11 0 0353 &euml;
-ë "
-`i 3,11 0 0354 &igrave;
-ì "
-'i 3,11 0 0355 &iacute;
-í "
-^i 3,11 0 0356 &icirc;
-î "
-:i 3,11 0 0357 &iuml;
-ï "
-Sd 8,11 0 0360 &eth;
-ð "
-~n 8,11 0 0361 &ntilde;
-ñ "
-`o 8,11 0 0362 &ograve;
-ò "
-'o 8,11 0 0363 &oacute;
-ó "
-^o 8,11 0 0364 &ocirc;
-ô "
-~o 8,11 0 0365 &otilde;
-õ "
-:o 8,11 0 0366 &ouml;
-ö "
-di 9,8 0 0367 &divide;
-÷ "
-/o 8,8 0 0370 &oslash;
-ø "
-`u 8,11 0 0371 &ugrave;
-ù "
-'u 8,11 0 0372 &uacute;
-ú "
-^u 8,11 0 0373 &ucirc;
-û "
-:u 8,11 0 0374 &uuml;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 8,11,3 0 0376 &thorn;
-þ "
-:y 7,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/Makefile.sub b/contrib/groff/devhtml/Makefile.sub
deleted file mode 100644
index 57c9f44..0000000
--- a/contrib/groff/devhtml/Makefile.sub
+++ /dev/null
@@ -1,2 +0,0 @@
-DEV=html
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
diff --git a/contrib/groff/devhtml/NB b/contrib/groff/devhtml/NB
deleted file mode 100644
index 63f36bd..0000000
--- a/contrib/groff/devhtml/NB
+++ /dev/null
@@ -1,308 +0,0 @@
-name NB
-spacewidth 11
-charset
---- 11,1 0 040
-! 4,11 0 041
-" 5,11 0 042 &quot;
-dq "
-# 8,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11 0 045
-& 13,11 0 046 &amp;
-' 4,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
-\- 8,5 0 055
-. 4,3 0 056
-/ 5,11 0 057
-sl "
-0 8,11 0 060
-1 6,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 &lt;
-= 8,6 0 075
-eq "
-> 8,8 0 076 &gt;
-? 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
-` 4,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
-or "
-ba "
-} 6,11,2 0 0175
-rC "
-~ 8,6 0 0176
-a~ "
-ap "
-ti "
-r! 5,8,3 0 0241 &iexcl;
-¡ "
-ct 8,8,1 0 0242 &cent;
-¢ "
-Po 9,11 0 0243 &pound;
-£ "
-Cs 9,10 0 0244 &curren;
-¤ "
-Ye 11,11 0 0245 &yen;
-¥ "
-bb 8,11 0 0246 &brvbar;
-¦ "
-sc 7,11,2 0 0247 &sect;
-§ "
-ad 7,10 0 0250 &uml;
-¨ "
-co 12,11 0 0251 &copy;
-© "
-Of 6,11 0 0252 &ordf;
-ª "
-Fo 8,6 0 0253 &laquo;
-« "
-no 8,6 0 0254 &not;
-¬ "
-- 5,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,11 0 0256 &reg;
-® "
-a- 7,9 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 8,8 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 6,11 0 0264 &acute;
-´ "
-µ 10,7,3 0 0265 &micro;
-ps 10,11 0 0266 &para;
-¶ "
-pc 5,6 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 6,11 0 0272 &ordm;
-º "
-Fc 8,6 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 7,8,3 0 0277 &iquest;
-¿ "
-`A 11,15 0 0300 &Agrave;
-À "
-'A 11,15 0 0301 &Aacute;
-Á "
-^A 11,15 0 0302 &Acirc;
-Â "
-~A 11,14 0 0303 &Atilde;
-Ã "
-:A 11,14 0 0304 &Auml;
-Ä "
-oA 11,15 0 0305 &Aring;
-Å "
-AE 15,11 0 0306 &AElig;
-Æ "
-,C 11,11,3 0 0307 &Ccedil;
-Ç "
-`E 10,15 0 0310 &Egrave;
-È "
-'E 10,15 0 0311 &Eacute;
-É "
-^E 10,15 0 0312 &Ecirc;
-Ê "
-:E 10,14 0 0313 &Euml;
-Ë "
-`I 7,15 0 0314 &Igrave;
-Ì "
-'I 7,15 0 0315 &Iacute;
-Í "
-^I 7,15 0 0316 &Icirc;
-Î "
-:I 7,14 0 0317 &Iuml;
-Ï "
--D 12,11 0 0320 &ETH;
-Ð "
-~N 12,14 0 0321 &Ntilde;
-Ñ "
-`O 12,15 0 0322 &Ograve;
-Ò "
-'O 12,15 0 0323 &Oacute;
-Ó "
-^O 12,15 0 0324 &Ocirc;
-Ô "
-~O 12,14 0 0325 &Otilde;
-Õ "
-:O 12,14 0 0326 &Ouml;
-Ö "
-mu 8,8 0 0327 &times;
-× "
-/O 12,11 0 0330 &Oslash;
-Ø "
-`U 12,15 0 0331 &Ugrave;
-Ù "
-'U 12,15 0 0332 &Uacute;
-Ú "
-^U 12,15 0 0333 &Ucirc;
-Û "
-:U 12,14 0 0334 &Uuml;
-Ü "
-'Y 11,14 0 0335 &Yacute;
-Ý "
-TP 10,11 0 0336 &THORN;
-Þ "
-ss 9,11 0 0337 &szlig;
-ß "
-`a 9,11 0 0340 &agrave;
-à "
-'a 9,11 0 0341 &aacute;
-á "
-^a 9,11 0 0342 &acirc;
-â "
-~a 9,10 0 0343 &atilde;
-ã "
-:a 9,10 0 0344 &auml;
-ä "
-oa 9,11 0 0345 &aring;
-å "
-ae 14,7 0 0346 &aelig;
-æ "
-,c 8,7,3 0 0347 &ccedil;
-ç "
-`e 9,11 0 0350 &egrave;
-è "
-'e 9,11 0 0351 &eacute;
-é "
-^e 9,11 0 0352 &ecirc;
-ê "
-:e 9,10 0 0353 &euml;
-ë "
-`i 5,11 0 0354 &igrave;
-ì "
-'i 5,11 0 0355 &iacute;
-í "
-^i 5,11 0 0356 &icirc;
-î "
-:i 5,10 0 0357 &iuml;
-ï "
-Sd 9,11 0 0360 &eth;
-ð "
-~n 10,10 0 0361 &ntilde;
-ñ "
-`o 9,11 0 0362 &ograve;
-ò "
-'o 9,11 0 0363 &oacute;
-ó "
-^o 9,11 0 0364 &ocirc;
-ô "
-~o 9,10 0 0365 &otilde;
-õ "
-:o 9,10 0 0366 &ouml;
-ö "
-di 8,8 0 0367 &divide;
-÷ "
-/o 9,8,1 0 0370 &oslash;
-ø "
-`u 10,11 0 0371 &ugrave;
-ù "
-'u 10,11 0 0372 &uacute;
-ú "
-^u 10,11 0 0373 &ucirc;
-û "
-:u 10,10 0 0374 &uuml;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 10,11,3 0 0376 &thorn;
-þ "
-:y 7,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/NBI b/contrib/groff/devhtml/NBI
deleted file mode 100644
index 1837991..0000000
--- a/contrib/groff/devhtml/NBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NBI
-spacewidth 4
-charset
---- 4,1 0 040
-! 5,11 0 041
-" 6,11 0 042 &quot;
-dq "
-# 8,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 13,11,1 0 045
-& 13,11 0 046 &amp;
-' 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
-\- 8,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 &lt;
-= 9,7 0 075
-eq "
-> 9,9 0 076 &gt;
-? 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
-` 4,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
-or "
-ba "
-} 6,11,2 0 0175
-rC "
-~ 11,6 0 0176
-a~ "
-ap "
-ti "
-r! 5,8,3 0 0241 &iexcl;
-¡ "
-ct 8,8,1 0 0242 &cent;
-¢ "
-Po 10,11 0 0243 &pound;
-£ "
-Cs 8,9 0 0244 &curren;
-¤ "
-Ye 10,11 0 0245 &yen;
-¥ "
-bb 8,11 0 0246 &brvbar;
-¦ "
-sc 9,11,2 0 0247 &sect;
-§ "
-ad 6,10 0 0250 &uml;
-¨ "
-co 12,11 0 0251 &copy;
-© "
-Of 8,11 0 0252 &ordf;
-ª "
-Fo 10,7 0 0253 &laquo;
-« "
-no 9,7 0 0254 &not;
-¬ "
-- 5,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,11 0 0256 &reg;
-® "
-a- 6,9 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 8,8 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 10,7,3 0 0265 &micro;
-ps 9,11 0 0266 &para;
-¶ "
-pc 5,6 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 8,11 0 0272 &ordm;
-º "
-Fc 10,7 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 7,8,3 0 0277 &iquest;
-¿ "
-`A 11,15 0 0300 &Agrave;
-À "
-'A 11,15 0 0301 &Aacute;
-Á "
-^A 11,15 0 0302 &Acirc;
-Â "
-~A 11,14 0 0303 &Atilde;
-Ã "
-:A 11,14 0 0304 &Auml;
-Ä "
-oA 11,15 0 0305 &Aring;
-Å "
-AE 14,11 0 0306 &AElig;
-Æ "
-,C 11,11,3 0 0307 &Ccedil;
-Ç "
-`E 10,15 0 0310 &Egrave;
-È "
-'E 10,15 0 0311 &Eacute;
-É "
-^E 10,15 0 0312 &Ecirc;
-Ê "
-:E 10,14 0 0313 &Euml;
-Ë "
-`I 6,15 0 0314 &Igrave;
-Ì "
-'I 6,15 0 0315 &Iacute;
-Í "
-^I 6,15 0 0316 &Icirc;
-Î "
-:I 6,14 0 0317 &Iuml;
-Ï "
--D 12,11 0 0320 &ETH;
-Ð "
-~N 13,14 0 0321 &Ntilde;
-Ñ "
-`O 12,15 0 0322 &Ograve;
-Ò "
-'O 12,15 0 0323 &Oacute;
-Ó "
-^O 12,15 0 0324 &Ocirc;
-Ô "
-~O 12,14 0 0325 &Otilde;
-Õ "
-:O 12,14 0 0326 &Ouml;
-Ö "
-mu 8,8 0 0327 &times;
-× "
-/O 12,11 0 0330 &Oslash;
-Ø "
-`U 12,15 0 0331 &Ugrave;
-Ù "
-'U 12,15 0 0332 &Uacute;
-Ú "
-^U 12,15 0 0333 &Ucirc;
-Û "
-:U 12,14 0 0334 &Uuml;
-Ü "
-'Y 9,15 0 0335 &Yacute;
-Ý "
-TP 11,11 0 0336 &THORN;
-Þ "
-ss 10,11,3 0 0337 &szlig;
-ß "
-`a 10,11 0 0340 &agrave;
-à "
-'a 10,11 0 0341 &aacute;
-á "
-^a 10,11 0 0342 &acirc;
-â "
-~a 10,10 0 0343 &atilde;
-ã "
-:a 10,10 0 0344 &auml;
-ä "
-oa 10,11 0 0345 &aring;
-å "
-ae 13,7 0 0346 &aelig;
-æ "
-,c 8,7,3 0 0347 &ccedil;
-ç "
-`e 8,11 0 0350 &egrave;
-è "
-'e 8,11 0 0351 &eacute;
-é "
-^e 8,11 0 0352 &ecirc;
-ê "
-:e 8,10 0 0353 &euml;
-ë "
-`i 5,11 0 0354 &igrave;
-ì "
-'i 5,11 0 0355 &iacute;
-í "
-^i 5,11 0 0356 &icirc;
-î "
-:i 5,10 0 0357 &iuml;
-ï "
-Sd 8,11 0 0360 &eth;
-ð "
-~n 10,10 0 0361 &ntilde;
-ñ "
-`o 8,11 0 0362 &ograve;
-ò "
-'o 8,11 0 0363 &oacute;
-ó "
-^o 8,11 0 0364 &ocirc;
-ô "
-~o 8,10 0 0365 &otilde;
-õ "
-:o 8,10 0 0366 &ouml;
-ö "
-di 8,8 0 0367 &divide;
-÷ "
-/o 8,7 0 0370 &oslash;
-ø "
-`u 10,11 0 0371 &ugrave;
-ù "
-'u 10,11 0 0372 &uacute;
-ú "
-^u 10,11 0 0373 &ucirc;
-û "
-:u 10,10 0 0374 &uuml;
-ü "
-'y 9,11,3 0 0375 &yacute;
-ý "
-Tp 8,11,3 0 0376 &thorn;
-þ "
-:y 9,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/NI b/contrib/groff/devhtml/NI
deleted file mode 100644
index 24e824e..0000000
--- a/contrib/groff/devhtml/NI
+++ /dev/null
@@ -1,308 +0,0 @@
-name NI
-spacewidth 4
-charset
---- 4,1 0 040
-! 5,11 0 041
-" 6,11 0 042 &quot;
-dq "
-# 11,10 0 043
-sh "
-$ 8,12,1 0 044
-Do "
-% 12,11,1 0 045
-& 11,11 0 046 &amp;
-' 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
-\- 9,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 &lt;
-= 8,6 0 075
-eq "
-> 9,8 0 076 &gt;
-? 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
-or "
-ba "
-} 6,11,2 0 0175
-rC "
-~ 9,6 0 0176
-a~ "
-ap "
-ti "
-r! 4,8,3 0 0241 &iexcl;
-¡ "
-ct 8,9,2 0 0242 &cent;
-¢ "
-Po 9,11 0 0243 &pound;
-£ "
-Cs 8,9 0 0244 &curren;
-¤ "
-Ye 9,11 0 0245 &yen;
-¥ "
-bb 8,11 0 0246 &brvbar;
-¦ "
-sc 7,11,2 0 0247 &sect;
-§ "
-ad 7,10 0 0250 &uml;
-¨ "
-co 13,11 0 0251 &copy;
-© "
-Of 6,11 0 0252 &ordf;
-ª "
-Fo 8,7 0 0253 &laquo;
-« "
-no 8,6 0 0254 &not;
-¬ "
-- 5,5 0 055 &shy;
-hy " &shy;
-­ "
-rg 13,11 0 0256 &reg;
-® "
-a- 6,9 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 8,8 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 4,11 0 0264 &acute;
-´ "
-µ 9,7,3 0 0265 &micro;
-ps 9,11 0 0266 &para;
-¶ "
-pc 5,6 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 6,11 0 0272 &ordm;
-º "
-Fc 8,7 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 6,8,3 0 0277 &iquest;
-¿ "
-`A 11,14 0 0300 &Agrave;
-À "
-'A 11,14 0 0301 &Aacute;
-Á "
-^A 11,14 0 0302 &Acirc;
-Â "
-~A 11,14 0 0303 &Atilde;
-Ã "
-:A 11,14 0 0304 &Auml;
-Ä "
-oA 11,14 0 0305 &Aring;
-Å "
-AE 14,11 0 0306 &AElig;
-Æ "
-,C 10,11,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,14 0 0313 &Euml;
-Ë "
-`I 7,14 0 0314 &Igrave;
-Ì "
-'I 7,14 0 0315 &Iacute;
-Í "
-^I 7,14 0 0316 &Icirc;
-Î "
-:I 7,14 0 0317 &Iuml;
-Ï "
--D 11,11 0 0320 &ETH;
-Ð "
-~N 12,14 0 0321 &Ntilde;
-Ñ "
-`O 10,14 0 0322 &Ograve;
-Ò "
-'O 10,14 0 0323 &Oacute;
-Ó "
-^O 10,14 0 0324 &Ocirc;
-Ô "
-~O 10,14 0 0325 &Otilde;
-Õ "
-:O 10,14 0 0326 &Ouml;
-Ö "
-mu 8,8 0 0327 &times;
-× "
-/O 10,11 0 0330 &Oslash;
-Ø "
-`U 12,14 0 0331 &Ugrave;
-Ù "
-'U 12,14 0 0332 &Uacute;
-Ú "
-^U 12,14 0 0333 &Ucirc;
-Û "
-:U 12,14 0 0334 &Uuml;
-Ü "
-'Y 9,14 0 0335 &Yacute;
-Ý "
-TP 10,11 0 0336 &THORN;
-Þ "
-ss 8,11,3 0 0337 &szlig;
-ß "
-`a 9,11 0 0340 &agrave;
-à "
-'a 9,11 0 0341 &aacute;
-á "
-^a 9,11 0 0342 &acirc;
-â "
-~a 9,10 0 0343 &atilde;
-ã "
-:a 9,10 0 0344 &auml;
-ä "
-oa 9,11 0 0345 &aring;
-å "
-ae 10,7 0 0346 &aelig;
-æ "
-,c 6,7,3 0 0347 &ccedil;
-ç "
-`e 6,11 0 0350 &egrave;
-è "
-'e 6,11 0 0351 &eacute;
-é "
-^e 6,11 0 0352 &ecirc;
-ê "
-:e 6,10 0 0353 &euml;
-ë "
-`i 4,11 0 0354 &igrave;
-ì "
-'i 4,11 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,10 0 0357 &iuml;
-ï "
-Sd 7,11 0 0360 &eth;
-ð "
-~n 9,10 0 0361 &ntilde;
-ñ "
-`o 7,11 0 0362 &ograve;
-ò "
-'o 7,11 0 0363 &oacute;
-ó "
-^o 7,11 0 0364 &ocirc;
-ô "
-~o 7,10 0 0365 &otilde;
-õ "
-:o 7,10 0 0366 &ouml;
-ö "
-di 8,8 0 0367 &divide;
-÷ "
-/o 7,8,1 0 0370 &oslash;
-ø "
-`u 9,11 0 0371 &ugrave;
-ù "
-'u 9,11 0 0372 &uacute;
-ú "
-^u 9,11 0 0373 &ucirc;
-û "
-:u 9,10 0 0374 &uuml;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 7,11,3 0 0376 &thorn;
-þ "
-:y 7,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/NR b/contrib/groff/devhtml/NR
deleted file mode 100644
index 92204a3..0000000
--- a/contrib/groff/devhtml/NR
+++ /dev/null
@@ -1,308 +0,0 @@
-name NR
-spacewidth 4
-charset
---- 4,1 0 040
-! 3,11 0 041
-" 5,11 0 042 &quot;
-dq "
-# 8,11 0 043
-sh "
-$ 8,12,2 0 044
-Do "
-% 12,11 0 045
-& 13,11 0 046 &amp;
-' 4,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
-\- 9,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 &lt;
-= 9,6 0 075
-eq "
-> 10,7 0 076 &gt;
-? 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
-` 4,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
-or "
-ba "
-} 5,11,2 0 0175
-rC "
-~ 9,5 0 0176
-a~ "
-ap "
-ti "
-r! 4,8,3 0 0241 &iexcl;
-¡ "
-ct 8,9,2 0 0242 &cent;
-¢ "
-Po 8,11 0 0243 &pound;
-£ "
-Cs 8,9 0 0244 &curren;
-¤ "
-Ye 8,11 0 0245 &yen;
-¥ "
-bb 9,11 0 0246 &brvbar;
-¦ "
-sc 7,11,2 0 0247 &sect;
-§ "
-ad 6,10 0 0250 &uml;
-¨ "
-co 14,11 0 0251 &copy;
-© "
-Of 6,11 0 0252 &ordf;
-ª "
-Fo 7,6 0 0253 &laquo;
-« "
-no 9,5 0 0254 &not;
-¬ "
-- 5,4 0 055 &shy;
-hy " &shy;
-­ "
-rg 14,11 0 0256 &reg;
-® "
-a- 5,9 0 0257 &macr;
-¯ "
-de 6,11 0 0260 &deg;
-° "
-+- 9,7 0 0261 &plusmn;
-± "
-S2 5,11 0 0262 &sup2;
-² "
-S3 5,11 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 9,7,3 0 0265 &micro;
-ps 9,11,2 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 5,1,3 0 0270 &cedil;
-¸ "
-S1 5,11 0 0271 &sup1;
-¹ "
-Om 5,11 0 0272 &ordm;
-º "
-Fc 7,6 0 0273 &raquo;
-» "
-14 12,11 0 0274 &frac14;
-¼ "
-12 12,11 0 0275 &frac12;
-½ "
-34 12,11 0 0276 &frac34;
-¾ "
-r? 6,8,3 0 0277 &iquest;
-¿ "
-`A 10,14 0 0300 &Agrave;
-À "
-'A 10,14 0 0301 &Aacute;
-Á "
-^A 10,14 0 0302 &Acirc;
-Â "
-~A 10,14 0 0303 &Atilde;
-Ã "
-:A 10,13 0 0304 &Auml;
-Ä "
-oA 10,14 0 0305 &Aring;
-Å "
-AE 15,11 0 0306 &AElig;
-Æ "
-,C 11,11,3 0 0307 &Ccedil;
-Ç "
-`E 10,14 0 0310 &Egrave;
-È "
-'E 10,14 0 0311 &Eacute;
-É "
-^E 10,14 0 0312 &Ecirc;
-Ê "
-:E 10,14 0 0313 &Euml;
-Ë "
-`I 6,14 0 0314 &Igrave;
-Ì "
-'I 6,14 0 0315 &Iacute;
-Í "
-^I 6,14 0 0316 &Icirc;
-Î "
-:I 6,14 0 0317 &Iuml;
-Ï "
--D 11,11 0 0320 &ETH;
-Ð "
-~N 13,14 0 0321 &Ntilde;
-Ñ "
-`O 11,14 0 0322 &Ograve;
-Ò "
-'O 11,14 0 0323 &Oacute;
-Ó "
-^O 11,14 0 0324 &Ocirc;
-Ô "
-~O 11,14 0 0325 &Otilde;
-Õ "
-:O 11,14 0 0326 &Ouml;
-Ö "
-mu 9,7 0 0327 &times;
-× "
-/O 11,11 0 0330 &Oslash;
-Ø "
-`U 13,14 0 0331 &Ugrave;
-Ù "
-'U 13,14 0 0332 &Uacute;
-Ú "
-^U 13,14 0 0333 &Ucirc;
-Û "
-:U 13,14 0 0334 &Uuml;
-Ü "
-'Y 10,14 0 0335 &Yacute;
-Ý "
-TP 10,11 0 0336 &THORN;
-Þ "
-ss 8,11 0 0337 &szlig;
-ß "
-`a 8,11 0 0340 &agrave;
-à "
-'a 8,11 0 0341 &aacute;
-á "
-^a 8,11 0 0342 &acirc;
-â "
-~a 8,10 0 0343 &atilde;
-ã "
-:a 8,10 0 0344 &auml;
-ä "
-oa 8,11 0 0345 &aring;
-å "
-ae 12,7 0 0346 &aelig;
-æ "
-,c 7,7,3 0 0347 &ccedil;
-ç "
-`e 7,11 0 0350 &egrave;
-è "
-'e 7,11 0 0351 &eacute;
-é "
-^e 7,11 0 0352 &ecirc;
-ê "
-:e 7,10 0 0353 &euml;
-ë "
-`i 4,11 0 0354 &igrave;
-ì "
-'i 4,11 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,10 0 0357 &iuml;
-ï "
-Sd 7,11 0 0360 &eth;
-ð "
-~n 9,10 0 0361 &ntilde;
-ñ "
-`o 7,11 0 0362 &ograve;
-ò "
-'o 7,11 0 0363 &oacute;
-ó "
-^o 7,11 0 0364 &ocirc;
-ô "
-~o 7,10 0 0365 &otilde;
-õ "
-:o 7,10 0 0366 &ouml;
-ö "
-di 9,7 0 0367 &divide;
-÷ "
-/o 7,8,1 0 0370 &oslash;
-ø "
-`u 9,11 0 0371 &ugrave;
-ù "
-'u 9,11 0 0372 &uacute;
-ú "
-^u 9,11 0 0373 &ucirc;
-û "
-:u 9,10 0 0374 &uuml;
-ü "
-'y 8,11,3 0 0375 &yacute;
-ý "
-Tp 8,11,3 0 0376 &thorn;
-þ "
-:y 8,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/S b/contrib/groff/devhtml/S
deleted file mode 100644
index 59af889..0000000
--- a/contrib/groff/devhtml/S
+++ /dev/null
@@ -1,226 +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
-or "
-| "
-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
---- 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
-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 "
-bv "
---- 12,12 0 0360
-ra 5,12,3 0 0361
-is 4,12,1 0 0362
---- 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/devhtml/TB b/contrib/groff/devhtml/TB
deleted file mode 100644
index 1ca1be4..0000000
--- a/contrib/groff/devhtml/TB
+++ /dev/null
@@ -1,308 +0,0 @@
-name TB
-spacewidth 3
-charset
---- 3,1 0 040
-! 4,10 0 041
-" 7,10 0 042 &quot;
-dq "
-# 7,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 14,10 0 045
-& 12,10 0 046 &amp;
-' 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
-\- 9,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 &lt;
-= 8,5 0 075
-eq "
-> 8,7 0 076 &gt;
-? 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
-` 4,10 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
-or "
-ba "
-} 7,10,3 0 0175
-rC "
-~ 8,7 0 0176
-a~ "
-ap "
-ti "
-r! 4,7,3 0 0241 &iexcl;
-¡ "
-ct 7,9,2 0 0242 &cent;
-¢ "
-Po 8,10 0 0243 &pound;
-£ "
-Cs 8,8 0 0244 &curren;
-¤ "
-Ye 8,10 0 0245 &yen;
-¥ "
-bb 3,10,2 0 0246 &brvbar;
-¦ "
-sc 7,10,2 0 0247 &sect;
-§ "
-ad 5,10 0 0250 &uml;
-¨ "
-co 12,10 0 0251 &copy;
-© "
-Of 5,10 0 0252 &ordf;
-ª "
-Fo 9,6 0 0253 &laquo;
-« "
-no 9,5 0 0254 &not;
-¬ "
-- 4,4 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,10 0 0256 &reg;
-® "
-a- 5,9 0 0257 &macr;
-¯ "
-de 6,10 0 0260 &deg;
-° "
-+- 8,9 0 0261 &plusmn;
-± "
-S2 4,10 0 0262 &sup2;
-² "
-S3 4,10 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 7,7,3 0 0265 &micro;
-ps 8,10,3 0 0266 &para;
-¶ "
-pc 4,6 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 4,10 0 0271 &sup1;
-¹ "
-Om 5,10 0 0272 &ordm;
-º "
-Fc 9,6 0 0273 &raquo;
-» "
-14 10,10 0 0274 &frac14;
-¼ "
-12 10,10 0 0275 &frac12;
-½ "
-34 10,10 0 0276 &frac34;
-¾ "
-r? 7,7,3 0 0277 &iquest;
-¿ "
-`A 10,14 0 0300 &Agrave;
-À "
-'A 10,14 0 0301 &Aacute;
-Á "
-^A 10,14 0 0302 &Acirc;
-Â "
-~A 10,13 0 0303 &Atilde;
-Ã "
-:A 10,13 0 0304 &Auml;
-Ä "
-oA 10,14 0 0305 &Aring;
-Å "
-AE 14,10 0 0306 &AElig;
-Æ "
-,C 10,10,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,13 0 0313 &Euml;
-Ë "
-`I 5,14 0 0314 &Igrave;
-Ì "
-'I 5,14 0 0315 &Iacute;
-Í "
-^I 5,14 0 0316 &Icirc;
-Î "
-:I 5,13 0 0317 &Iuml;
-Ï "
--D 11,10 0 0320 &ETH;
-Ð "
-~N 10,13 0 0321 &Ntilde;
-Ñ "
-`O 11,14 0 0322 &Ograve;
-Ò "
-'O 11,14 0 0323 &Oacute;
-Ó "
-^O 11,14 0 0324 &Ocirc;
-Ô "
-~O 11,13 0 0325 &Otilde;
-Õ "
-:O 11,13 0 0326 &Ouml;
-Ö "
-mu 8,7 0 0327 &times;
-× "
-/O 11,11,1 0 0330 &Oslash;
-Ø "
-`U 10,14 0 0331 &Ugrave;
-Ù "
-'U 10,14 0 0332 &Uacute;
-Ú "
-^U 10,14 0 0333 &Ucirc;
-Û "
-:U 10,13 0 0334 &Uuml;
-Ü "
-'Y 10,14 0 0335 &Yacute;
-Ý "
-TP 9,10 0 0336 &THORN;
-Þ "
-ss 8,10 0 0337 &szlig;
-ß "
-`a 7,11 0 0340 &agrave;
-à "
-'a 7,11 0 0341 &aacute;
-á "
-^a 7,11 0 0342 &acirc;
-â "
-~a 7,10 0 0343 &atilde;
-ã "
-:a 7,10 0 0344 &auml;
-ä "
-oa 7,11 0 0345 &aring;
-å "
-ae 11,7 0 0346 &aelig;
-æ "
-,c 7,7,3 0 0347 &ccedil;
-ç "
-`e 7,11 0 0350 &egrave;
-è "
-'e 7,11 0 0351 &eacute;
-é "
-^e 7,11 0 0352 &ecirc;
-ê "
-:e 7,10 0 0353 &euml;
-ë "
-`i 4,11 0 0354 &igrave;
-ì "
-'i 4,11 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,10 0 0357 &iuml;
-ï "
-Sd 7,10 0 0360 &eth;
-ð "
-~n 8,10 0 0361 &ntilde;
-ñ "
-`o 7,11 0 0362 &ograve;
-ò "
-'o 7,11 0 0363 &oacute;
-ó "
-^o 7,11 0 0364 &ocirc;
-ô "
-~o 7,10 0 0365 &otilde;
-õ "
-:o 7,10 0 0366 &ouml;
-ö "
-di 8,7 0 0367 &divide;
-÷ "
-/o 7,8,1 0 0370 &oslash;
-ø "
-`u 7,11 0 0371 &ugrave;
-ù "
-'u 7,11 0 0372 &uacute;
-ú "
-^u 7,11 0 0373 &ucirc;
-û "
-:u 7,10 0 0374 &uulm;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 8,10,3 0 0376 &thorn;
-þ "
-:y 7,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/TBI b/contrib/groff/devhtml/TBI
deleted file mode 100644
index cebecca..0000000
--- a/contrib/groff/devhtml/TBI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TBI
-spacewidth 3
-charset
---- 3,1 0 040
-! 7,10 0 041
-" 7,10 0 042 &quot;
-dq "
-# 8,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 14,10 0 045
-& 10,10 0 046 &amp;
-' 5,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
-\- 9,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 &lt;
-= 10,5 0 075
-eq "
-> 8,6 0 076 &gt;
-? 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
-` 5,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
-or "
-ba "
-} 7,10,3 0 0175
-rC "
-~ 10,5 0 0176
-a~ "
-ap "
-ti "
-r! 7,7,3 0 0241 &iexcl;
-¡ "
-ct 7,8,1 0 0242 &cent;
-¢ "
-Po 7,10 0 0243 &pound;
-£ "
-Cs 8,8 0 0244 &curren;
-¤ "
-Ye 7,10 0 0245 &yen;
-¥ "
-bb 4,10 0 0246 &brvbar;
-¦ "
-sc 8,10,3 0 0247 &sect;
-§ "
-ad 6,9 0 0250 &uml;
-¨ "
-co 12,10 0 0251 &copy;
-© "
-Of 6,10 0 0252 &ordf;
-ª "
-Fo 8,6 0 0253 &laquo;
-« "
-no 9,5 0 0254 &not;
-¬ "
-- 5,4 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,10 0 0256 &reg;
-® "
-a- 6,9 0 0257 &macr;
-¯ "
-de 6,10 0 0260 &deg;
-° "
-+- 9,9 0 0261 &plusmn;
-± "
-S2 4,10 0 0262 &sup2;
-² "
-S3 4,10 0 0263 &sup3;
-³ "
-aa 6,10 0 0264 &acute;
-´ "
-µ 7,7,3 0 0265 &micro;
-ps 8,10,3 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 4,10 0 0271 &sup1;
-¹ "
-Om 6,10 0 0272 &ordm;
-º "
-Fc 8,6 0 0273 &raquo;
-» "
-14 10,10 0 0274 &frac14;
-¼ "
-12 10,10 0 0275 &frac12;
-½ "
-34 10,10 0 0276 &frac34;
-¾ "
-r? 8,7,3 0 0277 &iquest;
-¿ "
-`A 9,13 0 0300 &Agrave;
-À "
-'A 9,13 0 0301 &Aacute;
-Á "
-^A 9,13 0 0302 &Acirc;
-Â "
-~A 9,13 0 0303 &Atilde;
-Ã "
-:A 9,13 0 0304 &Auml;
-Ä "
-oA 9,13 0 0305 &Aring;
-Å "
-AE 14,10 0 0306 &AElig;
-Æ "
-,C 9,10,3 0 0307 &Ccedil;
-Ç "
-`E 10,13 0 0310 &Egrave;
-È "
-'E 10,13 0 0311 &Eacute;
-É "
-^E 10,13 0 0312 &Ecirc;
-Ê "
-:E 10,13 0 0313 &Euml;
-Ë "
-`I 5,13 0 0314 &Igrave;
-Ì "
-'I 5,13 0 0315 &Iacute;
-Í "
-^I 5,13 0 0316 &Icirc;
-Î "
-:I 5,13 0 0317 &Iuml;
-Ï "
--D 10,10 0 0320 &ETH;
-Ð "
-~N 11,13 0 0321 &Ntilde;
-Ñ "
-`O 10,13 0 0322 &Ograve;
-Ò "
-'O 10,13 0 0323 &Oacute;
-Ó "
-^O 10,13 0 0324 &Ocirc;
-Ô "
-~O 10,13 0 0325 &Otilde;
-Õ "
-:O 10,13 0 0326 &Ouml;
-Ö "
-mu 9,7 0 0327 &times;
-× "
-/O 10,11,1 0 0330 &Oslash;
-Ø "
-`U 10,13 0 0331 &Ugrave;
-Ù "
-'U 10,13 0 0332 &Uacute;
-Ú "
-^U 10,13 0 0333 &Ucirc;
-Û "
-:U 10,13 0 0334 &Uuml;
-Ü "
-'Y 8,13 0 0335 &Yacute;
-Ý "
-TP 9,10 0 0336 &THORN;
-Þ "
-ss 7,10,3 0 0337 &szlig;
-ß "
-`a 8,10 0 0340 &agrave;
-à "
-'a 8,10 0 0341 &aacute;
-á "
-^a 8,11 0 0342 &acirc;
-â "
-~a 8,10 0 0343 &atilde;
-ã "
-:a 8,10 0 0344 &auml;
-ä "
-oa 8,11 0 0345 &aring;
-å "
-ae 11,7 0 0346 &aelig;
-æ "
-,c 6,7,3 0 0347 &ccedil;
-ç "
-`e 7,10 0 0350 &egrave;
-è "
-'e 7,10 0 0351 &eacute;
-é "
-^e 7,11 0 0352 &ecirc;
-ê "
-:e 7,10 0 0353 &euml;
-ë "
-`i 4,10 0 0354 &igrave;
-ì "
-'i 4,10 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,10 0 0357 &iuml;
-ï "
-Sd 7,10 0 0360 &eth;
-ð "
-~n 8,10 0 0361 &ntilde;
-ñ "
-`o 7,10 0 0362 &ograve;
-ò "
-'o 7,10 0 0363 &oacute;
-ó "
-^o 7,11 0 0364 &ocirc;
-ô "
-~o 7,10 0 0365 &otilde;
-õ "
-:o 7,10 0 0366 &ouml;
-ö "
-di 9,7 0 0367 &divide;
-÷ "
-/o 7,8,1 0 0370 &oslash;
-ø "
-`u 7,10 0 0371 &ugrave;
-ù "
-'u 7,10 0 0372 &uacute;
-ú "
-^u 7,11 0 0373 &ucirc;
-û "
-:u 7,10 0 0374 &uulm;
-ü "
-'y 6,10,2 0 0375 &yacute;
-ý "
-Tp 7,10,3 0 0376 &thorn;
-þ "
-:y 6,10,2 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/TI b/contrib/groff/devhtml/TI
deleted file mode 100644
index a3f943b..0000000
--- a/contrib/groff/devhtml/TI
+++ /dev/null
@@ -1,308 +0,0 @@
-name TI
-spacewidth 3
-charset
---- 3,1 0 040
-! 5,10 0 041
-" 6,10 0 042 &quot;
-dq "
-# 7,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 12,10 0 045
-& 11,10 0 046 &amp;
-' 5,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
-\- 9,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 &lt;
-= 10,5 0 075
-eq "
-> 10,7,1 0 076 &gt;
-? 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
-or "
-ba "
-} 6,10,3 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ap "
-ti "
-r! 6,7,3 0 0241 &iexcl;
-¡ "
-ct 7,9,2 0 0242 &cent;
-¢ "
-Po 7,10 0 0243 &pound;
-£ "
-Cs 7,8 0 0244 &curren;
-¤ "
-Ye 7,10 0 0245 &yen;
-¥ "
-bb 4,10,3 0 0246 &brvbar;
-¦ "
-sc 7,11,2 0 0247 &sect;
-§ "
-ad 5,10 0 0250 &uml;
-¨ "
-co 12,10 0 0251 &copy;
-© "
-Of 5,10 0 0252 &ordf;
-ª "
-Fo 7,6 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 5,4 0 055 &shy;
-hy " &shy;
-­ "
-rg 12,10 0 0256 &reg;
-® "
-a- 5,10 0 0257 &macr;
-¯ "
-de 6,10 0 0260 &deg;
-° "
-+- 10,9 0 0261 &plusmn;
-± "
-S2 4,10 0 0262 &sup2;
-² "
-S3 4,10 0 0263 &sup3;
-³ "
-aa 4,10 0 0264 &acute;
-´ "
-µ 7,7,3 0 0265 &micro;
-ps 8,10,3 0 0266 &para;
-¶ "
-pc 4,4 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 4,10 0 0271 &sup1;
-¹ "
-Om 5,10 0 0272 &ordm;
-º "
-Fc 7,6 0 0273 &raquo;
-» "
-14 10,10 0 0274 &frac14;
-¼ "
-12 10,10 0 0275 &frac12;
-½ "
-34 10,10 0 0276 &frac34;
-¾ "
-r? 7,7,3 0 0277 &iquest;
-¿ "
-`A 9,13 0 0300 &Agrave;
-À "
-'A 9,13 0 0301 &Aacute;
-Á "
-^A 9,13 0 0302 &Acirc;
-Â "
-~A 9,13 0 0303 &Atilde;
-Ã "
-:A 9,12 0 0304 &Auml;
-Ä "
-oA 9,13 0 0305 &Aring;
-Å "
-AE 13,10 0 0306 &AElig;
-Æ "
-,C 9,10,3 0 0307 &Ccedil;
-Ç "
-`E 9,13 0 0310 &Egrave;
-È "
-'E 9,13 0 0311 &Eacute;
-É "
-^E 9,13 0 0312 &Ecirc;
-Ê "
-:E 9,12 0 0313 &Euml;
-Ë "
-`I 5,13 0 0314 &Igrave;
-Ì "
-'I 5,13 0 0315 &Iacute;
-Í "
-^I 5,13 0 0316 &Icirc;
-Î "
-:I 5,12 0 0317 &Iuml;
-Ï "
--D 10,10 0 0320 &ETH;
-Ð "
-~N 11,13 0 0321 &Ntilde;
-Ñ "
-`O 10,13 0 0322 &Ograve;
-Ò "
-'O 10,13 0 0323 &Oacute;
-Ó "
-^O 10,13 0 0324 &Ocirc;
-Ô "
-~O 10,13 0 0325 &Otilde;
-Õ "
-:O 10,12 0 0326 &Ouml;
-Ö "
-mu 10,7 0 0327 &times;
-× "
-/O 10,11,1 0 0330 &Oslash;
-Ø "
-`U 10,13 0 0331 &Ugrave;
-Ù "
-'U 10,13 0 0332 &Uacute;
-Ú "
-^U 10,13 0 0333 &Ucirc;
-Û "
-:U 10,12 0 0334 &Uuml;
-Ü "
-'Y 8,13 0 0335 &Yacute;
-Ý "
-TP 9,10 0 0336 &THORN;
-Þ "
-ss 7,10,3 0 0337 &szlig;
-ß "
-`a 7,10 0 0340 &agrave;
-à "
-'a 7,10 0 0341 &aacute;
-á "
-^a 7,11 0 0342 &acirc;
-â "
-~a 7,10 0 0343 &atilde;
-ã "
-:a 7,9 0 0344 &auml;
-ä "
-oa 7,10 0 0345 &aring;
-å "
-ae 10,7 0 0346 &aelig;
-æ "
-,c 6,7,3 0 0347 &ccedil;
-ç "
-`e 7,10 0 0350 &egrave;
-è "
-'e 7,10 0 0351 &eacute;
-é "
-^e 7,11 0 0352 &ecirc;
-ê "
-:e 7,9 0 0353 &euml;
-ë "
-`i 4,10 0 0354 &igrave;
-ì "
-'i 4,10 0 0355 &iacute;
-í "
-^i 4,11 0 0356 &icirc;
-î "
-:i 4,9 0 0357 &iuml;
-ï "
-Sd 7,10 0 0360 &eth;
-ð "
-~n 7,10 0 0361 &ntilde;
-ñ "
-`o 7,10 0 0362 &ograve;
-ò "
-'o 7,10 0 0363 &oacute;
-ó "
-^o 7,11 0 0364 &ocirc;
-ô "
-~o 7,10 0 0365 &otilde;
-õ "
-:o 7,9 0 0366 &ouml;
-ö "
-di 10,7 0 0367 &divide;
-÷ "
-/o 7,8,1 0 0370 &oslash;
-ø "
-`u 7,10 0 0371 &ugrave;
-ù "
-'u 7,10 0 0372 &uacute;
-ú "
-^u 7,11 0 0373 &ucirc;
-û "
-:u 7,9 0 0374 &uulm;
-ü "
-'y 7,10,3 0 0375 &yacute;
-ý "
-Tp 7,10,3 0 0376 &thorn;
-þ "
-:y 7,9,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devhtml/TR b/contrib/groff/devhtml/TR
deleted file mode 100644
index fadd71f..0000000
--- a/contrib/groff/devhtml/TR
+++ /dev/null
@@ -1,308 +0,0 @@
-name TR
-spacewidth 3
-charset
---- 3,1 0 040
-! 5,10 0 041
-" 6,10 0 042 &quot;
-dq "
-# 7,10 0 043
-sh "
-$ 7,11,1 0 044
-Do "
-% 12,10 0 045
-& 11,10 0 046 &amp;
-' 4,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
-\- 9,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 &lt;
-= 8,5 0 075
-eq "
-> 8,7 0 076 &gt;
-? 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
-` 4,10 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
-or "
-ba "
-} 7,10,3 0 0175
-rC "
-~ 8,5 0 0176
-a~ "
-ap "
-ti "
-r! 5,7,3 0 0241 &iexcl;
-¡ "
-ct 7,8,1 0 0242 &cent;
-¢ "
-Po 8,10 0 0243 &pound;
-£ "
-Cs 7,8 0 0244 &curren;
-¤ "
-Ye 7,10 0 0245 &yen;
-¥ "
-bb 3,10 0 0246 &brvbar;
-¦ "
-sc 7,10,3 0 0247 &sect;
-§ "
-ad 5,10 0 0250 &uml;
-¨ "
-co 12,10 0 0251 &copy;
-© "
-Of 4,10 0 0252 &ordf;
-ª "
-Fo 7,6 0 0253 &laquo;
-« "
-no 9,6 0 0254 &not;
-¬ "
-- 4,4 0 0255 &shy;
-hy 4,4 0 0255 &shy;
-­ "
-rg 12,10 0 0256 &reg;
-® "
-a- 4,9 0 0257 &macr;
-¯ "
-de 6,10 0 0260 &deg;
-° "
-+- 8,7 0 0261 &plusmn;
-± "
-S2 4,10 0 0262 &sup2;
-² "
-S3 4,10 0 0263 &sup3;
-³ "
-aa 5,11 0 0264 &acute;
-´ "
-µ 7,7,3 0 0265 &micro;
-ps 7,10,3 0 0266 &para;
-¶ "
-pc 4,5 0 0267 &middot;
-· "
-ac 5,0,3 0 0270 &cedil;
-¸ "
-S1 4,10 0 0271 &sup1;
-¹ "
-Om 5,10 0 0272 &ordm;
-º "
-Fc 7,6 0 0273 &raquo;
-» "
-14 10,10 0 0274 &frac14;
-¼ "
-12 10,10 0 0275 &frac12;
-½ "
-34 10,10 0 0276 &frac34;
-¾ "
-r? 6,7,3 0 0277 &iquest;
-¿ "
-`A 11,14 0 0300 &Agrave;
-À "
-'A 11,14 0 0301 &Aacute;
-Á "
-^A 11,14 0 0302 &Acirc;
-Â "
-~A 11,14 0 0303 &Atilde;
-Ã "
-:A 11,13 0 0304 &Auml;
-Ä "
-oA 11,14 0 0305 &Aring;
-Å "
-AE 13,10 0 0306 &AElig;
-Æ "
-,C 10,10,3 0 0307 &Ccedil;
-Ç "
-`E 9,14 0 0310 &Egrave;
-È "
-'E 9,14 0 0311 &Eacute;
-É "
-^E 9,14 0 0312 &Ecirc;
-Ê "
-:E 9,13 0 0313 &Euml;
-Ë "
-`I 5,14 0 0314 &Igrave;
-Ì "
-'I 5,14 0 0315 &Iacute;
-Í "
-^I 5,14 0 0316 &Icirc;
-Î "
-:I 5,13 0 0317 &Iuml;
-Ï "
--D 10,10 0 0320 &ETH;
-Ð "
-~N 11,14 0 0321 &Ntilde;
-Ñ "
-`O 10,14 0 0322 &Ograve;
-Ò "
-'O 10,14 0 0323 &Oacute;
-Ó "
-^O 10,14 0 0324 &Ocirc;
-Ô "
-~O 10,14 0 0325 &Otilde;
-Õ "
-:O 10,13 0 0326 &Ouml;
-Ö "
-mu 8,7 0 0327 &times;
-× "
-/O 10,11,1 0 0330 &Oslash;
-Ø "
-`U 10,14 0 0331 &Ugrave;
-Ù "
-'U 10,14 0 0332 &Uacute;
-Ú "
-^U 10,14 0 0333 &Ucirc;
-Û "
-:U 10,13 0 0334 &Uuml;
-Ü "
-'Y 9,14 0 0335 &Yacute;
-Ý "
-TP 8,10 0 0336 &THORN;
-Þ "
-ss 7,10 0 0337 &szlig;
-ß "
-`a 7,11 0 0340 &agrave;
-à "
-'a 7,11 0 0341 &aacute;
-á "
-^a 7,11 0 0342 &acirc;
-â "
-~a 7,11 0 0343 &atilde;
-ã "
-:a 7,10 0 0344 &auml;
-ä "
-oa 7,11 0 0345 &aring;
-å "
-ae 11,7 0 0346 &aelig;
-æ "
-,c 7,7,3 0 0347 &ccedil;
-ç "
-`e 7,11 0 0350 &egrave;
-è "
-'e 7,11 0 0351 &eacute;
-é "
-^e 7,11 0 0352 &ecirc;
-ê "
-:e 7,10 0 0353 &euml;
-ë "
-`i 3,11 0 0354 &igrave;
-ì "
-'i 3,11 0 0355 &iacute;
-í "
-^i 3,11 0 0356 &icirc;
-î "
-:i 3,10 0 0357 &iuml;
-ï "
-Sd 7,10 0 0360 &eth;
-ð "
-~n 7,11 0 0361 &ntilde;
-ñ "
-`o 7,11 0 0362 &ograve;
-ò "
-'o 7,11 0 0363 &oacute;
-ó "
-^o 7,11 0 0364 &ocirc;
-ô "
-~o 7,11 0 0365 &otilde;
-õ "
-:o 7,10 0 0366 &ouml;
-ö "
-di 8,7 0 0367 &divide;
-÷ "
-/o 7,8,1 0 0370 &oslash;
-ø "
-`u 7,11 0 0371 &ugrave;
-ù "
-'u 7,11 0 0372 &uacute;
-ú "
-^u 7,11 0 0373 &ucirc;
-û "
-:u 7,10 0 0374 &uuml;
-ü "
-'y 7,11,3 0 0375 &yacute;
-ý "
-Tp 7,10,3 0 0376 &thorn;
-þ "
-:y 7,10,3 0 0377 &yuml;
-ÿ "
diff --git a/contrib/groff/devlatin1/Makefile.sub b/contrib/groff/devlatin1/Makefile.sub
deleted file mode 100644
index 25de3f7..0000000
--- a/contrib/groff/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/devlatin1/R.proto b/contrib/groff/devlatin1/R.proto
deleted file mode 100644
index a527a9f..0000000
--- a/contrib/groff/devlatin1/R.proto
+++ /dev/null
@@ -1,357 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
-! 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
-.i "
-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 "
-| "
-lb "
-lc "
-lf "
-lk "
-lt "
-rb "
-rc "
-rf "
-rk "
-rt "
-rC 24 0 0175
-} "
-a~ 24 0 0176
-~ "
-ap "
-ti "
-r! 24 0 0241
-char161 "
-ct 24 0 0242
-char162 "
-Po 24 0 0243
-char163 "
-Cs 24 0 0244
-char164 "
-Ye 24 0 0245
-char165 "
-bb 24 0 0246
-char166 "
-sc 24 0 0247
-char167 "
-ad 24 0 0250
-char168 "
-co 24 0 0251
-char169 "
-Of 24 0 0252
-char170 "
-Fo 24 0 0253
-char171 "
-no 24 0 0254
-char172 "
-shc 24 0 0255
-char173 "
-rg 24 0 0256
-char174 "
-a- 24 0 0257
-char175 "
-de 24 0 0260
-char176 "
-ao "
-+- 24 0 0261
-char177 "
-S2 24 0 0262
-char178 "
-S3 24 0 0263
-char179 "
-aa 24 0 0264
-char180 "
-*m 24 0 0265
-char181 "
-ps 24 0 0266
-char182 "
-pc 24 0 0267
-md "
-char183 "
-ac 24 0 0270
-char184 "
-S1 24 0 0271
-char185 "
-Om 24 0 0272
-char186 "
-Fc 24 0 0273
-char187 "
-14 24 0 0274
-char188 "
-12 24 0 0275
-char189 "
-34 24 0 0276
-char190 "
-r? 24 0 0277
-char191 "
-`A 24 0 0300
-char192 "
-'A 24 0 0301
-char193 "
-^A 24 0 0302
-char194 "
-~A 24 0 0303
-char195 "
-:A 24 0 0304
-char196 "
-oA 24 0 0305
-char197 "
-AE 24 0 0306
-char198 "
-,C 24 0 0307
-char199 "
-`E 24 0 0310
-char200 "
-'E 24 0 0311
-char201 "
-^E 24 0 0312
-char202 "
-:E 24 0 0313
-char203 "
-`I 24 0 0314
-char204 "
-'I 24 0 0315
-char205 "
-^I 24 0 0316
-char206 "
-:I 24 0 0317
-char207 "
--D 24 0 0320
-char208 "
-~N 24 0 0321
-char209 "
-`O 24 0 0322
-char210 "
-'O 24 0 0323
-char211 "
-^O 24 0 0324
-char212 "
-~O 24 0 0325
-char213 "
-:O 24 0 0326
-char214 "
-mu 24 0 0327
-char215 "
-/O 24 0 0330
-char216 "
-`U 24 0 0331
-char217 "
-'U 24 0 0332
-char218 "
-^U 24 0 0333
-char219 "
-:U 24 0 0334
-char220 "
-'Y 24 0 0335
-char221 "
-TP 24 0 0336
-char222 "
-ss 24 0 0337
-char223 "
-`a 24 0 0340
-char224 "
-'a 24 0 0341
-char225 "
-^a 24 0 0342
-char226 "
-~a 24 0 0343
-char227 "
-:a 24 0 0344
-char228 "
-oa 24 0 0345
-char229 "
-ae 24 0 0346
-char230 "
-,c 24 0 0347
-char231 "
-`e 24 0 0350
-char232 "
-'e 24 0 0351
-char233 "
-^e 24 0 0352
-char234 "
-:e 24 0 0353
-char235 "
-`i 24 0 0354
-char236 "
-'i 24 0 0355
-char237 "
-^i 24 0 0356
-char238 "
-:i 24 0 0357
-char239 "
-Sd 24 0 0360
-char240 "
-~n 24 0 0361
-char241 "
-`o 24 0 0362
-char242 "
-'o 24 0 0363
-char243 "
-^o 24 0 0364
-char244 "
-~o 24 0 0365
-char245 "
-:o 24 0 0366
-char246 "
-di 24 0 0367
-char247 "
-/o 24 0 0370
-char248 "
-`u 24 0 0371
-char249 "
-'u 24 0 0372
-char250 "
-^u 24 0 0373
-char251 "
-:u 24 0 0374
-char252 "
-'y 24 0 0375
-char253 "
-Tp 24 0 0376
-char254 "
-:y 24 0 0377
-char255 "
diff --git a/contrib/groff/devlbp/CB b/contrib/groff/devlbp/CB
deleted file mode 100644
index 5c34658..0000000
--- a/contrib/groff/devlbp/CB
+++ /dev/null
@@ -1,272 +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 # "
-char173 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 # "
-char161 2200 0 0xad -- 4,7 # exclamdown
-char162 2200 0 0x9b -- 4,19 # cent
-char163 2200 0 0x9c -- 4,11 # sterling
-char165 2200 0 0x9d -- 4,12 # yen
-char166 2200 0 0x7c -- 0,124 # brokenbar
-char167 2200 0 0x15 -- 4,6 # section
-char170 2200 0 0xa6 -- 4,15 # ordfeminine
-char171 2200 0 0xae -- 4,9 # guillemotleft
-char172 2200 0 0xaa -- 6,20 # logicalnot
-char175 2200 0 0x2d -- 6,0 # macron
-char176 2200 0 0xf8 -- 6,36 # degree
-char177 2200 0 0xf1 -- 6,1 # plusminus
-char178 2200 0 0xfd -- 4,20 # twosuperior
-char181 2200 0 0xe6 -- 8,25 # mu
-char182 2200 0 0x14 -- 4,5 # paragraph
-char183 2200 0 0xfa -- 6,32 # periodcentered
-char186 2200 0 0xa7 -- 4,16 # ordmasculine
-char187 2200 0 0xaf -- 4,10 # guillemotright
-char188 2200 0 0xac -- 4,18 # onequarter
-char189 2200 0 0xab -- 4,17 # onehalf
-char191 2200 0 0xa8 -- 4,8 # questiondown
-char195 2200 0 0x28e -- 1,76 # Atilde
-char196 2200 0 0x8e -- 1,30 # Adieresis
-char197 2200 0 0x8f -- 1,34 # Aring
-char198 2200 0 0x92 -- 1,36 # AE
-char199 2200 0 0x80 -- 1,38 # Ccedilla
-char201 2200 0 0x90 -- 1,40 # Eacute
-char209 2200 0 0xa5 -- 1,56 # Ntilde
-char214 2200 0 0x99 -- 1,62 # Odieresis
-char220 2200 0 0x9a -- 1,70 # Udieresis
-char224 2200 0 0x85 -- 1,33 # agrave
-char225 2200 0 0xa0 -- 1,27 # aacute
-char226 2200 0 0x83 -- 1,29 # acircumflex
-char227 2200 0 0x284 -- 1,93 # atilde
-char228 2200 0 0x84 -- 1,31 # adieresis
-char229 2200 0 0x86 -- 1,35 # aring
-char230 2200 0 0x91 -- 1,37 # ae
-char231 2200 0 0x87 -- 1,39 # ccedilla
-char232 2200 0 0x8a -- 1,47 # egrave
-char233 2200 0 0x82 -- 1,41 # eacute
-char234 2200 0 0x88 -- 1,43 # ecircumflex
-char235 2200 0 0x89 -- 1,45 # edieresis
-char236 2200 0 0x8d -- 1,55 # igrave
-char237 2200 0 0xa1 -- 1,49 # iacute
-char238 2200 0 0x8c -- 1,51 # icircumflex
-char239 2200 0 0x8b -- 1,53 # idieresis
-char241 2200 0 0xa4 -- 1,57 # ntilde
-char242 2200 0 0x95 -- 1,65 # ograve
-char243 2200 0 0xa2 -- 1,59 # oacute
-char244 2200 0 0x93 -- 1,61 # ocircumflex
-char246 2200 0 0x94 -- 1,63 # odieresis
-char247 2200 0 0xf6 -- 6,8 # divide
-char249 2200 0 0x97 -- 1,73 # ugrave
-char250 2200 0 0xa3 -- 1,67 # uacute
-char251 2200 0 0x96 -- 1,69 # ucircumflex
-char252 2200 0 0x81 -- 1,71 # udieresis
-char255 2200 0 0x98 -- 1,75 # ydieresis
-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
-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
diff --git a/contrib/groff/devlbp/CI b/contrib/groff/devlbp/CI
deleted file mode 100644
index 84b0ac4..0000000
--- a/contrib/groff/devlbp/CI
+++ /dev/null
@@ -1,272 +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 # "
-char173 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 # "
-char161 2200 0 0xad -- 4,7 # exclamdown
-char162 2200 0 0x9b -- 4,19 # cent
-char163 2200 0 0x9c -- 4,11 # sterling
-char165 2200 0 0x9d -- 4,12 # yen
-char166 2200 0 0x7c -- 0,124 # brokenbar
-char167 2200 0 0x15 -- 4,6 # section
-char170 2200 0 0xa6 -- 4,15 # ordfeminine
-char171 2200 0 0xae -- 4,9 # guillemotleft
-char172 2200 0 0xaa -- 6,20 # logicalnot
-char175 2200 0 0x2d -- 6,0 # macron
-char176 2200 0 0xf8 -- 6,36 # degree
-char177 2200 0 0xf1 -- 6,1 # plusminus
-char178 2200 0 0xfd -- 4,20 # twosuperior
-char181 2200 0 0xe6 -- 8,25 # mu
-char182 2200 0 0x14 -- 4,5 # paragraph
-char183 2200 0 0xfa -- 6,32 # periodcentered
-char186 2200 0 0xa7 -- 4,16 # ordmasculine
-char187 2200 0 0xaf -- 4,10 # guillemotright
-char188 2200 0 0xac -- 4,18 # onequarter
-char189 2200 0 0xab -- 4,17 # onehalf
-char191 2200 0 0xa8 -- 4,8 # questiondown
-char195 2200 0 0x28e -- 1,76 # Atilde
-char196 2200 0 0x8e -- 1,30 # Adieresis
-char197 2200 0 0x8f -- 1,34 # Aring
-char198 2200 0 0x92 -- 1,36 # AE
-char199 2200 0 0x80 -- 1,38 # Ccedilla
-char201 2200 0 0x90 -- 1,40 # Eacute
-char209 2200 0 0xa5 -- 1,56 # Ntilde
-char214 2200 0 0x99 -- 1,62 # Odieresis
-char220 2200 0 0x9a -- 1,70 # Udieresis
-char224 2200 0 0x85 -- 1,33 # agrave
-char225 2200 0 0xa0 -- 1,27 # aacute
-char226 2200 0 0x83 -- 1,29 # acircumflex
-char227 2200 0 0x284 -- 1,93 # atilde
-char228 2200 0 0x84 -- 1,31 # adieresis
-char229 2200 0 0x86 -- 1,35 # aring
-char230 2200 0 0x91 -- 1,37 # ae
-char231 2200 0 0x87 -- 1,39 # ccedilla
-char232 2200 0 0x8a -- 1,47 # egrave
-char233 2200 0 0x82 -- 1,41 # eacute
-char234 2200 0 0x88 -- 1,43 # ecircumflex
-char235 2200 0 0x89 -- 1,45 # edieresis
-char236 2200 0 0x8d -- 1,55 # igrave
-char237 2200 0 0xa1 -- 1,49 # iacute
-char238 2200 0 0x8c -- 1,51 # icircumflex
-char239 2200 0 0x8b -- 1,53 # idieresis
-char241 2200 0 0xa4 -- 1,57 # ntilde
-char242 2200 0 0x95 -- 1,65 # ograve
-char243 2200 0 0xa2 -- 1,59 # oacute
-char244 2200 0 0x93 -- 1,61 # ocircumflex
-char246 2200 0 0x94 -- 1,63 # odieresis
-char247 2200 0 0xf6 -- 6,8 # divide
-char249 2200 0 0x97 -- 1,73 # ugrave
-char250 2200 0 0xa3 -- 1,67 # uacute
-char251 2200 0 0x96 -- 1,69 # ucircumflex
-char252 2200 0 0x81 -- 1,71 # udieresis
-char255 2200 0 0x98 -- 1,75 # ydieresis
-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
-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
diff --git a/contrib/groff/devlbp/CR b/contrib/groff/devlbp/CR
deleted file mode 100644
index ef4a56b..0000000
--- a/contrib/groff/devlbp/CR
+++ /dev/null
@@ -1,272 +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 # "
-char173 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 # "
-char161 2200 0 0xad -- 4,7 # exclamdown
-char162 2200 0 0x9b -- 4,19 # cent
-char163 2200 0 0x9c -- 4,11 # sterling
-char165 2200 0 0x9d -- 4,12 # yen
-char166 2200 0 0x7c -- 0,124 # brokenbar
-char167 2200 0 0x15 -- 4,6 # section
-char170 2200 0 0xa6 -- 4,15 # ordfeminine
-char171 2200 0 0xae -- 4,9 # guillemotleft
-char172 2200 0 0xaa -- 6,20 # logicalnot
-char175 2200 0 0x2d -- 6,0 # macron
-char176 2200 0 0xf8 -- 6,36 # degree
-char177 2200 0 0xf1 -- 6,1 # plusminus
-char178 2200 0 0xfd -- 4,20 # twosuperior
-char181 2200 0 0xe6 -- 8,25 # mu
-char182 2200 0 0x14 -- 4,5 # paragraph
-char183 2200 0 0xfa -- 6,32 # periodcentered
-char186 2200 0 0xa7 -- 4,16 # ordmasculine
-char187 2200 0 0xaf -- 4,10 # guillemotright
-char188 2200 0 0xac -- 4,18 # onequarter
-char189 2200 0 0xab -- 4,17 # onehalf
-char191 2200 0 0xa8 -- 4,8 # questiondown
-char195 2200 0 0x28e -- 1,76 # Atilde
-char196 2200 0 0x8e -- 1,30 # Adieresis
-char197 2200 0 0x8f -- 1,34 # Aring
-char198 2200 0 0x92 -- 1,36 # AE
-char199 2200 0 0x80 -- 1,38 # Ccedilla
-char201 2200 0 0x90 -- 1,40 # Eacute
-char209 2200 0 0xa5 -- 1,56 # Ntilde
-char214 2200 0 0x99 -- 1,62 # Odieresis
-char220 2200 0 0x9a -- 1,70 # Udieresis
-char224 2200 0 0x85 -- 1,33 # agrave
-char225 2200 0 0xa0 -- 1,27 # aacute
-char226 2200 0 0x83 -- 1,29 # acircumflex
-char227 2200 0 0x284 -- 1,93 # atilde
-char228 2200 0 0x84 -- 1,31 # adieresis
-char229 2200 0 0x86 -- 1,35 # aring
-char230 2200 0 0x91 -- 1,37 # ae
-char231 2200 0 0x87 -- 1,39 # ccedilla
-char232 2200 0 0x8a -- 1,47 # egrave
-char233 2200 0 0x82 -- 1,41 # eacute
-char234 2200 0 0x88 -- 1,43 # ecircumflex
-char235 2200 0 0x89 -- 1,45 # edieresis
-char236 2200 0 0x8d -- 1,55 # igrave
-char237 2200 0 0xa1 -- 1,49 # iacute
-char238 2200 0 0x8c -- 1,51 # icircumflex
-char239 2200 0 0x8b -- 1,53 # idieresis
-char241 2200 0 0xa4 -- 1,57 # ntilde
-char242 2200 0 0x95 -- 1,65 # ograve
-char243 2200 0 0xa2 -- 1,59 # oacute
-char244 2200 0 0x93 -- 1,61 # ocircumflex
-char246 2200 0 0x94 -- 1,63 # odieresis
-char247 2200 0 0xf6 -- 6,8 # divide
-char249 2200 0 0x97 -- 1,73 # ugrave
-char250 2200 0 0xa3 -- 1,67 # uacute
-char251 2200 0 0x96 -- 1,69 # ucircumflex
-char252 2200 0 0x81 -- 1,71 # udieresis
-char255 2200 0 0x98 -- 1,75 # ydieresis
-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
-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
diff --git a/contrib/groff/devlbp/DESC.in b/contrib/groff/devlbp/DESC.in
deleted file mode 100644
index eb5d6f2..0000000
--- a/contrib/groff/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/devlbp/EB b/contrib/groff/devlbp/EB
deleted file mode 100644
index 50c6f71..0000000
--- a/contrib/groff/devlbp/EB
+++ /dev/null
@@ -1,272 +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 # "
-char173 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 # "
-char161 1900 0 0xad -- 4,7 # exclamdown
-char162 1900 0 0x9b -- 4,19 # cent
-char163 1900 0 0x9c -- 4,11 # sterling
-char165 1900 0 0x9d -- 4,12 # yen
-char166 1900 0 0x7c -- 0,124 # brokenbar
-char167 1900 0 0x15 -- 4,6 # section
-char170 1900 0 0xa6 -- 4,15 # ordfeminine
-char171 1900 0 0xae -- 4,9 # guillemotleft
-char172 1900 0 0xaa -- 6,20 # logicalnot
-char175 1900 0 0x2d -- 6,0 # macron
-char176 1900 0 0xf8 -- 6,36 # degree
-char177 1900 0 0xf1 -- 6,1 # plusminus
-char178 1900 0 0xfd -- 4,20 # twosuperior
-char181 1900 0 0xe6 -- 8,25 # mu
-char182 1900 0 0x14 -- 4,5 # paragraph
-char183 1900 0 0xfa -- 6,32 # periodcentered
-char186 1900 0 0xa7 -- 4,16 # ordmasculine
-char187 1900 0 0xaf -- 4,10 # guillemotright
-char188 1900 0 0xac -- 4,18 # onequarter
-char189 1900 0 0xab -- 4,17 # onehalf
-char191 1900 0 0xa8 -- 4,8 # questiondown
-char195 1900 0 0x28e -- 1,76 # Atilde
-char196 1900 0 0x8e -- 1,30 # Adieresis
-char197 1900 0 0x8f -- 1,34 # Aring
-char198 1900 0 0x92 -- 1,36 # AE
-char199 1900 0 0x80 -- 1,38 # Ccedilla
-char201 1900 0 0x90 -- 1,40 # Eacute
-char209 1900 0 0xa5 -- 1,56 # Ntilde
-char214 1900 0 0x99 -- 1,62 # Odieresis
-char220 1900 0 0x9a -- 1,70 # Udieresis
-char224 1900 0 0x85 -- 1,33 # agrave
-char225 1900 0 0xa0 -- 1,27 # aacute
-char226 1900 0 0x83 -- 1,29 # acircumflex
-char227 1900 0 0x284 -- 1,93 # atilde
-char228 1900 0 0x84 -- 1,31 # adieresis
-char229 1900 0 0x86 -- 1,35 # aring
-char230 1900 0 0x91 -- 1,37 # ae
-char231 1900 0 0x87 -- 1,39 # ccedilla
-char232 1900 0 0x8a -- 1,47 # egrave
-char233 1900 0 0x82 -- 1,41 # eacute
-char234 1900 0 0x88 -- 1,43 # ecircumflex
-char235 1900 0 0x89 -- 1,45 # edieresis
-char236 1900 0 0x8d -- 1,55 # igrave
-char237 1900 0 0xa1 -- 1,49 # iacute
-char238 1900 0 0x8c -- 1,51 # icircumflex
-char239 1900 0 0x8b -- 1,53 # idieresis
-char241 1900 0 0xa4 -- 1,57 # ntilde
-char242 1900 0 0x95 -- 1,65 # ograve
-char243 1900 0 0xa2 -- 1,59 # oacute
-char244 1900 0 0x93 -- 1,61 # ocircumflex
-char246 1900 0 0x94 -- 1,63 # odieresis
-char247 1900 0 0xf6 -- 6,8 # divide
-char249 1900 0 0x97 -- 1,73 # ugrave
-char250 1900 0 0xa3 -- 1,67 # uacute
-char251 1900 0 0x96 -- 1,69 # ucircumflex
-char252 1900 0 0x81 -- 1,71 # udieresis
-char255 1900 0 0x98 -- 1,75 # ydieresis
-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
-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
diff --git a/contrib/groff/devlbp/EI b/contrib/groff/devlbp/EI
deleted file mode 100644
index 364cea6..0000000
--- a/contrib/groff/devlbp/EI
+++ /dev/null
@@ -1,272 +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 # "
-char173 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 # "
-char161 1900 0 0xad -- 4,7 # exclamdown
-char162 1900 0 0x9b -- 4,19 # cent
-char163 1900 0 0x9c -- 4,11 # sterling
-char165 1900 0 0x9d -- 4,12 # yen
-char166 1900 0 0x7c -- 0,124 # brokenbar
-char167 1900 0 0x15 -- 4,6 # section
-char170 1900 0 0xa6 -- 4,15 # ordfeminine
-char171 1900 0 0xae -- 4,9 # guillemotleft
-char172 1900 0 0xaa -- 6,20 # logicalnot
-char175 1900 0 0x2d -- 6,0 # macron
-char176 1900 0 0xf8 -- 6,36 # degree
-char177 1900 0 0xf1 -- 6,1 # plusminus
-char178 1900 0 0xfd -- 4,20 # twosuperior
-char181 1900 0 0xe6 -- 8,25 # mu
-char182 1900 0 0x14 -- 4,5 # paragraph
-char183 1900 0 0xfa -- 6,32 # periodcentered
-char186 1900 0 0xa7 -- 4,16 # ordmasculine
-char187 1900 0 0xaf -- 4,10 # guillemotright
-char188 1900 0 0xac -- 4,18 # onequarter
-char189 1900 0 0xab -- 4,17 # onehalf
-char191 1900 0 0xa8 -- 4,8 # questiondown
-char195 1900 0 0x28e -- 1,76 # Atilde
-char196 1900 0 0x8e -- 1,30 # Adieresis
-char197 1900 0 0x8f -- 1,34 # Aring
-char198 1900 0 0x92 -- 1,36 # AE
-char199 1900 0 0x80 -- 1,38 # Ccedilla
-char201 1900 0 0x90 -- 1,40 # Eacute
-char209 1900 0 0xa5 -- 1,56 # Ntilde
-char214 1900 0 0x99 -- 1,62 # Odieresis
-char220 1900 0 0x9a -- 1,70 # Udieresis
-char224 1900 0 0x85 -- 1,33 # agrave
-char225 1900 0 0xa0 -- 1,27 # aacute
-char226 1900 0 0x83 -- 1,29 # acircumflex
-char227 1900 0 0x284 -- 1,93 # atilde
-char228 1900 0 0x84 -- 1,31 # adieresis
-char229 1900 0 0x86 -- 1,35 # aring
-char230 1900 0 0x91 -- 1,37 # ae
-char231 1900 0 0x87 -- 1,39 # ccedilla
-char232 1900 0 0x8a -- 1,47 # egrave
-char233 1900 0 0x82 -- 1,41 # eacute
-char234 1900 0 0x88 -- 1,43 # ecircumflex
-char235 1900 0 0x89 -- 1,45 # edieresis
-char236 1900 0 0x8d -- 1,55 # igrave
-char237 1900 0 0xa1 -- 1,49 # iacute
-char238 1900 0 0x8c -- 1,51 # icircumflex
-char239 1900 0 0x8b -- 1,53 # idieresis
-char241 1900 0 0xa4 -- 1,57 # ntilde
-char242 1900 0 0x95 -- 1,65 # ograve
-char243 1900 0 0xa2 -- 1,59 # oacute
-char244 1900 0 0x93 -- 1,61 # ocircumflex
-char246 1900 0 0x94 -- 1,63 # odieresis
-char247 1900 0 0xf6 -- 6,8 # divide
-char249 1900 0 0x97 -- 1,73 # ugrave
-char250 1900 0 0xa3 -- 1,67 # uacute
-char251 1900 0 0x96 -- 1,69 # ucircumflex
-char252 1900 0 0x81 -- 1,71 # udieresis
-char255 1900 0 0x98 -- 1,75 # ydieresis
-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
-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
diff --git a/contrib/groff/devlbp/ER b/contrib/groff/devlbp/ER
deleted file mode 100644
index f2734cc..0000000
--- a/contrib/groff/devlbp/ER
+++ /dev/null
@@ -1,272 +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 # "
-char173 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 # "
-char161 1900 0 0xad -- 4,7 # exclamdown
-char162 1900 0 0x9b -- 4,19 # cent
-char163 1900 0 0x9c -- 4,11 # sterling
-char165 1900 0 0x9d -- 4,12 # yen
-char166 1900 0 0x7c -- 0,124 # brokenbar
-char167 1900 0 0x15 -- 4,6 # section
-char170 1900 0 0xa6 -- 4,15 # ordfeminine
-char171 1900 0 0xae -- 4,9 # guillemotleft
-char172 1900 0 0xaa -- 6,20 # logicalnot
-char175 1900 0 0x2d -- 6,0 # macron
-char176 1900 0 0xf8 -- 6,36 # degree
-char177 1900 0 0xf1 -- 6,1 # plusminus
-char178 1900 0 0xfd -- 4,20 # twosuperior
-char181 1900 0 0xe6 -- 8,25 # mu
-char182 1900 0 0x14 -- 4,5 # paragraph
-char183 1900 0 0xfa -- 6,32 # periodcentered
-char186 1900 0 0xa7 -- 4,16 # ordmasculine
-char187 1900 0 0xaf -- 4,10 # guillemotright
-char188 1900 0 0xac -- 4,18 # onequarter
-char189 1900 0 0xab -- 4,17 # onehalf
-char191 1900 0 0xa8 -- 4,8 # questiondown
-char195 1900 0 0x28e -- 1,76 # Atilde
-char196 1900 0 0x8e -- 1,30 # Adieresis
-char197 1900 0 0x8f -- 1,34 # Aring
-char198 1900 0 0x92 -- 1,36 # AE
-char199 1900 0 0x80 -- 1,38 # Ccedilla
-char201 1900 0 0x90 -- 1,40 # Eacute
-char209 1900 0 0xa5 -- 1,56 # Ntilde
-char214 1900 0 0x99 -- 1,62 # Odieresis
-char220 1900 0 0x9a -- 1,70 # Udieresis
-char224 1900 0 0x85 -- 1,33 # agrave
-char225 1900 0 0xa0 -- 1,27 # aacute
-char226 1900 0 0x83 -- 1,29 # acircumflex
-char227 1900 0 0x284 -- 1,93 # atilde
-char228 1900 0 0x84 -- 1,31 # adieresis
-char229 1900 0 0x86 -- 1,35 # aring
-char230 1900 0 0x91 -- 1,37 # ae
-char231 1900 0 0x87 -- 1,39 # ccedilla
-char232 1900 0 0x8a -- 1,47 # egrave
-char233 1900 0 0x82 -- 1,41 # eacute
-char234 1900 0 0x88 -- 1,43 # ecircumflex
-char235 1900 0 0x89 -- 1,45 # edieresis
-char236 1900 0 0x8d -- 1,55 # igrave
-char237 1900 0 0xa1 -- 1,49 # iacute
-char238 1900 0 0x8c -- 1,51 # icircumflex
-char239 1900 0 0x8b -- 1,53 # idieresis
-char241 1900 0 0xa4 -- 1,57 # ntilde
-char242 1900 0 0x95 -- 1,65 # ograve
-char243 1900 0 0xa2 -- 1,59 # oacute
-char244 1900 0 0x93 -- 1,61 # ocircumflex
-char246 1900 0 0x94 -- 1,63 # odieresis
-char247 1900 0 0xf6 -- 6,8 # divide
-char249 1900 0 0x97 -- 1,73 # ugrave
-char250 1900 0 0xa3 -- 1,67 # uacute
-char251 1900 0 0x96 -- 1,69 # ucircumflex
-char252 1900 0 0x81 -- 1,71 # udieresis
-char255 1900 0 0x98 -- 1,75 # ydieresis
-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
-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
diff --git a/contrib/groff/devlbp/HB b/contrib/groff/devlbp/HB
deleted file mode 100644
index 1ad7b4e..0000000
--- a/contrib/groff/devlbp/HB
+++ /dev/null
@@ -1,491 +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 # "
-char173 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 # "
-char161 1110 1 0xad 4,7 # exclamdown
-char162 1853 2 0x9b 4,19 # cent
-char163 1853 2 0x9c 4,11 # sterling
-char164 1853 2 0x12f 4,24 # currency
-char165 1853 2 0x9d 4,12 # yen
-char166 933 2 0x7c 0,124 # brokenbar
-char167 1853 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2457 2 0x154 4,23 # copyright
-char170 1233 2 0xa6 4,15 # ordfeminine
-char171 1853 0 0xae 4,9 # guillemotleft
-char172 1947 0 0xaa 6,20 # logicalnot
-char173 1853 0 0x132 4,33 # hyphen
-char174 2457 2 0x155 4,22 # registered
-char175 1947 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1947 0 0xf1 6,1 # plusminus
-char178 1110 2 0xfd 4,20 # twosuperior
-char179 1110 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 2037 1 0xe6 8,25 # mu
-char182 1853 2 0x14 4,5 # paragraph
-char183 927 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1110 2 0x156 4,78 # onesuperior
-char186 1217 2 0xa7 4,16 # ordmasculine
-char187 1853 0 0xaf 4,10 # guillemotright
-char188 2780 2 0xac 4,18 # onequarter
-char189 2780 2 0xab 4,17 # onehalf
-char190 2780 2 0x12e 4,25 # threequarters
-char191 2037 1 0xa8 4,8 # questiondown
-char192 2407 2 0x15c 1,32 # Agrave
-char193 2407 2 0x15a 1,26 # Aacute
-char194 2407 2 0x15b 1,28 # Acircumflex
-char195 2407 2 0x28e 1,76 # Atilde
-char196 2407 2 0x8e 1,30 # Adieresis
-char197 2407 2 0x8f 1,34 # Aring
-char198 3333 2 0x92 1,36 # AE
-char199 2407 2 0x80 1,38 # Ccedilla
-char200 2223 2 0x160 1,46 # Egrave
-char201 2223 2 0x90 1,40 # Eacute
-char202 2223 2 0x15e 1,42 # Ecircumflex
-char203 2223 2 0x15f 1,44 # Edieresis
-char204 927 2 0x164 1,54 # Igrave
-char205 927 2 0x161 1,48 # Iacute
-char206 927 2 0x162 1,50 # Icircumflex
-char207 927 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2593 2 0x167 1,64 # Ograve
-char211 2593 2 0x165 1,58 # Oacute
-char212 2593 2 0x166 1,60 # Ocircumflex
-char213 2593 2 0x168 1,82 # Otilde
-char214 2593 2 0x99 1,62 # Odieresis
-char215 1947 0 0x157 6,39 # multiply
-char216 2593 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2223 2 0x16f 1,84 # Yacute
-char222 2223 2 0x13e 1,88 # Thorn
-char223 2037 2 0x147 1,23 # germandbls
-char224 1853 2 0x85 1,33 # agrave
-char225 1853 2 0xa0 1,27 # aacute
-char226 1853 2 0x83 1,29 # acircumflex
-char227 1853 2 0x284 1,93 # atilde
-char228 1853 2 0x84 1,31 # adieresis
-char229 1853 2 0x86 1,35 # aring
-char230 2963 0 0x91 1,37 # ae
-char231 1853 0 0x87 1,39 # ccedilla
-char232 1853 2 0x8a 1,47 # egrave
-char233 1853 2 0x82 1,41 # eacute
-char234 1853 2 0x88 1,43 # ecircumflex
-char235 1853 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 2037 2 0x148 1,87 # eth
-char241 2037 2 0xa4 1,57 # ntilde
-char242 2037 2 0x95 1,65 # ograve
-char243 2037 2 0xa2 1,59 # oacute
-char244 2037 2 0x93 1,61 # ocircumflex
-char245 2037 2 0x172 1,83 # otilde
-char246 2037 2 0x94 1,63 # odieresis
-char247 1947 0 0xf6 6,8 # divide
-char248 2037 0 0x145 1,81 # oslash
-char249 2037 2 0x97 1,73 # ugrave
-char250 2037 2 0xa3 1,67 # uacute
-char251 2037 2 0x96 1,69 # ucircumflex
-char252 2037 2 0x81 1,71 # udieresis
-char253 1853 3 0x175 1,85 # yacute
-char254 2037 3 0x143 1,89 # thorn
-char255 1853 3 0x98 1,75 # ydieresis
--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"
-or 933 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HBI b/contrib/groff/devlbp/HBI
deleted file mode 100644
index 30fa995..0000000
--- a/contrib/groff/devlbp/HBI
+++ /dev/null
@@ -1,492 +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 # "
-char173 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 # "
-char161 1110 1 0xad 4,7 # exclamdown
-char162 1853 2 0x9b 4,19 # cent
-char163 1853 2 0x9c 4,11 # sterling
-char164 1853 2 0x12f 4,24 # currency
-char165 1853 2 0x9d 4,12 # yen
-char166 933 2 0x7c 0,124 # brokenbar
-char167 1853 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2457 2 0x154 4,23 # copyright
-char170 1233 2 0xa6 4,15 # ordfeminine
-char171 1853 0 0xae 4,9 # guillemotleft
-char172 1947 0 0xaa 6,20 # logicalnot
-char173 1853 0 0x132 4,33 # hyphen
-char174 2457 2 0x155 4,22 # registered
-char175 1947 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1947 0 0xf1 6,1 # plusminus
-char178 1110 2 0xfd 4,20 # twosuperior
-char179 1110 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 2037 1 0xe6 8,25 # mu
-char182 1853 2 0x14 4,5 # paragraph
-char183 927 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1110 2 0x156 4,78 # onesuperior
-char186 1217 2 0xa7 4,16 # ordmasculine
-char187 1853 0 0xaf 4,10 # guillemotright
-char188 2780 2 0xac 4,18 # onequarter
-char189 2780 2 0xab 4,17 # onehalf
-char190 2780 2 0x12e 4,25 # threequarters
-char191 2037 1 0xa8 4,8 # questiondown
-char192 2407 2 0x15c 1,32 # Agrave
-char193 2407 2 0x15a 1,26 # Aacute
-char194 2407 2 0x15b 1,28 # Acircumflex
-char195 2407 2 0x28e 1,76 # Atilde
-char196 2407 2 0x8e 1,30 # Adieresis
-char197 2407 2 0x8f 1,34 # Aring
-char198 3333 2 0x92 1,36 # AE
-char199 2407 2 0x80 1,38 # Ccedilla
-char200 2223 2 0x160 1,46 # Egrave
-char201 2223 2 0x90 1,40 # Eacute
-char202 2223 2 0x15e 1,42 # Ecircumflex
-char203 2223 2 0x15f 1,44 # Edieresis
-char204 927 2 0x164 1,54 # Igrave
-char205 927 2 0x161 1,48 # Iacute
-char206 927 2 0x162 1,50 # Icircumflex
-char207 927 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2593 2 0x167 1,64 # Ograve
-char211 2593 2 0x165 1,58 # Oacute
-char212 2593 2 0x166 1,60 # Ocircumflex
-char213 2593 2 0x168 1,82 # Otilde
-char214 2593 2 0x99 1,62 # Odieresis
-char215 1947 0 0x157 6,39 # multiply
-char216 2593 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2223 2 0x16f 1,84 # Yacute
-char222 2223 2 0x13e 1,88 # Thorn
-char223 2037 2 0x147 1,23 # germandbls
-char224 1853 2 0x85 1,33 # agrave
-char225 1853 2 0xa0 1,27 # aacute
-char226 1853 2 0x83 1,29 # acircumflex
-char227 1853 2 0x284 1,93 # atilde
-char228 1853 2 0x84 1,31 # adieresis
-char229 1853 2 0x86 1,35 # aring
-char230 2963 0 0x91 1,37 # ae
-char231 1853 0 0x87 1,39 # ccedilla
-char232 1853 2 0x8a 1,47 # egrave
-char233 1853 2 0x82 1,41 # eacute
-char234 1853 2 0x88 1,43 # ecircumflex
-char235 1853 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 2037 2 0x148 1,87 # eth
-char241 2037 2 0xa4 1,57 # ntilde
-char242 2037 2 0x95 1,65 # ograve
-char243 2037 2 0xa2 1,59 # oacute
-char244 2037 2 0x93 1,61 # ocircumflex
-char245 2037 2 0x172 1,83 # otilde
-char246 2037 2 0x94 1,63 # odieresis
-char247 1947 0 0xf6 6,8 # divide
-char248 2037 0 0x145 1,81 # oslash
-char249 2037 2 0x97 1,73 # ugrave
-char250 2037 2 0xa3 1,67 # uacute
-char251 2037 2 0x96 1,69 # ucircumflex
-char252 2037 2 0x81 1,71 # udieresis
-char253 1853 3 0x175 1,85 # yacute
-char254 2037 3 0x143 1,89 # thorn
-char255 1853 3 0x98 1,75 # ydieresis
--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"
-or 933 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HI b/contrib/groff/devlbp/HI
deleted file mode 100644
index 59201e2..0000000
--- a/contrib/groff/devlbp/HI
+++ /dev/null
@@ -1,492 +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 # "
-char173 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 # "
-char161 1110 1 0xad 4,7 # exclamdown
-char162 1853 2 0x9b 4,19 # cent
-char163 1853 2 0x9c 4,11 # sterling
-char164 1853 2 0x12f 4,24 # currency
-char165 1853 2 0x9d 4,12 # yen
-char166 867 2 0x7c 0,124 # brokenbar
-char167 1853 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2457 2 0x154 4,23 # copyright
-char170 1233 2 0xa6 4,15 # ordfeminine
-char171 1853 0 0xae 4,9 # guillemotleft
-char172 1947 0 0xaa 6,20 # logicalnot
-char173 1853 0 0x132 4,33 # hyphen
-char174 2457 2 0x155 4,22 # registered
-char175 1947 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1947 0 0xf1 6,1 # plusminus
-char178 1110 2 0xfd 4,20 # twosuperior
-char179 1110 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 1853 1 0xe6 8,25 # mu
-char182 1790 2 0x14 4,5 # paragraph
-char183 927 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1110 2 0x156 4,78 # onesuperior
-char186 1217 2 0xa7 4,16 # ordmasculine
-char187 1853 0 0xaf 4,10 # guillemotright
-char188 2780 2 0xac 4,18 # onequarter
-char189 2780 2 0xab 4,17 # onehalf
-char190 2780 2 0x12e 4,25 # threequarters
-char191 2037 1 0xa8 4,8 # questiondown
-char192 2223 2 0x15c 1,32 # Agrave
-char193 2223 2 0x15a 1,26 # Aacute
-char194 2223 2 0x15b 1,28 # Acircumflex
-char195 2223 2 0x28e 1,76 # Atilde
-char196 2223 2 0x8e 1,30 # Adieresis
-char197 2223 2 0x8f 1,34 # Aring
-char198 3333 2 0x92 1,36 # AE
-char199 2407 2 0x80 1,38 # Ccedilla
-char200 2223 2 0x160 1,46 # Egrave
-char201 2223 2 0x90 1,40 # Eacute
-char202 2223 2 0x15e 1,42 # Ecircumflex
-char203 2223 2 0x15f 1,44 # Edieresis
-char204 927 2 0x164 1,54 # Igrave
-char205 927 2 0x161 1,48 # Iacute
-char206 927 2 0x162 1,50 # Icircumflex
-char207 927 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2593 2 0x167 1,64 # Ograve
-char211 2593 2 0x165 1,58 # Oacute
-char212 2593 2 0x166 1,60 # Ocircumflex
-char213 2593 2 0x168 1,82 # Otilde
-char214 2593 2 0x99 1,62 # Odieresis
-char215 1947 0 0x157 6,39 # multiply
-char216 2593 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2223 2 0x16f 1,84 # Yacute
-char222 2223 2 0x13e 1,88 # Thorn
-char223 2037 2 0x147 1,23 # germandbls
-char224 1853 2 0x85 1,33 # agrave
-char225 1853 2 0xa0 1,27 # aacute
-char226 1853 2 0x83 1,29 # acircumflex
-char227 1853 2 0x284 1,93 # atilde
-char228 1853 2 0x84 1,31 # adieresis
-char229 1853 2 0x86 1,35 # aring
-char230 2963 0 0x91 1,37 # ae
-char231 1667 0 0x87 1,39 # ccedilla
-char232 1853 2 0x8a 1,47 # egrave
-char233 1853 2 0x82 1,41 # eacute
-char234 1853 2 0x88 1,43 # ecircumflex
-char235 1853 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 1853 2 0x148 1,87 # eth
-char241 1853 2 0xa4 1,57 # ntilde
-char242 1853 2 0x95 1,65 # ograve
-char243 1853 2 0xa2 1,59 # oacute
-char244 1853 2 0x93 1,61 # ocircumflex
-char245 1853 2 0x172 1,83 # otilde
-char246 1853 2 0x94 1,63 # odieresis
-char247 1947 0 0xf6 6,8 # divide
-char248 2037 0 0x145 1,81 # oslash
-char249 1853 2 0x97 1,73 # ugrave
-char250 1853 2 0xa3 1,67 # uacute
-char251 1853 2 0x96 1,69 # ucircumflex
-char252 1853 2 0x81 1,71 # udieresis
-char253 1667 3 0x175 1,85 # yacute
-char254 1853 3 0x143 1,89 # thorn
-char255 1667 3 0x98 1,75 # ydieresis
--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"
-or 867 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HNB b/contrib/groff/devlbp/HNB
deleted file mode 100644
index c5d8d33..0000000
--- a/contrib/groff/devlbp/HNB
+++ /dev/null
@@ -1,491 +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 # "
-char173 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 # "
-char161 273 1 0xad 4,7 # exclamdown
-char162 456 2 0x9b 4,19 # cent
-char163 456 2 0x9c 4,11 # sterling
-char164 456 2 0x12f 4,24 # currency
-char165 456 2 0x9d 4,12 # yen
-char166 230 2 0x7c 0,124 # brokenbar
-char167 456 2 0x15 4,6 # section
-char168 273 2 0x122 1,7 # dieresis
-char169 604 2 0x154 4,23 # copyright
-char170 303 2 0xa6 4,15 # ordfeminine
-char171 456 0 0xae 4,9 # guillemotleft
-char172 479 0 0xaa 6,20 # logicalnot
-char173 456 0 0x132 4,33 # hyphen
-char174 604 2 0x155 4,22 # registered
-char175 500 2 0x2d 6,0 # macron
-char176 328 2 0xf8 6,36 # degree
-char177 479 0 0xf1 6,1 # plusminus
-char178 273 2 0xfd 4,20 # twosuperior
-char179 273 2 0x14d 4,26 # threesuperior
-char180 273 2 0x120 1,6 # acute "acute accent"
-char181 501 1 0xe6 8,25 # mu
-char182 456 2 0x14 4,5 # paragraph
-char183 240 0 0xfa 6,32 # periodcentered
-char184 273 0 0x139 1,17 # cedilla
-char185 273 2 0x156 4,78 # onesuperior
-char186 299 2 0xa7 4,16 # ordmasculine
-char187 456 0 0xaf 4,10 # guillemotright
-char188 684 2 0xac 4,18 # onequarter
-char189 684 2 0xab 4,17 # onehalf
-char190 684 2 0x12e 4,25 # threequarters
-char191 501 1 0xa8 4,8 # questiondown
-char192 501 2 0x15c 1,32 # Agrave
-char193 501 2 0x15a 1,26 # Aacute
-char194 501 2 0x15b 1,28 # Acircumflex
-char195 501 2 0x28e 1,76 # Atilde
-char196 592 2 0x8e 1,30 # Adieresis
-char197 592 2 0x8f 1,34 # Aring
-char198 820 2 0x92 1,36 # AE
-char199 592 2 0x80 1,38 # Ccedilla
-char200 592 2 0x160 1,46 # Egrave
-char201 547 2 0x90 1,40 # Eacute
-char202 547 2 0x15e 1,42 # Ecircumflex
-char203 547 2 0x15f 1,44 # Edieresis
-char204 547 2 0x164 1,54 # Igrave
-char205 547 2 0x161 1,48 # Iacute
-char206 547 2 0x162 1,50 # Icircumflex
-char207 547 2 0x163 1,52 # Idieresis
-char208 592 2 0x13d 1,78 # Eth
-char209 592 2 0xa5 1,56 # Ntilde
-char210 592 2 0x167 1,64 # Ograve
-char211 592 2 0x165 1,58 # Oacute
-char212 592 2 0x166 1,60 # Ocircumflex
-char213 592 2 0x168 1,82 # Otilde
-char214 638 2 0x99 1,62 # Odieresis
-char215 479 0 0x157 6,39 # multiply
-char216 638 2 0x140 1,80 # Oslash
-char217 638 2 0x16c 1,72 # Ugrave
-char218 638 2 0x16a 1,66 # Uacute
-char219 638 2 0x16b 1,68 # Ucircumflex
-char220 592 2 0x9a 1,70 # Udieresis
-char221 592 2 0x16f 1,84 # Yacute
-char222 547 2 0x13e 1,88 # Thorn
-char223 501 2 0x147 1,23 # germandbls
-char224 456 2 0x85 1,33 # agrave
-char225 456 2 0xa0 1,27 # aacute
-char226 456 2 0x83 1,29 # acircumflex
-char227 456 2 0x284 1,93 # atilde
-char228 456 2 0x84 1,31 # adieresis
-char229 456 2 0x86 1,35 # aring
-char230 729 0 0x91 1,37 # ae
-char231 456 0 0x87 1,39 # ccedilla
-char232 456 2 0x8a 1,47 # egrave
-char233 456 2 0x82 1,41 # eacute
-char234 456 2 0x88 1,43 # ecircumflex
-char235 456 2 0x89 1,45 # edieresis
-char236 228 2 0x8d 1,55 # igrave
-char237 228 2 0xa1 1,49 # iacute
-char238 228 2 0x8c 1,51 # icircumflex
-char239 228 2 0x8b 1,53 # idieresis
-char240 501 2 0x148 1,87 # eth
-char241 501 2 0xa4 1,57 # ntilde
-char242 501 2 0x95 1,65 # ograve
-char243 501 2 0xa2 1,59 # oacute
-char244 501 2 0x93 1,61 # ocircumflex
-char245 501 2 0x172 1,83 # otilde
-char246 501 2 0x94 1,63 # odieresis
-char247 479 0 0xf6 6,8 # divide
-char248 501 0 0x145 1,81 # oslash
-char249 501 2 0x97 1,73 # ugrave
-char250 501 2 0xa3 1,67 # uacute
-char251 501 2 0x96 1,69 # ucircumflex
-char252 501 2 0x81 1,71 # udieresis
-char253 501 3 0x175 1,85 # yacute
-char254 501 3 0x143 1,89 # thorn
-char255 456 3 0x98 1,75 # ydieresis
--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"
-or 230 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HNBI b/contrib/groff/devlbp/HNBI
deleted file mode 100644
index 14bd4e3..0000000
--- a/contrib/groff/devlbp/HNBI
+++ /dev/null
@@ -1,491 +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 # "
-char173 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 # "
-char161 273 1 0xad 4,7 # exclamdown
-char162 456 2 0x9b 4,19 # cent
-char163 456 2 0x9c 4,11 # sterling
-char164 456 2 0x12f 4,24 # currency
-char165 456 2 0x9d 4,12 # yen
-char166 230 2 0x7c 0,124 # brokenbar
-char167 456 2 0x15 4,6 # section
-char168 273 2 0x122 1,7 # dieresis
-char169 604 2 0x154 4,23 # copyright
-char170 303 2 0xa6 4,15 # ordfeminine
-char171 456 0 0xae 4,9 # guillemotleft
-char172 479 0 0xaa 6,20 # logicalnot
-char173 456 0 0x132 4,33 # hyphen
-char174 604 2 0x155 4,22 # registered
-char175 500 2 0x2d 6,0 # macron
-char176 328 2 0xf8 6,36 # degree
-char177 479 0 0xf1 6,1 # plusminus
-char178 273 2 0xfd 4,20 # twosuperior
-char179 273 2 0x14d 4,26 # threesuperior
-char180 273 2 0x120 1,6 # acute "acute accent"
-char181 501 1 0xe6 8,25 # mu
-char182 456 2 0x14 4,5 # paragraph
-char183 240 0 0xfa 6,32 # periodcentered
-char184 273 0 0x139 1,17 # cedilla
-char185 273 2 0x156 4,78 # onesuperior
-char186 299 2 0xa7 4,16 # ordmasculine
-char187 456 0 0xaf 4,10 # guillemotright
-char188 684 2 0xac 4,18 # onequarter
-char189 684 2 0xab 4,17 # onehalf
-char190 684 2 0x12e 4,25 # threequarters
-char191 501 1 0xa8 4,8 # questiondown
-char192 501 2 0x15c 1,32 # Agrave
-char193 501 2 0x15a 1,26 # Aacute
-char194 501 2 0x15b 1,28 # Acircumflex
-char195 501 2 0x28e 1,76 # Atilde
-char196 592 2 0x8e 1,30 # Adieresis
-char197 592 2 0x8f 1,34 # Aring
-char198 820 2 0x92 1,36 # AE
-char199 592 2 0x80 1,38 # Ccedilla
-char200 592 2 0x160 1,46 # Egrave
-char201 547 2 0x90 1,40 # Eacute
-char202 547 2 0x15e 1,42 # Ecircumflex
-char203 547 2 0x15f 1,44 # Edieresis
-char204 547 2 0x164 1,54 # Igrave
-char205 547 2 0x161 1,48 # Iacute
-char206 547 2 0x162 1,50 # Icircumflex
-char207 547 2 0x163 1,52 # Idieresis
-char208 592 2 0x13d 1,78 # Eth
-char209 592 2 0xa5 1,56 # Ntilde
-char210 592 2 0x167 1,64 # Ograve
-char211 592 2 0x165 1,58 # Oacute
-char212 592 2 0x166 1,60 # Ocircumflex
-char213 592 2 0x168 1,82 # Otilde
-char214 638 2 0x99 1,62 # Odieresis
-char215 479 0 0x157 6,39 # multiply
-char216 638 2 0x140 1,80 # Oslash
-char217 638 2 0x16c 1,72 # Ugrave
-char218 638 2 0x16a 1,66 # Uacute
-char219 638 2 0x16b 1,68 # Ucircumflex
-char220 592 2 0x9a 1,70 # Udieresis
-char221 592 2 0x16f 1,84 # Yacute
-char222 547 2 0x13e 1,88 # Thorn
-char223 501 2 0x147 1,23 # germandbls
-char224 456 2 0x85 1,33 # agrave
-char225 456 2 0xa0 1,27 # aacute
-char226 456 2 0x83 1,29 # acircumflex
-char227 456 2 0x284 1,93 # atilde
-char228 456 2 0x84 1,31 # adieresis
-char229 456 2 0x86 1,35 # aring
-char230 729 0 0x91 1,37 # ae
-char231 456 0 0x87 1,39 # ccedilla
-char232 456 2 0x8a 1,47 # egrave
-char233 456 2 0x82 1,41 # eacute
-char234 456 2 0x88 1,43 # ecircumflex
-char235 456 2 0x89 1,45 # edieresis
-char236 228 2 0x8d 1,55 # igrave
-char237 228 2 0xa1 1,49 # iacute
-char238 228 2 0x8c 1,51 # icircumflex
-char239 228 2 0x8b 1,53 # idieresis
-char240 501 2 0x148 1,87 # eth
-char241 501 2 0xa4 1,57 # ntilde
-char242 501 2 0x95 1,65 # ograve
-char243 501 2 0xa2 1,59 # oacute
-char244 501 2 0x93 1,61 # ocircumflex
-char245 501 2 0x172 1,83 # otilde
-char246 501 2 0x94 1,63 # odieresis
-char247 479 0 0xf6 6,8 # divide
-char248 501 0 0x145 1,81 # oslash
-char249 501 2 0x97 1,73 # ugrave
-char250 501 2 0xa3 1,67 # uacute
-char251 501 2 0x96 1,69 # ucircumflex
-char252 501 2 0x81 1,71 # udieresis
-char253 501 3 0x175 1,85 # yacute
-char254 501 3 0x143 1,89 # thorn
-char255 456 3 0x98 1,75 # ydieresis
--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"
-or 230 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HNI b/contrib/groff/devlbp/HNI
deleted file mode 100644
index 578faf7..0000000
--- a/contrib/groff/devlbp/HNI
+++ /dev/null
@@ -1,491 +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 # "
-char173 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 # "
-char161 273 1 0xad 4,7 # exclamdown
-char162 456 2 0x9b 4,19 # cent
-char163 456 2 0x9c 4,11 # sterling
-char164 456 2 0x12f 4,24 # currency
-char165 456 2 0x9d 4,12 # yen
-char166 213 2 0x7c 0,124 # brokenbar
-char167 456 2 0x15 4,6 # section
-char168 273 2 0x122 1,7 # dieresis
-char169 604 2 0x154 4,23 # copyright
-char170 303 2 0xa6 4,15 # ordfeminine
-char171 456 0 0xae 4,9 # guillemotleft
-char172 479 0 0xaa 6,20 # logicalnot
-char173 456 0 0x132 4,33 # hyphen
-char174 604 2 0x155 4,22 # registered
-char175 500 2 0x2d 6,0 # macron
-char176 328 2 0xf8 6,36 # degree
-char177 479 0 0xf1 6,1 # plusminus
-char178 273 2 0xfd 4,20 # twosuperior
-char179 273 2 0x14d 4,26 # threesuperior
-char180 273 2 0x120 1,6 # acute "acute accent"
-char181 456 1 0xe6 8,25 # mu
-char182 440 2 0x14 4,5 # paragraph
-char183 240 0 0xfa 6,32 # periodcentered
-char184 273 0 0x139 1,17 # cedilla
-char185 273 2 0x156 4,78 # onesuperior
-char186 299 2 0xa7 4,16 # ordmasculine
-char187 456 0 0xaf 4,10 # guillemotright
-char188 684 2 0xac 4,18 # onequarter
-char189 684 2 0xab 4,17 # onehalf
-char190 684 2 0x12e 4,25 # threequarters
-char191 501 1 0xa8 4,8 # questiondown
-char192 501 2 0x15c 1,32 # Agrave
-char193 501 2 0x15a 1,26 # Aacute
-char194 501 2 0x15b 1,28 # Acircumflex
-char195 501 2 0x28e 1,76 # Atilde
-char196 547 2 0x8e 1,30 # Adieresis
-char197 547 2 0x8f 1,34 # Aring
-char198 820 2 0x92 1,36 # AE
-char199 592 2 0x80 1,38 # Ccedilla
-char200 592 2 0x160 1,46 # Egrave
-char201 547 2 0x90 1,40 # Eacute
-char202 547 2 0x15e 1,42 # Ecircumflex
-char203 547 2 0x15f 1,44 # Edieresis
-char204 547 2 0x164 1,54 # Igrave
-char205 547 2 0x161 1,48 # Iacute
-char206 547 2 0x162 1,50 # Icircumflex
-char207 547 2 0x163 1,52 # Idieresis
-char208 592 2 0x13d 1,78 # Eth
-char209 592 2 0xa5 1,56 # Ntilde
-char210 592 2 0x167 1,64 # Ograve
-char211 592 2 0x165 1,58 # Oacute
-char212 592 2 0x166 1,60 # Ocircumflex
-char213 592 2 0x168 1,82 # Otilde
-char214 638 2 0x99 1,62 # Odieresis
-char215 479 0 0x157 6,39 # multiply
-char216 638 2 0x140 1,80 # Oslash
-char217 638 2 0x16c 1,72 # Ugrave
-char218 638 2 0x16a 1,66 # Uacute
-char219 638 2 0x16b 1,68 # Ucircumflex
-char220 592 2 0x9a 1,70 # Udieresis
-char221 592 2 0x16f 1,84 # Yacute
-char222 547 2 0x13e 1,88 # Thorn
-char223 501 2 0x147 1,23 # germandbls
-char224 456 2 0x85 1,33 # agrave
-char225 456 2 0xa0 1,27 # aacute
-char226 456 2 0x83 1,29 # acircumflex
-char227 456 2 0x284 1,93 # atilde
-char228 456 2 0x84 1,31 # adieresis
-char229 456 2 0x86 1,35 # aring
-char230 729 0 0x91 1,37 # ae
-char231 410 0 0x87 1,39 # ccedilla
-char232 456 2 0x8a 1,47 # egrave
-char233 456 2 0x82 1,41 # eacute
-char234 456 2 0x88 1,43 # ecircumflex
-char235 456 2 0x89 1,45 # edieresis
-char236 228 2 0x8d 1,55 # igrave
-char237 228 2 0xa1 1,49 # iacute
-char238 228 2 0x8c 1,51 # icircumflex
-char239 228 2 0x8b 1,53 # idieresis
-char240 456 2 0x148 1,87 # eth
-char241 456 2 0xa4 1,57 # ntilde
-char242 456 2 0x95 1,65 # ograve
-char243 456 2 0xa2 1,59 # oacute
-char244 456 2 0x93 1,61 # ocircumflex
-char245 456 2 0x172 1,83 # otilde
-char246 456 2 0x94 1,63 # odieresis
-char247 479 0 0xf6 6,8 # divide
-char248 501 0 0x145 1,81 # oslash
-char249 456 2 0x97 1,73 # ugrave
-char250 456 2 0xa3 1,67 # uacute
-char251 456 2 0x96 1,69 # ucircumflex
-char252 456 2 0x81 1,71 # udieresis
-char253 456 3 0x175 1,85 # yacute
-char254 456 3 0x143 1,89 # thorn
-char255 410 3 0x98 1,75 # ydieresis
--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"
-or 213 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HNR b/contrib/groff/devlbp/HNR
deleted file mode 100644
index d0e78af..0000000
--- a/contrib/groff/devlbp/HNR
+++ /dev/null
@@ -1,491 +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 # "
-char173 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 # "
-char161 273 1 0xad 4,7 # exclamdown
-char162 456 2 0x9b 4,19 # cent
-char163 456 2 0x9c 4,11 # sterling
-char164 456 2 0x12f 4,24 # currency
-char165 456 2 0x9d 4,12 # yen
-char166 213 2 0x7c 0,124 # brokenbar
-char167 456 2 0x15 4,6 # section
-char168 273 2 0x122 1,7 # dieresis
-char169 604 2 0x154 4,23 # copyright
-char170 303 2 0xa6 4,15 # ordfeminine
-char171 456 0 0xae 4,9 # guillemotleft
-char172 479 0 0xaa 6,20 # logicalnot
-char173 456 0 0x132 4,33 # hyphen
-char174 604 2 0x155 4,22 # registered
-char175 500 2 0x2d 6,0 # macron
-char176 328 2 0xf8 6,36 # degree
-char177 479 0 0xf1 6,1 # plusminus
-char178 273 2 0xfd 4,20 # twosuperior
-char179 273 2 0x14d 4,26 # threesuperior
-char180 273 2 0x120 1,6 # acute "acute accent"
-char181 456 1 0xe6 8,25 # mu
-char182 440 2 0x14 4,5 # paragraph
-char183 240 0 0xfa 6,32 # periodcentered
-char184 273 0 0x139 1,17 # cedilla
-char185 273 2 0x156 4,78 # onesuperior
-char186 299 2 0xa7 4,16 # ordmasculine
-char187 456 0 0xaf 4,10 # guillemotright
-char188 684 2 0xac 4,18 # onequarter
-char189 684 2 0xab 4,17 # onehalf
-char190 684 2 0x12e 4,25 # threequarters
-char191 501 1 0xa8 4,8 # questiondown
-char192 501 2 0x15c 1,32 # Agrave
-char193 501 2 0x15a 1,26 # Aacute
-char194 501 2 0x15b 1,28 # Acircumflex
-char195 501 2 0x28e 1,76 # Atilde
-char196 547 2 0x8e 1,30 # Adieresis
-char197 547 2 0x8f 1,34 # Aring
-char198 820 2 0x92 1,36 # AE
-char199 592 2 0x80 1,38 # Ccedilla
-char200 592 2 0x160 1,46 # Egrave
-char201 547 2 0x90 1,40 # Eacute
-char202 547 2 0x15e 1,42 # Ecircumflex
-char203 547 2 0x15f 1,44 # Edieresis
-char204 547 2 0x164 1,54 # Igrave
-char205 547 2 0x161 1,48 # Iacute
-char206 547 2 0x162 1,50 # Icircumflex
-char207 547 2 0x163 1,52 # Idieresis
-char208 592 2 0x13d 1,78 # Eth
-char209 592 2 0xa5 1,56 # Ntilde
-char210 592 2 0x167 1,64 # Ograve
-char211 592 2 0x165 1,58 # Oacute
-char212 592 2 0x166 1,60 # Ocircumflex
-char213 592 2 0x168 1,82 # Otilde
-char214 638 2 0x99 1,62 # Odieresis
-char215 479 0 0x157 6,39 # multiply
-char216 638 2 0x140 1,80 # Oslash
-char217 638 2 0x16c 1,72 # Ugrave
-char218 638 2 0x16a 1,66 # Uacute
-char219 638 2 0x16b 1,68 # Ucircumflex
-char220 592 2 0x9a 1,70 # Udieresis
-char221 592 2 0x16f 1,84 # Yacute
-char222 547 2 0x13e 1,88 # Thorn
-char223 501 2 0x147 1,23 # germandbls
-char224 456 2 0x85 1,33 # agrave
-char225 456 2 0xa0 1,27 # aacute
-char226 456 2 0x83 1,29 # acircumflex
-char227 456 2 0x284 1,93 # atilde
-char228 456 2 0x84 1,31 # adieresis
-char229 456 2 0x86 1,35 # aring
-char230 729 0 0x91 1,37 # ae
-char231 410 0 0x87 1,39 # ccedilla
-char232 456 2 0x8a 1,47 # egrave
-char233 456 2 0x82 1,41 # eacute
-char234 456 2 0x88 1,43 # ecircumflex
-char235 456 2 0x89 1,45 # edieresis
-char236 228 2 0x8d 1,55 # igrave
-char237 228 2 0xa1 1,49 # iacute
-char238 228 2 0x8c 1,51 # icircumflex
-char239 228 2 0x8b 1,53 # idieresis
-char240 456 2 0x148 1,87 # eth
-char241 456 2 0xa4 1,57 # ntilde
-char242 456 2 0x95 1,65 # ograve
-char243 456 2 0xa2 1,59 # oacute
-char244 456 2 0x93 1,61 # ocircumflex
-char245 456 2 0x172 1,83 # otilde
-char246 456 2 0x94 1,63 # odieresis
-char247 479 0 0xf6 6,8 # divide
-char248 501 0 0x145 1,81 # oslash
-char249 456 2 0x97 1,73 # ugrave
-char250 456 2 0xa3 1,67 # uacute
-char251 456 2 0x96 1,69 # ucircumflex
-char252 456 2 0x81 1,71 # udieresis
-char253 456 3 0x175 1,85 # yacute
-char254 456 3 0x143 1,89 # thorn
-char255 410 3 0x98 1,75 # ydieresis
--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"
-or 213 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/HR b/contrib/groff/devlbp/HR
deleted file mode 100644
index 81cfa96..0000000
--- a/contrib/groff/devlbp/HR
+++ /dev/null
@@ -1,491 +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 # "
-char173 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 # "
-char161 1110 1 0xad 4,7 # exclamdown
-char162 1853 2 0x9b 4,19 # cent
-char163 1853 2 0x9c 4,11 # sterling
-char164 1853 2 0x12f 4,24 # currency
-char165 1853 2 0x9d 4,12 # yen
-char166 867 2 0x7c 0,124 # brokenbar
-char167 1853 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2457 2 0x154 4,23 # copyright
-char170 1233 2 0xa6 4,15 # ordfeminine
-char171 1853 0 0xae 4,9 # guillemotleft
-char172 1947 0 0xaa 6,20 # logicalnot
-char173 1853 0 0x132 4,33 # hyphen
-char174 2457 2 0x155 4,22 # registered
-char175 1947 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1947 0 0xf1 6,1 # plusminus
-char178 1110 2 0xfd 4,20 # twosuperior
-char179 1110 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 1853 1 0xe6 8,25 # mu
-char182 1790 2 0x14 4,5 # paragraph
-char183 927 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1110 2 0x156 4,78 # onesuperior
-char186 1217 2 0xa7 4,16 # ordmasculine
-char187 1853 0 0xaf 4,10 # guillemotright
-char188 2780 2 0xac 4,18 # onequarter
-char189 2780 2 0xab 4,17 # onehalf
-char190 2780 2 0x12e 4,25 # threequarters
-char191 2037 1 0xa8 4,8 # questiondown
-char192 2223 2 0x15c 1,32 # Agrave
-char193 2223 2 0x15a 1,26 # Aacute
-char194 2223 2 0x15b 1,28 # Acircumflex
-char195 2223 2 0x28e 1,76 # Atilde
-char196 2223 2 0x8e 1,30 # Adieresis
-char197 2223 2 0x8f 1,34 # Aring
-char198 3333 2 0x92 1,36 # AE
-char199 2407 2 0x80 1,38 # Ccedilla
-char200 2223 2 0x160 1,46 # Egrave
-char201 2223 2 0x90 1,40 # Eacute
-char202 2223 2 0x15e 1,42 # Ecircumflex
-char203 2223 2 0x15f 1,44 # Edieresis
-char204 927 2 0x164 1,54 # Igrave
-char205 927 2 0x161 1,48 # Iacute
-char206 927 2 0x162 1,50 # Icircumflex
-char207 927 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2593 2 0x167 1,64 # Ograve
-char211 2593 2 0x165 1,58 # Oacute
-char212 2593 2 0x166 1,60 # Ocircumflex
-char213 2593 2 0x168 1,82 # Otilde
-char214 2593 2 0x99 1,62 # Odieresis
-char215 1947 0 0x157 6,39 # multiply
-char216 2593 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2223 2 0x16f 1,84 # Yacute
-char222 2223 2 0x13e 1,88 # Thorn
-char223 2037 2 0x147 1,23 # germandbls
-char224 1853 2 0x85 1,33 # agrave
-char225 1853 2 0xa0 1,27 # aacute
-char226 1853 2 0x83 1,29 # acircumflex
-char227 1853 2 0x284 1,93 # atilde
-char228 1853 2 0x84 1,31 # adieresis
-char229 1853 2 0x86 1,35 # aring
-char230 2963 0 0x91 1,37 # ae
-char231 1667 0 0x87 1,39 # ccedilla
-char232 1853 2 0x8a 1,47 # egrave
-char233 1853 2 0x82 1,41 # eacute
-char234 1853 2 0x88 1,43 # ecircumflex
-char235 1853 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 1853 2 0x148 1,87 # eth
-char241 1853 2 0xa4 1,57 # ntilde
-char242 1853 2 0x95 1,65 # ograve
-char243 1853 2 0xa2 1,59 # oacute
-char244 1853 2 0x93 1,61 # ocircumflex
-char245 1853 2 0x172 1,83 # otilde
-char246 1853 2 0x94 1,63 # odieresis
-char247 1947 0 0xf6 6,8 # divide
-char248 2037 0 0x145 1,81 # oslash
-char249 1853 2 0x97 1,73 # ugrave
-char250 1853 2 0xa3 1,67 # uacute
-char251 1853 2 0x96 1,69 # ucircumflex
-char252 1853 2 0x81 1,71 # udieresis
-char253 1667 3 0x175 1,85 # yacute
-char254 1853 3 0x143 1,89 # thorn
-char255 1667 3 0x98 1,75 # ydieresis
--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"
-or 867 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/Makefile.sub b/contrib/groff/devlbp/Makefile.sub
deleted file mode 100644
index 64d9ebd..0000000
--- a/contrib/groff/devlbp/Makefile.sub
+++ /dev/null
@@ -1,16 +0,0 @@
-DEV=lbp
-LBPPRINT=$(PSPRINT)
-DEVFILES=DESC \
- HB HBI HI HR \
- TB TBI TI TR
-
-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/devlbp/TB b/contrib/groff/devlbp/TB
deleted file mode 100644
index 70a09f2..0000000
--- a/contrib/groff/devlbp/TB
+++ /dev/null
@@ -1,513 +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 # "
-char173 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 # "
-char161 1110 1 0xad 4,7 # exclamdown
-char162 1667 2 0x9b 4,19 # cent
-char163 1667 2 0x9c 4,11 # sterling
-char164 1667 2 0x12f 4,24 # currency
-char165 1667 2 0x9d 4,12 # yen
-char166 733 2 0x7c 0,124 # brokenbar
-char167 1667 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2490 2 0x154 4,23 # copyright
-char170 1000 2 0xa6 4,15 # ordfeminine
-char171 1667 0 0xae 4,9 # guillemotleft
-char172 1900 0 0xaa 6,20 # logicalnot
-char173 1667 0 0x132 4,33 # hyphen
-char174 2490 2 0x155 4,22 # registered
-char175 1900 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1900 0 0xf1 6,1 # plusminus
-char178 1000 2 0xfd 4,20 # twosuperior
-char179 1000 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 1853 1 0xe6 8,25 # mu
-char182 1800 2 0x14 4,5 # paragraph
-char183 833 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1000 2 0x156 4,78 # onesuperior
-char186 1100 2 0xa7 4,16 # ordmasculine
-char187 1667 0 0xaf 4,10 # guillemotright
-char188 2500 2 0xac 4,18 # onequarter
-char189 2500 2 0xab 4,17 # onehalf
-char190 2500 2 0x12e 4,25 # threequarters
-char191 1667 1 0xa8 4,8 # questiondown
-char192 2407 2 0x15c 1,32 # Agrave
-char193 2407 2 0x15a 1,26 # Aacute
-char194 2407 2 0x15b 1,28 # Acircumflex
-char195 2407 2 0x28e 1,76 # Atilde
-char196 2407 2 0x8e 1,30 # Adieresis
-char197 2407 2 0x8f 1,34 # Aring
-char198 3333 2 0x92 1,36 # AE
-char199 2407 2 0x80 1,38 # Ccedilla
-char200 2223 2 0x160 1,46 # Egrave
-char201 2223 2 0x90 1,40 # Eacute
-char202 2223 2 0x15e 1,42 # Ecircumflex
-char203 2223 2 0x15f 1,44 # Edieresis
-char204 1297 2 0x164 1,54 # Igrave
-char205 1297 2 0x161 1,48 # Iacute
-char206 1297 2 0x162 1,50 # Icircumflex
-char207 1297 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2593 2 0x167 1,64 # Ograve
-char211 2593 2 0x165 1,58 # Oacute
-char212 2593 2 0x166 1,60 # Ocircumflex
-char213 2593 2 0x168 1,82 # Otilde
-char214 2593 2 0x99 1,62 # Odieresis
-char215 1900 0 0x157 6,39 # multiply
-char216 2593 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2407 2 0x16f 1,84 # Yacute
-char222 2037 2 0x13e 1,88 # Thorn
-char223 1853 2 0x147 1,23 # germandbls
-char224 1667 2 0x85 1,33 # agrave
-char225 1667 2 0xa0 1,27 # aacute
-char226 1667 2 0x83 1,29 # acircumflex
-char227 1667 2 0x284 1,93 # atilde
-char228 1667 2 0x84 1,31 # adieresis
-char229 1667 2 0x86 1,35 # aring
-char230 2407 0 0x91 1,37 # ae
-char231 1480 0 0x87 1,39 # ccedilla
-char232 1480 2 0x8a 1,47 # egrave
-char233 1480 2 0x82 1,41 # eacute
-char234 1480 2 0x88 1,43 # ecircumflex
-char235 1480 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 1667 2 0x148 1,87 # eth
-char241 1853 2 0xa4 1,57 # ntilde
-char242 1667 2 0x95 1,65 # ograve
-char243 1667 2 0xa2 1,59 # oacute
-char244 1667 2 0x93 1,61 # ocircumflex
-char245 1667 2 0x172 1,83 # otilde
-char246 1667 2 0x94 1,63 # odieresis
-char247 1900 0 0xf6 6,8 # divide
-char248 1667 0 0x145 1,81 # oslash
-char249 1853 2 0x97 1,73 # ugrave
-char250 1853 2 0xa3 1,67 # uacute
-char251 1853 2 0x96 1,69 # ucircumflex
-char252 1853 2 0x81 1,71 # udieresis
-char253 1667 3 0x175 1,85 # yacute
-char254 1853 3 0x143 1,89 # thorn
-char255 1667 3 0x98 1,75 # ydieresis
--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"
-or 733 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
-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/devlbp/TBI b/contrib/groff/devlbp/TBI
deleted file mode 100644
index 1c2f8fe..0000000
--- a/contrib/groff/devlbp/TBI
+++ /dev/null
@@ -1,493 +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 # "
-char173 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 # "
-char161 1297 1 0xad 4,7 # exclamdown
-char162 1667 2 0x9b 4,19 # cent
-char163 1667 2 0x9c 4,11 # sterling
-char164 1667 2 0x12f 4,24 # currency
-char165 1667 2 0x9d 4,12 # yen
-char166 733 2 0x7c 0,124 # brokenbar
-char167 1667 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2490 2 0x154 4,23 # copyright
-char170 887 2 0xa6 4,15 # ordfeminine
-char171 1667 0 0xae 4,9 # guillemotleft
-char172 2020 0 0xaa 6,20 # logicalnot
-char173 1667 0 0x132 4,33 # hyphen
-char174 2490 2 0x155 4,22 # registered
-char175 2020 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1900 0 0xf1 6,1 # plusminus
-char178 1000 2 0xfd 4,20 # twosuperior
-char179 1000 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 1920 1 0xe6 8,25 # mu
-char182 1667 2 0x14 4,5 # paragraph
-char183 833 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1000 2 0x156 4,78 # onesuperior
-char186 1000 2 0xa7 4,16 # ordmasculine
-char187 1667 0 0xaf 4,10 # guillemotright
-char188 2500 2 0xac 4,18 # onequarter
-char189 2500 2 0xab 4,17 # onehalf
-char190 2500 2 0x12e 4,25 # threequarters
-char191 1667 1 0xa8 4,8 # questiondown
-char192 2223 2 0x15c 1,32 # Agrave
-char193 2223 2 0x15a 1,26 # Aacute
-char194 2223 2 0x15b 1,28 # Acircumflex
-char195 2223 2 0x28e 1,76 # Atilde
-char196 2223 2 0x8e 1,30 # Adieresis
-char197 2223 2 0x8f 1,34 # Aring
-char198 3147 2 0x92 1,36 # AE
-char199 2223 2 0x80 1,38 # Ccedilla
-char200 2223 2 0x160 1,46 # Egrave
-char201 2223 2 0x90 1,40 # Eacute
-char202 2223 2 0x15e 1,42 # Ecircumflex
-char203 2223 2 0x15f 1,44 # Edieresis
-char204 1297 2 0x164 1,54 # Igrave
-char205 1297 2 0x161 1,48 # Iacute
-char206 1297 2 0x162 1,50 # Icircumflex
-char207 1297 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2407 2 0x167 1,64 # Ograve
-char211 2407 2 0x165 1,58 # Oacute
-char212 2407 2 0x166 1,60 # Ocircumflex
-char213 2407 2 0x168 1,82 # Otilde
-char214 2407 2 0x99 1,62 # Odieresis
-char215 1900 0 0x157 6,39 # multiply
-char216 2407 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2037 2 0x16f 1,84 # Yacute
-char222 2037 2 0x13e 1,88 # Thorn
-char223 1667 2 0x147 1,23 # germandbls
-char224 1667 2 0x85 1,33 # agrave
-char225 1667 2 0xa0 1,27 # aacute
-char226 1667 2 0x83 1,29 # acircumflex
-char227 1667 2 0x284 1,93 # atilde
-char228 1667 2 0x84 1,31 # adieresis
-char229 1667 2 0x86 1,35 # aring
-char230 2407 0 0x91 1,37 # ae
-char231 1480 0 0x87 1,39 # ccedilla
-char232 1480 2 0x8a 1,47 # egrave
-char233 1480 2 0x82 1,41 # eacute
-char234 1480 2 0x88 1,43 # ecircumflex
-char235 1480 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 1667 2 0x148 1,87 # eth
-char241 1853 2 0xa4 1,57 # ntilde
-char242 1667 2 0x95 1,65 # ograve
-char243 1667 2 0xa2 1,59 # oacute
-char244 1667 2 0x93 1,61 # ocircumflex
-char245 1667 2 0x172 1,83 # otilde
-char246 1667 2 0x94 1,63 # odieresis
-char247 1900 0 0xf6 6,8 # divide
-char248 1667 0 0x145 1,81 # oslash
-char249 1853 2 0x97 1,73 # ugrave
-char250 1853 2 0xa3 1,67 # uacute
-char251 1853 2 0x96 1,69 # ucircumflex
-char252 1853 2 0x81 1,71 # udieresis
-char253 1480 3 0x175 1,85 # yacute
-char254 1667 3 0x143 1,89 # thorn
-char255 1480 3 0x98 1,75 # ydieresis
--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"
-or 733 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
diff --git a/contrib/groff/devlbp/TI b/contrib/groff/devlbp/TI
deleted file mode 100644
index 7de08bc..0000000
--- a/contrib/groff/devlbp/TI
+++ /dev/null
@@ -1,521 +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 # "
-char173 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 # "
-char161 1297 1 0xad 4,7 # exclamdown
-char162 1667 2 0x9b 4,19 # cent
-char163 1667 2 0x9c 4,11 # sterling
-char164 1667 2 0x12f 4,24 # currency
-char165 1667 2 0x9d 4,12 # yen
-char166 917 2 0x7c 0,124 # brokenbar
-char167 1667 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2533 2 0x154 4,23 # copyright
-char170 920 2 0xa6 4,15 # ordfeminine
-char171 1667 0 0xae 4,9 # guillemotleft
-char172 2250 0 0xaa 6,20 # logicalnot
-char173 1667 0 0x132 4,33 # hyphen
-char174 2533 2 0x155 4,22 # registered
-char175 2250 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 2250 0 0xf1 6,1 # plusminus
-char178 1000 2 0xfd 4,20 # twosuperior
-char179 1000 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 1667 1 0xe6 8,25 # mu
-char182 1743 2 0x14 4,5 # paragraph
-char183 833 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1000 2 0x156 4,78 # onesuperior
-char186 1033 2 0xa7 4,16 # ordmasculine
-char187 1667 0 0xaf 4,10 # guillemotright
-char188 2500 2 0xac 4,18 # onequarter
-char189 2500 2 0xab 4,17 # onehalf
-char190 2500 2 0x12e 4,25 # threequarters
-char191 1667 1 0xa8 4,8 # questiondown
-char192 2037 2 0x15c 1,32 # Agrave
-char193 2037 2 0x15a 1,26 # Aacute
-char194 2037 2 0x15b 1,28 # Acircumflex
-char195 2037 2 0x28e 1,76 # Atilde
-char196 2037 2 0x8e 1,30 # Adieresis
-char197 2037 2 0x8f 1,34 # Aring
-char198 2963 2 0x92 1,36 # AE
-char199 2223 2 0x80 1,38 # Ccedilla
-char200 2037 2 0x160 1,46 # Egrave
-char201 2037 2 0x90 1,40 # Eacute
-char202 2037 2 0x15e 1,42 # Ecircumflex
-char203 2037 2 0x15f 1,44 # Edieresis
-char204 1110 2 0x164 1,54 # Igrave
-char205 1110 2 0x161 1,48 # Iacute
-char206 1110 2 0x162 1,50 # Icircumflex
-char207 1110 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2223 2 0xa5 1,56 # Ntilde
-char210 2407 2 0x167 1,64 # Ograve
-char211 2407 2 0x165 1,58 # Oacute
-char212 2407 2 0x166 1,60 # Ocircumflex
-char213 2407 2 0x168 1,82 # Otilde
-char214 2407 2 0x99 1,62 # Odieresis
-char215 2250 0 0x157 6,39 # multiply
-char216 2407 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 1853 2 0x16f 1,84 # Yacute
-char222 2037 2 0x13e 1,88 # Thorn
-char223 1667 2 0x147 1,23 # germandbls
-char224 1667 2 0x85 1,33 # agrave
-char225 1667 2 0xa0 1,27 # aacute
-char226 1667 2 0x83 1,29 # acircumflex
-char227 1667 2 0x284 1,93 # atilde
-char228 1667 2 0x84 1,31 # adieresis
-char229 1667 2 0x86 1,35 # aring
-char230 2223 0 0x91 1,37 # ae
-char231 1480 0 0x87 1,39 # ccedilla
-char232 1480 2 0x8a 1,47 # egrave
-char233 1480 2 0x82 1,41 # eacute
-char234 1480 2 0x88 1,43 # ecircumflex
-char235 1480 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 1667 2 0x148 1,87 # eth
-char241 1667 2 0xa4 1,57 # ntilde
-char242 1667 2 0x95 1,65 # ograve
-char243 1667 2 0xa2 1,59 # oacute
-char244 1667 2 0x93 1,61 # ocircumflex
-char245 1667 2 0x172 1,83 # otilde
-char246 1667 2 0x94 1,63 # odieresis
-char247 2250 0 0xf6 6,8 # divide
-char248 1667 0 0x145 1,81 # oslash
-char249 1667 2 0x97 1,73 # ugrave
-char250 1667 2 0xa3 1,67 # uacute
-char251 1667 2 0x96 1,69 # ucircumflex
-char252 1667 2 0x81 1,71 # udieresis
-char253 1480 3 0x175 1,85 # yacute
-char254 1667 3 0x143 1,89 # thorn
-char255 1480 3 0x98 1,75 # ydieresis
--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"
-or 917 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
-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/devlbp/TR b/contrib/groff/devlbp/TR
deleted file mode 100644
index 9a641df..0000000
--- a/contrib/groff/devlbp/TR
+++ /dev/null
@@ -1,517 +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 # "
-char173 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 # "
-char161 1110 1 0xad 4,7 # exclamdown
-char162 1667 2 0x9b 4,19 # cent
-char163 1667 2 0x9c 4,11 # sterling
-char164 1667 2 0x12f 4,24 # currency
-char165 1667 2 0x9d 4,12 # yen
-char166 667 2 0x7c 0,124 # brokenbar
-char167 1667 2 0x15 4,6 # section
-char168 1110 2 0x122 1,7 # dieresis
-char169 2533 2 0x154 4,23 # copyright
-char170 920 2 0xa6 4,15 # ordfeminine
-char171 1667 0 0xae 4,9 # guillemotleft
-char172 1880 0 0xaa 6,20 # logicalnot
-char173 1667 0 0x132 4,33 # hyphen
-char174 2533 2 0x155 4,22 # registered
-char175 1880 2 0x2d 6,0 # macron
-char176 1333 2 0xf8 6,36 # degree
-char177 1880 0 0xf1 6,1 # plusminus
-char178 1000 2 0xfd 4,20 # twosuperior
-char179 1000 2 0x14d 4,26 # threesuperior
-char180 1110 2 0x120 1,6 # acute "acute accent"
-char181 1667 1 0xe6 8,25 # mu
-char182 1510 2 0x14 4,5 # paragraph
-char183 833 0 0xfa 6,32 # periodcentered
-char184 1110 0 0x139 1,17 # cedilla
-char185 1000 2 0x156 4,78 # onesuperior
-char186 1033 2 0xa7 4,16 # ordmasculine
-char187 1667 0 0xaf 4,10 # guillemotright
-char188 2500 2 0xac 4,18 # onequarter
-char189 2500 2 0xab 4,17 # onehalf
-char190 2500 2 0x12e 4,25 # threequarters
-char191 1480 1 0xa8 4,8 # questiondown
-char192 2407 2 0x15c 1,32 # Agrave
-char193 2407 2 0x15a 1,26 # Aacute
-char194 2407 2 0x15b 1,28 # Acircumflex
-char195 2407 2 0x28e 1,76 # Atilde
-char196 2407 2 0x8e 1,30 # Adieresis
-char197 2407 2 0x8f 1,34 # Aring
-char198 2963 2 0x92 1,36 # AE
-char199 2223 2 0x80 1,38 # Ccedilla
-char200 2037 2 0x160 1,46 # Egrave
-char201 2037 2 0x90 1,40 # Eacute
-char202 2037 2 0x15e 1,42 # Ecircumflex
-char203 2037 2 0x15f 1,44 # Edieresis
-char204 1110 2 0x164 1,54 # Igrave
-char205 1110 2 0x161 1,48 # Iacute
-char206 1110 2 0x162 1,50 # Icircumflex
-char207 1110 2 0x163 1,52 # Idieresis
-char208 2407 2 0x13d 1,78 # Eth
-char209 2407 2 0xa5 1,56 # Ntilde
-char210 2407 2 0x167 1,64 # Ograve
-char211 2407 2 0x165 1,58 # Oacute
-char212 2407 2 0x166 1,60 # Ocircumflex
-char213 2407 2 0x168 1,82 # Otilde
-char214 2407 2 0x99 1,62 # Odieresis
-char215 1880 0 0x157 6,39 # multiply
-char216 2407 2 0x140 1,80 # Oslash
-char217 2407 2 0x16c 1,72 # Ugrave
-char218 2407 2 0x16a 1,66 # Uacute
-char219 2407 2 0x16b 1,68 # Ucircumflex
-char220 2407 2 0x9a 1,70 # Udieresis
-char221 2407 2 0x16f 1,84 # Yacute
-char222 1853 2 0x13e 1,88 # Thorn
-char223 1667 2 0x147 1,23 # germandbls
-char224 1480 2 0x85 1,33 # agrave
-char225 1480 2 0xa0 1,27 # aacute
-char226 1480 2 0x83 1,29 # acircumflex
-char227 1480 2 0x284 1,93 # atilde
-char228 1480 2 0x84 1,31 # adieresis
-char229 1480 2 0x86 1,35 # aring
-char230 2223 0 0x91 1,37 # ae
-char231 1480 0 0x87 1,39 # ccedilla
-char232 1480 2 0x8a 1,47 # egrave
-char233 1480 2 0x82 1,41 # eacute
-char234 1480 2 0x88 1,43 # ecircumflex
-char235 1480 2 0x89 1,45 # edieresis
-char236 927 2 0x8d 1,55 # igrave
-char237 927 2 0xa1 1,49 # iacute
-char238 927 2 0x8c 1,51 # icircumflex
-char239 927 2 0x8b 1,53 # idieresis
-char240 1667 2 0x148 1,87 # eth
-char241 1667 2 0xa4 1,57 # ntilde
-char242 1667 2 0x95 1,65 # ograve
-char243 1667 2 0xa2 1,59 # oacute
-char244 1667 2 0x93 1,61 # ocircumflex
-char245 1667 2 0x172 1,83 # otilde
-char246 1667 2 0x94 1,63 # odieresis
-char247 1880 0 0xf6 6,8 # divide
-char248 1667 0 0x145 1,81 # oslash
-char249 1667 2 0x97 1,73 # ugrave
-char250 1667 2 0xa3 1,67 # uacute
-char251 1667 2 0x96 1,69 # ucircumflex
-char252 1667 2 0x81 1,71 # udieresis
-char253 1667 3 0x175 1,85 # yacute
-char254 1667 3 0x143 1,89 # thorn
-char255 1667 3 0x98 1,75 # ydieresis
--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"
-or 667 0 0x3f4 0,124 # bar
-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 # notpropersuperset
-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
-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
-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/devlj4/ALBB b/contrib/groff/devlj4/ALBB
deleted file mode 100644
index 9c0c71f..0000000
--- a/contrib/groff/devlj4/ALBB
+++ /dev/null
@@ -1,790 +0,0 @@
-name ALBB
-spacewidth 9759
-pcltypeface 4362
-pclproportional 1
-pclweight 4
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2925
-P . -4389
-P , -4389
-V A -3414
-A V -3414
-T o -3414
-T r -3414
-T c -3414
-T e -3414
-T d -3414
-T s -3414
-T y -3414
-T a -3414
-T w -3414
-T u -3414
-L T -2925
-L Y -2925
-Y o -2925
-Y e -2925
-Y a -2925
-A W -2925
-W A -2925
-T A -3414
-V o -2925
-V e -2925
-V a -2439
-Y A -2925
-F A -1950
-F . -3903
-F , -3903
-A T -3414
-A Y -2925
-v . -2439
-v , -2439
-y . -2439
-y , -2439
-T . -3414
-T , -3414
-L W -2925
-P A -2439
-V . -3903
-V , -3903
-Y . -2925
-Y , -2925
-W o -2439
-W e -2439
-W a -1950
-W . -2925
-W , -2925
-r . -2925
-r , -2925
-w . -2439
-w , -2439
-Y u -1950
-A v -1461
-A y -1461
-A w -1461
-o . -975
-o , -975
-p . -1950
-p , -1950
-e . -975
-e , -975
-b . -1950
-b , -1950
-O T -2439
-O V -1950
-O Y -2439
-O . -2439
-O , -2439
-L y -975
-L O -975
-L G -486
-L C -486
-L Q -486
-P J -486
-V y -1461
-V u -1461
-V O -1950
-V G -1461
-V C -1461
-V Q -1461
-D T -2439
-D V -1461
-D Y -1950
-D . -2439
-D , -2439
-Y O -2439
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -975
-F e -975
-F a -975
-O A -1461
-O W -1461
-L U -486
-R T -1461
-R V -1461
-R Y -1461
-R W -1461
-G T -486
-P o -1461
-P g -975
-P e -1461
-P a -975
-D A -975
-D W -975
-B T -1950
-B Y -1950
-B . -1950
-B , -1950
-A O -1461
-A G -975
-A C -975
-A U -975
-A Q -975
-W r -975
-W y -975
-W u -975
-W O -1461
-W G -975
-W C -975
-W Q -975
-U A -975
-U . -1950
-U , -1950
-Q A -975
-Q W -975
-f . -486
-f , -486
-T O -2439
-T G -2439
-T C -2439
-T Q -2439
-O X -1950
-L o -486
-L e -486
-L q -486
-G V -486
-G Y -486
-G W -486
-G . -486
-G , -486
-P T -486
-P V -486
-P Y -486
-D X -1461
-B V -1461
-B X -1461
-B A -975
-B W -975
-S . -1461
-S , -1461
-F O -486
-X o -1461
-X e -1461
-X y -1461
-X O -1950
-X G -1461
-X C -1461
-X Q -1461
-A o -975
-A e -975
-Q X -1461
-K o -975
-K e -975
-K y -975
-K w -975
-K O -1461
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -486
-o x -486
-o w -486
-h v -486
-h y -486
-m v -486
-m y -486
-r g -975
-g . -975
-g , -975
-p v -486
-p y -486
-p x -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -486
-b y -486
-b w -486
-s . -975
-s , -975
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -486
-x c -486
-x e -486
-x d -486
-x q -486
-a v -486
-a y -486
-a w -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T S -1461
-R o -975
-R y -975
-R O -1461
-R G -975
-R C -975
-R U -975
-R Q -975
-G X -486
-G A -486
-P s -975
-P Z -486
-P X -486
-P W -486
-V S -1461
-S A -975
-Y S -1461
-X u -1461
-A t -975
-A c -975
-A d -975
-A u -975
-A q -975
-W S -975
-K c -975
-K u -975
-h w -486
-m w -486
-r o -975
-r c -975
-r e -975
-r d -975
-r a -975
-r q -975
-g g -486
-p w -486
-v e -486
-v s -486
-e x -486
-e w -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-w e -486
-w s -486
-k o -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k w -486
-k q -486
-O Z -975
-O J -975
-L J -486
-R e -975
-R u -975
-G Z -486
-P O -486
-E O -486
-Z o -486
-Z e -486
-Z d -486
-Z y -486
-Z w -486
-Z u -486
-Z O -975
-Z G -486
-Z C -486
-Z Q -486
-D Z -486
-D J -486
-B Z -486
-B J -486
-A J -486
-J O -486
-K J -486
-t o -486
-t c -486
-t e -486
-t d -486
-t q -486
-o z -486
-r s -975
-g o -486
-g c -486
-g e -486
-g d -486
-g s -486
-g a -486
-g q -486
-p z -486
-e z -486
-z o -486
-z c -486
-z e -486
-z d -486
-z q -486
-b z -486
-k t -486
-k u -486
-O g -486
-O j -486
-R J -486
-G J -486
-C O -486
-B O -486
-U O -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -975
-L ' -975
-T char173 -3414
-T hy -3414
-T - -3414
-T en -3414
-T em -3414
-A cq -1461
-A ' -1461
-char173 T -3414
-hy T -3414
-- T -3414
-en T -3414
-em T -3414
-Y char173 -1950
-Y hy -1950
-Y - -1950
-Y en -1950
-Y em -1950
-p cq -486
-p ' -486
-e cq -486
-e ' -486
-b cq -486
-b ' -486
-a cq -486
-a ' -486
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -486
-h ' -486
-m cq -486
-m ' -486
-R cq -975
-R ' -975
-W char173 -975
-W hy -975
-W - -975
-W en -975
-W em -975
-cq d -1950
-' d -1950
-L char173 -486
-L hy -486
-L - -486
-L en -486
-L em -486
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -975
-A hy -975
-A - -975
-A en -975
-A em -975
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-K cq -486
-K ' -486
-k cq -486
-k ' -486
-O cq -486
-O ' -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-charset
-! 9759,20130,300 2 3617
-dq 15126,20130 2 3618
-" "
-sh 17565,20430,300 2 3619
-# "
-Do 17565,21630,2370 2 3620
-$ "
-% 25857,20430,300 2 3621
-& 23907,17037,300 0 3622
-cq 9759,20130 2 51751
-' "
-( 13173,20130,4365 3 3624
-) 13173,20130,4365 3 3625
-* 17565,20130 2 3626
-+ 25857,15465 0 3627
-, 9759,5025,3885 0 3628
-char173 9759,10515 0 3629
-hy "
-- "
-. 9759,5430,300 0 3630
-sl 13173,20130 2 3631
-/ "
-0 17565,20430,300 2 3632
-1 17565,20430 2 3633
-2 17565,20430 2 3634
-3 17565,20130,300 2 3635
-4 17565,20130 2 3636
-5 17565,20130,300 2 3637
-6 17565,20130,300 2 3638
-7 17565,20130 2 3639
-8 17565,20430,300 2 3640
-9 17565,20430 2 3641
-: 9759,14376,300 0 3642
-; 9759,14376,3885 0 3643
-< 26346,16068 0 3644
-= 25857,13644 0 3645
-> 26346,16068 0 3646
-? 12684,20430,300 2 3647
-at 25857,21057,2679 2 3648
-@ "
-A 20490,20130 2 3649
-B 18540,20130 2 3650
-C 19029,20430,300 2 3651
-D 20490,20130 2 3652
-E 16101,20130 2 3653
-F 15126,20130 2 3654
-G 20490,20430,300 2 3655
-H 21468,20130 2 3656
-I 10245,20130 2 3657
-J 11709,20130,4380 3 3658
-K 19515,20130 2 3659
-L 15126,20130 2 3660
-M 25857,20130 2 3661
-N 22443,20130 2 3662
-O 23907,20430,300 2 3663
-P 17076,20130 2 3664
-Q 23907,20430,4095 2 3665
-R 18540,20130 2 3666
-S 14148,20430,300 2 3667
-T 16587,20130 2 3668
-U 21468,20130,300 2 3669
-V 20004,20130 2 3670
-W 25857,20130 2 3671
-X 20004,20130 2 3672
-Y 17565,20130 2 3673
-Z 17565,20130 2 3674
-lB 13173,20130,3960 2 3675
-[ "
-rs 13173,20130 2 3676
-\ "
-rB 13173,20130,3960 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 9759,20130 2 51808
-` "
-a 13173,14310,300 0 3681
-b 16101,20025 2 3682
-c 12684,14310,300 0 3683
-d 15612,20025,300 2 3684
-e 13662,14310,300 0 3685
-f 9759,20130 2 3686
-g 14637,14310,4650 1 3687
-h 15612,20025 2 3688
-i 7806,20940 2 3689
-j 7806,20940,4365 3 3690
-k 16587,20025 2 3691
-l 7806,20025 2 3692
-m 23418,14310 0 3693
-n 15612,14310 0 3694
-o 16101,14310,300 0 3695
-p 15612,14310,4365 1 3696
-q 15612,14310,4365 1 3697
-r 11220,14310 0 3698
-s 11220,14310,300 0 3699
-t 10734,17100,300 0 3700
-u 15612,14010,300 0 3701
-v 14637,14010 0 3702
-w 20979,14010 0 3703
-x 16587,14010 0 3704
-y 14637,14010,4365 1 3705
-z 12198,14010 0 3706
-lC 13173,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,20130,6075 3 3709
-} "
-ti 26346,9435 0 51876
-char192 20490,25170 2 3776
-`A "
-char194 20490,25170 2 3778
-^A "
-char200 16101,25170 2 3784
-`E "
-char202 16101,25170 2 3786
-^E "
-char203 16101,26130 2 3787
-:E "
-char206 10245,25170 2 3790
-^I "
-char207 10245,26130 2 3791
-:I "
-char180 17565,20250 2 3764
-aa "
-ga 17565,20250 2 3680
-a^ 17565,20250 2 3678
-^ "
-char168 17565,20190 2 3752
-ad "
-a~ 17565,19035 2 3710
-~ "
-char217 21468,25170,300 2 3801
-`U "
-char219 21468,25170,300 2 3803
-^U "
-char221 17565,25170 2 3805
-'Y "
-char253 14637,20250,4365 3 3837
-'y "
-char176 14637,20430 2 3760
-de "
-char199 19029,20430,6270 3 3783
-,C "
-char231 12684,14310,6000 1 3815
-,c "
-char209 22443,25101 2 3793
-~N "
-char241 15612,19035 2 3825
-~n "
-char161 9759,14376,6054 1 3745
-r! "
-char191 12684,14526,6204 1 3775
-r? "
-char164 17565,15834 0 3748
-Cs "
-char163 17565,20430 2 3747
-Po "
-char165 17565,20130 2 3749
-Ye "
-char167 17565,20430,4365 3 3751
-sc "
-Fn 17565,20130 2 51871
-char162 17565,19911 2 3746
-ct "
-char226 13173,20250,300 2 3810
-^a "
-char234 13662,20250,300 2 3818
-^e "
-char244 16101,20250,300 2 3828
-^o "
-char251 15612,20250,300 2 3835
-^u "
-char225 13173,20250,300 2 3809
-'a "
-char233 13662,20250,300 2 3817
-'e "
-char243 16101,20250,300 2 3827
-'o "
-char250 15612,20250,300 2 3834
-'u "
-char224 13173,20250,300 2 3808
-`a "
-char232 13662,20250,300 2 3816
-`e "
-char242 16101,20250,300 2 3826
-`o "
-char249 15612,20250,300 2 3833
-`u "
-char228 13173,20190,300 2 3812
-:a "
-char235 13662,20190,300 2 3819
-:e "
-char246 16101,20190,300 2 3830
-:o "
-char252 15612,20190,300 2 3836
-:u "
-char197 20490,26508 2 3781
-oA "
-char238 7806,20250 2 3822
-^i "
-char216 23907,20601,366 2 3800
-/O "
-char198 26835,20130 2 3782
-AE "
-char229 13173,20655,300 2 3813
-oa "
-char237 7806,20250 2 3821
-'i "
-char248 16101,14373,330 0 3832
-/o "
-char230 20004,14310,300 0 3814
-ae "
-char196 20490,26130 2 3780
-:A "
-char236 7806,20250 2 3820
-`i "
-char214 23907,26130,300 2 3798
-:O "
-char220 21468,26130,300 2 3804
-:U "
-char201 16101,25170 2 3785
-'E "
-char239 7806,20190 2 3823
-:i "
-char223 17076,20130,300 2 3807
-ss "
-char212 23907,25170,300 2 3796
-^O "
-char193 20490,25170 2 3777
-'A "
-char195 20490,25101 2 3779
-~A "
-char227 13173,19035,300 2 3811
-~a "
-char208 21468,20130 2 3792
--D "
-char240 16101,20025,300 2 3824
-Sd "
-char205 10245,25170 2 3789
-'I "
-char204 10245,25170 2 3788
-`I "
-char211 23907,25170,300 2 3795
-'O "
-char210 23907,25170,300 2 3794
-`O "
-char213 23907,25101,300 2 3797
-~O "
-char245 16101,19035,300 2 3829
-~o "
-vS 14148,25170,300 2 51795
-vs 11220,20250,300 2 51827
-char218 21468,25170,300 2 3802
-'U "
-:Y 17565,26130 2 51801
-char255 14637,20190,4365 3 3839
-:y "
-char222 17076,20130 2 3806
-TP "
-char254 15612,20025,4365 3 3838
-Tp "
-char181 15612,12630,4680 1 3765
-char182 17565,19635,4200 3 3766
-ps "
-char190 25857,20430,300 2 3774
-34 "
-\- 25857,10380 0 51757
-char188 25857,20430,300 2 3772
-14 "
-char189 25857,20430,300 2 3773
-12 "
-char170 12198,20430 2 3754
-Of "
-char186 12198,20430 2 3770
-Om "
-char171 13662,12450 0 3755
-Fo "
-char187 13662,12450 0 3771
-Fc "
-char177 25857,15465,6855 1 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 25857,12210 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 12198,20340 2 3762
-S2 "
-char179 12198,20130 2 3763
-S3 "
-char184 17565,0,6000 1 3768
-ac "
-char185 12198,20340 2 3769
-S1 "
-char215 25857,15282 0 3799
-char247 25857,16380,885 0 3831
-char183 9759,13080 0 3767
-pc "
-fm 9759,20130 2 51873
-sd 15612,20130 2 51874
-dg 17565,20130,4365 3 51755
-tm 16101,17850 0 51796
-ah 17565,20250 2 51935
-ao 17565,20655 2 51930
-f/ 3903,20430,300 2 51759
-em 25857,10095 0 51789
-en 17565,10095 0 51790
-dd 17565,20130,4365 3 51773
-.i 7806,14010 0 51957
-aq 9759,20130 2 3623
-bu 13173,14226 0 51889
-'C 19029,25170,300 2 20166
-'c 12684,20250,300 2 20198
-lq 17076,20130 2 51838
-rq 17076,20130 2 51746
-Bq 17076,5025,3885 0 51772
-vz 12198,20250 2 51834
-fi 16587,20130 2 51881
-fl 16587,20130 2 51882
-ff 18540,20130 2 51883
-Fi 25371,20130 2 51884
-Fl 25371,20130 2 51885
-ij 15612,20940,4365 3 51958
-bq 9759,5025,3885 0 51756
-%0 33663,20430,300 2 51901
-char175 17565,19020 2 3759
-a- "
-ab 17565,19260 2 51926
-a. 17565,20190 2 51927
-oe 23418,14310,300 0 51823
-OE 31224,20430,300 2 51791
-fo 7806,12450 0 51886
-fc 7806,12450 0 51887
-sq 19029,15624 0 51899
-/L 16587,20130 2 51944
-/l 12684,20025 2 51960
-a" 17565,20250 2 51933
-ho 17565,348,5838 1 51934
-vZ 17565,25170 2 51802
-IJ 21954,20130,4380 3 51942
diff --git a/contrib/groff/devlj4/ALBR b/contrib/groff/devlj4/ALBR
deleted file mode 100644
index 684f29f..0000000
--- a/contrib/groff/devlj4/ALBR
+++ /dev/null
@@ -1,805 +0,0 @@
-name ALBR
-spacewidth 8295
-pcltypeface 4362
-pclproportional 1
-pclweight 1
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2925
-P . -4389
-P , -4389
-V A -4389
-A V -4389
-T o -3903
-T r -3903
-T c -3903
-T e -3903
-T d -3903
-T s -3903
-T y -3903
-T a -3903
-T w -3903
-T u -3903
-L T -2925
-L Y -2925
-Y o -3903
-Y e -3903
-Y a -2925
-A W -3414
-W A -3414
-T A -3903
-V o -2925
-V e -2925
-V a -2925
-Y A -3903
-F A -2925
-F . -3903
-F , -3903
-A T -3903
-A Y -3903
-v . -3414
-v , -3414
-y . -3414
-y , -3414
-T . -3903
-T , -3903
-L W -2925
-P A -2925
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -2439
-W e -2439
-W a -2439
-W . -3414
-W , -3414
-r . -2925
-r , -2925
-w . -3414
-w , -3414
-Y u -1950
-A v -2439
-A y -2439
-A w -2439
-o . -1950
-o , -1950
-p . -1950
-p , -1950
-e . -975
-e , -975
-b . -1950
-b , -1950
-O T -2439
-O V -2439
-O Y -2439
-O . -2439
-O , -2439
-L y -1461
-L O -1461
-L G -975
-L C -975
-L Q -975
-P J -486
-V y -1950
-V u -1950
-V O -2439
-V G -1950
-V C -1950
-V Q -1950
-D T -2439
-D V -1950
-D Y -1950
-D . -2439
-D , -2439
-Y O -2439
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -975
-F e -975
-F a -975
-O A -2439
-O W -1950
-L U -975
-R T -1461
-R V -1461
-R Y -1461
-R W -1461
-G T -1461
-P o -1461
-P g -975
-P e -1461
-P a -975
-D A -1950
-D W -1461
-B T -1950
-B Y -1950
-B . -1950
-B , -1950
-A O -2439
-A G -1950
-A C -1950
-A U -1950
-A Q -1950
-W r -1461
-W y -1461
-W u -1461
-W O -1950
-W G -1461
-W C -1461
-W Q -1461
-Q A -1950
-Q W -1461
-f . -486
-f , -486
-T O -2439
-T G -2439
-T C -2439
-T Q -2439
-O X -1461
-L o -975
-L e -975
-L q -975
-G V -1461
-G Y -1461
-G W -1461
-G . -486
-G , -486
-P T -486
-P V -486
-P Y -486
-D X -975
-B V -1950
-B X -975
-B A -1950
-B W -1461
-S . -1461
-S , -1461
-F O -486
-X o -975
-X e -975
-X y -975
-X O -1461
-X G -975
-X C -975
-X Q -975
-A o -1950
-A e -1950
-Q X -975
-K o -975
-K e -975
-K y -975
-K w -975
-K O -1461
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -486
-o x -486
-o w -486
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-r g -975
-g . -975
-g , -975
-p v -486
-p y -486
-p x -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -486
-b y -486
-b w -486
-s . -975
-s , -975
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-a v -486
-a y -486
-a w -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T S -1461
-L a -975
-R o -975
-R y -975
-R O -1461
-R G -975
-R C -975
-R U -975
-R Q -975
-G X -486
-G A -486
-P Z -486
-P X -486
-P W -486
-V S -1461
-S T -975
-S V -975
-S Y -975
-S X -975
-S A -1461
-S W -975
-Y S -1461
-X a -975
-X u -975
-A t -975
-A c -1950
-A d -1950
-A a -975
-A u -1950
-A q -1950
-W S -1461
-K c -975
-K u -975
-o f -486
-h w -486
-n w -486
-m w -486
-r o -975
-r c -975
-r e -975
-r d -975
-r a -975
-r q -975
-g g -486
-p f -486
-p w -486
-v e -486
-e f -486
-e x -486
-e w -486
-b f -486
-y e -486
-f o -486
-f c -486
-f e -486
-f d -486
-f a -486
-f q -486
-w e -486
-k o -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -486
-k w -486
-k q -486
-O Z -975
-O J -975
-L J -486
-R e -975
-R a -975
-R u -975
-G Z -486
-P O -486
-E O -486
-Z o -486
-Z e -486
-Z d -486
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -975
-Z G -486
-Z C -486
-Z Q -486
-D Z -486
-D J -486
-B Z -486
-B J -486
-S Z -486
-S J -486
-A J -486
-J O -486
-K a -975
-K J -486
-o z -486
-h f -486
-n f -486
-m f -486
-g o -486
-g c -486
-g e -486
-g d -486
-g a -486
-g q -486
-p z -486
-e z -486
-z o -486
-z c -486
-z e -486
-z d -486
-z a -486
-z q -486
-b z -486
-a f -486
-k t -486
-k f -486
-k u -486
-O g -486
-O j -486
-R J -486
-G J -486
-C O -486
-B O -486
-A f -486
-U O -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -2925
-L ' -2925
-T char173 -3903
-T hy -3903
-T - -3903
-T en -3903
-T em -3903
-A cq -2925
-A ' -2925
-char173 T -3903
-hy T -3903
-- T -3903
-en T -3903
-em T -3903
-Y char173 -1950
-Y hy -1950
-Y - -1950
-Y en -1950
-Y em -1950
-p cq -1950
-p ' -1950
-e cq -975
-e ' -975
-b cq -1950
-b ' -1950
-a cq -1461
-a ' -1461
-V char173 -1950
-V hy -1950
-V - -1950
-V en -1950
-V em -1950
-h cq -1950
-h ' -1950
-n cq -1950
-n ' -1950
-m cq -1950
-m ' -1950
-R cq -975
-R ' -975
-W char173 -1461
-W hy -1461
-W - -1461
-W en -1461
-W em -1461
-cq d -1950
-' d -1950
-L char173 -975
-L hy -975
-L - -975
-L en -975
-L em -975
-X char173 -975
-X hy -975
-X - -975
-X en -975
-X em -975
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-char173 X -975
-hy X -975
-- X -975
-char173 A -1950
-hy A -1950
-- A -1950
-en X -975
-en A -1950
-em X -975
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-K cq -486
-K ' -486
-b f -486
-k cq -486
-k ' -486
-O cq -486
-O ' -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-charset
-! 8295,20130,300 2 3617
-dq 13173,20130 2 3618
-" "
-sh 16587,20430,300 2 3619
-# "
-Do 16587,21909,2490 2 3620
-$ "
-% 24882,20430,300 2 3621
-& 22932,16869,300 0 3622
-cq 8295,20130 2 51751
-' "
-( 10734,20130,4365 3 3624
-) 10734,20130,4365 3 3625
-* 16587,20130 2 3626
-+ 24882,15420,60 0 3627
-, 8295,3945,5055 1 3628
-char173 8295,9795 0 3629
-hy "
-- "
-. 8295,4080,300 0 3630
-sl 11709,20130 2 3631
-/ "
-0 16587,20430,300 2 3632
-1 16587,20430 2 3633
-2 16587,20430 2 3634
-3 16587,20130,300 2 3635
-4 16587,20130 2 3636
-5 16587,20130,300 2 3637
-6 16587,20130,300 2 3638
-7 16587,20130 2 3639
-8 16587,20430,300 2 3640
-9 16587,20430 2 3641
-: 8295,12372,300 0 3642
-; 8295,12372,5055 1 3643
-< 26346,16068 0 3644
-= 24882,11880 0 3645
-> 26346,16068 0 3646
-? 12198,20430,300 2 3647
-at 24882,21030,2745 2 3648
-@ "
-A 20979,20430 2 3649
-B 15126,20130 2 3650
-C 18051,20430,300 2 3651
-D 18540,20130 2 3652
-E 14637,20130 2 3653
-F 13662,20130 2 3654
-G 20490,20430,300 2 3655
-H 20004,20130 2 3656
-I 8295,20130 2 3657
-J 10734,20130,4488 3 3658
-K 18051,20130 2 3659
-L 14148,20130 2 3660
-M 24396,20130 2 3661
-N 21468,20130 2 3662
-O 22932,20430,300 2 3663
-P 13662,20130 2 3664
-Q 22932,20430,4152 3 3665
-R 16587,20130 2 3666
-S 13662,20430,300 2 3667
-T 16587,20130 2 3668
-U 20979,20130,300 2 3669
-V 20490,20130 2 3670
-W 24882,20430 2 3671
-X 18051,20130 2 3672
-Y 17076,20130 2 3673
-Z 16101,20130 2 3674
-lB 11220,20130,4365 3 3675
-[ "
-rs 11709,20130 2 3676
-\ "
-rB 11220,20130,4365 3 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 8295,20130 2 51808
-` "
-a 12198,14310,300 0 3681
-b 14148,20025 2 3682
-c 12198,14310,300 0 3683
-d 14637,20025,300 2 3684
-e 12684,14310,300 0 3685
-f 8295,20130 2 3686
-g 12684,14310,4479 1 3687
-h 14148,20025 2 3688
-i 6342,19815 2 3689
-j 6342,19815,4365 3 3690
-k 12684,20025 2 3691
-l 6342,20025 2 3692
-m 21954,14310 0 3693
-n 14148,14310 0 3694
-o 14637,14310,300 0 3695
-p 14637,14310,4365 1 3696
-q 14148,14310,4365 1 3697
-r 9759,14310 0 3698
-s 9270,14310,300 0 3699
-t 8781,16950,300 0 3700
-u 14148,14010,300 0 3701
-v 12684,14010 0 3702
-w 18540,14010 0 3703
-x 12684,14010 0 3704
-y 13173,14010,4365 1 3705
-z 10245,14010 0 3706
-lC 11709,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11709,20130,6075 3 3709
-} "
-ti 26346,8952 0 51876
-char192 20979,24960 2 3776
-`A "
-char194 20979,24960 2 3778
-^A "
-char200 14637,24960 2 3784
-`E "
-char202 14637,24960 2 3786
-^E "
-char203 14637,25020 2 3787
-:E "
-char206 8295,24960 2 3790
-^I "
-char207 8295,25020 2 3791
-:I "
-char180 16587,19785 2 3764
-aa "
-ga 16587,19785 2 3680
-a^ 16587,19785 2 3678
-^ "
-char168 16587,19140 2 3752
-ad "
-a~ 16587,18507 2 3710
-~ "
-char217 20979,24960,300 2 3801
-`U "
-char219 20979,24960,300 2 3803
-^U "
-char221 17076,24960 2 3805
-'Y "
-char253 13173,19785,4365 3 3837
-'y "
-char176 13662,20430 2 3760
-de "
-char199 18051,20430,6330 3 3783
-,C "
-char231 12198,14310,6006 1 3815
-,c "
-char209 21468,24783 2 3793
-~N "
-char241 14148,18507 2 3825
-~n "
-char161 8295,14346,6084 1 3745
-r! "
-char191 12198,14496,6234 1 3775
-r? "
-char164 16587,15684 0 3748
-Cs "
-char163 16587,20430 2 3747
-Po "
-char165 16587,20130 2 3749
-Ye "
-char167 16587,20430,4365 3 3751
-sc "
-Fn 16587,20130 2 51871
-char162 16587,19968 2 3746
-ct "
-char226 12198,19785,300 2 3810
-^a "
-char234 12684,19785,300 2 3818
-^e "
-char244 14637,19785,300 2 3828
-^o "
-char251 14148,19785,300 2 3835
-^u "
-char225 12198,19785,300 2 3809
-'a "
-char233 12684,19785,300 2 3817
-'e "
-char243 14637,19785,300 2 3827
-'o "
-char250 14148,19785,300 2 3834
-'u "
-char224 12198,19785,300 2 3808
-`a "
-char232 12684,19785,300 2 3816
-`e "
-char242 14637,19785,300 2 3826
-`o "
-char249 14148,19785,300 2 3833
-`u "
-char228 12198,19140,300 2 3812
-:a "
-char235 12684,19140,300 2 3819
-:e "
-char246 14637,19140,300 2 3830
-:o "
-char252 14148,19140,300 2 3836
-:u "
-char197 20979,26154 2 3781
-oA "
-char238 6342,19785 2 3822
-^i "
-char216 22932,20454,300 2 3800
-/O "
-char198 25857,20130 2 3782
-AE "
-char229 12198,20160,300 2 3813
-oa "
-char237 6342,19785 2 3821
-'i "
-char248 14637,14316,300 0 3832
-/o "
-char230 19515,14310,300 0 3814
-ae "
-char196 20979,25020 2 3780
-:A "
-char236 6342,19785 2 3820
-`i "
-char214 22932,25020,300 2 3798
-:O "
-char220 20979,25020,300 2 3804
-:U "
-char201 14637,24960 2 3785
-'E "
-char239 6342,19140 2 3823
-:i "
-char223 15612,20130,300 2 3807
-ss "
-char212 22932,24960,300 2 3796
-^O "
-char193 20979,24960 2 3777
-'A "
-char195 20979,24783 2 3779
-~A "
-char227 12198,18507,300 2 3811
-~a "
-char208 20004,20130 2 3792
--D "
-char240 14637,20025,300 2 3824
-Sd "
-char205 8295,24960 2 3789
-'I "
-char204 8295,24960 2 3788
-`I "
-char211 22932,24960,300 2 3795
-'O "
-char210 22932,24960,300 2 3794
-`O "
-char213 22932,24783,300 2 3797
-~O "
-char245 14637,18507,300 2 3829
-~o "
-vS 13662,24960,300 2 51795
-vs 9270,19785,300 2 51827
-char218 20979,24960,300 2 3802
-'U "
-:Y 17076,25020 2 51801
-char255 13173,19140,4365 3 3839
-:y "
-char222 13662,20130 2 3806
-TP "
-char254 14637,20025,4365 3 3838
-Tp "
-char181 14637,12630,4350 1 3765
-char182 16587,19635,4200 3 3766
-ps "
-char190 24882,20430,300 2 3774
-34 "
-\- 24882,9405 0 51757
-char188 24882,20430,300 2 3772
-14 "
-char189 24882,20430,300 2 3773
-12 "
-char170 10245,20430 2 3754
-Of "
-char186 10245,20430 2 3770
-Om "
-char171 12198,12450 0 3755
-Fo "
-char187 12198,12450 0 3771
-Fc "
-char177 24882,15420,5175 1 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 24882,12135 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,20340 2 3762
-S2 "
-char179 10245,20130 2 3763
-S3 "
-char184 16587,309,6006 1 3768
-ac "
-char185 10245,20340 2 3769
-S1 "
-char215 24882,15990,279 0 3799
-char247 24882,15090 0 3831
-char183 8295,12330 0 3767
-pc "
-fm 8295,20130 2 51873
-sd 14148,20130 2 51874
-dg 16587,20130,4365 3 51755
-tm 16101,17850 0 51796
-ah 16587,19785 2 51935
-ao 16587,20160 2 51930
-f/ 3414,20430,300 2 51759
-em 24882,9525 0 51789
-en 16587,9525 0 51790
-dd 16587,20130,4365 3 51773
-.i 6342,14010 0 51957
-aq 8295,20130 2 3623
-bu 13173,14226 0 51889
-'C 18051,24960,300 2 20166
-'c 12198,19785,300 2 20198
-lq 14148,20130 2 51838
-rq 14148,20130 2 51746
-Bq 14148,3900,5100 1 51772
-vz 10245,19785 2 51834
-fi 14148,20130 2 51881
-fl 14148,20130 2 51882
-ff 15612,20130 2 51883
-Fi 21468,20130 2 51884
-Fl 21468,20130 2 51885
-ij 12684,19815,4365 3 51958
-bq 8295,3900,5100 1 51756
-%0 33177,20430,300 2 51901
-char175 16587,18603 2 3759
-a- "
-ab 16587,19110 2 51926
-a. 16587,19140 2 51927
-oe 22443,14310,300 0 51823
-OE 26346,20430,300 2 51791
-fo 6831,12450 0 51886
-fc 6831,12450 0 51887
-sq 19029,15624 0 51899
-/L 16101,20130 2 51944
-/l 9270,20025 2 51960
-a" 16587,19785 2 51933
-ho 16587,297,6417 1 51934
-vZ 16101,24960 2 51802
-IJ 18051,20130,4488 3 51942
diff --git a/contrib/groff/devlj4/AOB b/contrib/groff/devlj4/AOB
deleted file mode 100644
index 913ca39..0000000
--- a/contrib/groff/devlj4/AOB
+++ /dev/null
@@ -1,748 +0,0 @@
-name AOB
-spacewidth 8781
-pcltypeface 4168
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -1461
-P . -5364
-P , -5364
-V A -1950
-A V -1950
-T o -2439
-T c -1950
-T e -1950
-T d -1950
-T s -1461
-T a -1950
-T J -2925
-L T -2925
-L Y -3414
-Y o -3414
-Y e -2925
-Y a -2925
-Y J -2925
-A W -1461
-W A -1461
-T A -2439
-V o -1461
-V e -1461
-V a -1461
-Y A -2925
-F A -486
-F . -3903
-F , -3903
-A T -2439
-A Y -2925
-v . -2925
-v , -2925
-y . -3414
-y , -3414
-T . -3414
-T , -3414
-L W -975
-P A -975
-V J -2925
-V . -3414
-V , -3414
-Y . -3903
-Y , -3903
-W o -975
-W e -975
-W a -975
-W . -2439
-W , -2439
-r . -3414
-r , -3414
-w . -2925
-w , -2925
-Y u -975
-A v -1461
-A y -1461
-A w -1461
-o . -2439
-o , -2439
-p . -1950
-p , -1950
-e . -1461
-e , -1461
-b . -2439
-b , -2439
-O T -486
-O V -975
-O Y -1461
-O . -1950
-O , -1950
-L y -975
-P J -2925
-V y -486
-V u -486
-V O -975
-V G -975
-V C -975
-V Q -975
-D T -486
-D V -975
-D Y -1461
-D . -1950
-D , -1950
-Y O -1461
-Y G -1461
-Y C -1461
-Y Q -1461
-c . -1461
-c , -1461
-O A -486
-O W -975
-R V -486
-R Y -975
-R W -486
-G T -486
-P o -486
-P g -486
-P e -486
-P a -486
-C . -486
-C , -486
-D A -486
-D W -975
-B Y -975
-B . -1461
-B , -1461
-F J -2925
-A O -486
-A G -486
-A C -486
-A U -486
-A Q -486
-W r -486
-W y -486
-W u -486
-W O -975
-W G -975
-W C -975
-W J -1950
-W Q -975
-J A -486
-J . -1950
-J , -1950
-U A -486
-U . -1950
-U , -1950
-Q A -486
-Q W -975
-f . -1461
-f , -1461
-T O -486
-T G -486
-T C -486
-T Q -486
-O X -486
-G V -975
-G Y -1461
-G W -975
-G . -1950
-G , -1950
-P V -486
-P Y -975
-C V -486
-C Y -975
-D X -486
-B V -486
-B X -486
-B A -486
-B W -486
-S . -1461
-S , -1461
-X o -486
-X e -486
-X y -486
-X O -486
-X G -486
-X C -486
-X Q -486
-A o -486
-A e -486
-Q X -486
-K o -486
-K e -486
-K y -486
-K w -486
-K O -486
-K G -486
-K C -486
-K Q -486
-o v -975
-o y -975
-o x -486
-o w -975
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-g . -486
-g , -486
-p v -975
-p y -975
-p x -486
-c v -975
-c y -975
-c w -975
-v o -975
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -975
-e y -975
-b v -975
-b y -975
-b w -975
-s . -975
-s , -975
-y o -975
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-x o -486
-x g -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-a v -975
-a y -975
-a w -975
-w o -975
-w g -975
-w c -975
-w d -975
-w a -975
-w q -975
-R o -1461
-R O -486
-R G -486
-R C -486
-R Q -486
-G X -486
-G A -486
-P s -486
-P X -486
-P W -486
-C W -486
-V S -486
-S V -486
-S Y -975
-S X -486
-S A -486
-S W -486
-Y S -975
-X a -486
-X u -486
-X S -486
-A t -486
-A g -486
-A c -486
-A d -486
-A a -486
-A u -486
-A q -486
-A S -486
-W S -486
-K c -486
-K u -486
-K S -486
-t . -486
-t , -486
-h w -975
-h . -486
-h , -486
-n w -975
-n . -486
-n , -486
-m w -975
-m . -486
-m , -486
-l . -486
-l , -486
-i . -486
-i , -486
-p w -975
-c x -486
-v e -975
-v s -975
-e x -486
-e w -975
-z . -486
-z , -486
-d . -486
-d , -486
-s v -975
-s y -975
-s x -486
-s w -975
-y e -975
-y s -975
-x s -486
-x . -486
-x , -486
-a . -486
-a , -486
-w e -975
-w s -975
-j . -486
-j , -486
-u . -486
-k o -486
-k g -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-k . -486
-k , -486
-O Z -486
-O J -1461
-H . -486
-H , -486
-N . -486
-N , -486
-M . -486
-M , -486
-L . -486
-L , -486
-R e -1461
-R a -975
-R . -486
-R , -486
-G Z -486
-I . -486
-I , -486
-P O -486
-P G -486
-P C -486
-P Q -486
-E . -486
-E , -486
-Z o -1950
-Z e -1950
-Z d -1950
-Z s -486
-Z a -975
-Z O -486
-Z G -486
-Z C -486
-Z Q -486
-Z . -486
-Z , -486
-D Z -486
-D J -1461
-B J -975
-S J -975
-X . -486
-X , -486
-A s -486
-A . -486
-A , -486
-J J -1461
-U J -1461
-K a -486
-K . -486
-K , -486
-k s -486
-G J -1461
-A f -486
-A cq -486
-A ' -486
-Y char173 -975
-Y hy -975
-Y - -975
-Y en -975
-Y em -975
-V char173 -486
-V hy -486
-V - -486
-V en -486
-V em -486
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-X char173 -486
-X hy -486
-X - -486
-X en -486
-X em -486
-A char173 -486
-A hy -486
-A - -486
-A en -486
-A em -486
-K char173 -486
-K hy -486
-K - -486
-K en -486
-K em -486
-char173 X -486
-hy X -486
-- X -486
-char173 A -486
-hy A -486
-- A -486
-en X -486
-en A -486
-em X -486
-charset
-! 9759,20205,450 2 3617
-dq 12198,19755 2 3618
-" "
-sh 17565,20730,3630 3 3619
-# "
-Do 17565,22980,3855 3 3620
-$ "
-% 30249,20505,450 2 3621
-& 21468,20205,450 2 3622
-cq 6831,19755 2 51751
-' "
-( 8781,19755 2 3624
-) 8781,19755 2 3625
-* 17565,20205 2 3626
-+ 30249,15450,600 0 3627
-, 8781,4080,4710 1 3628
-char173 8781,10965 0 3629
-hy "
-- "
-. 8781,4170,450 0 3630
-sl 10734,20820,450 2 3631
-/ "
-0 17565,20505,450 2 3632
-1 17565,20055 2 3633
-2 17565,20505 2 3634
-3 17565,20055,450 2 3635
-4 17565,20055 2 3636
-5 17565,20055,450 2 3637
-6 17565,20505,450 2 3638
-7 17565,20055 2 3639
-8 17565,20505,450 2 3640
-9 17565,20505,450 2 3641
-: 8781,15783,450 0 3642
-; 8781,15783,4710 1 3643
-< 26346,16068 0 3644
-= 30249,12984 0 3645
-> 26346,16068 0 3646
-? 16101,20205,450 2 3647
-at 30249,21057,2679 2 3648
-@ "
-A 20004,19755 2 3649
-B 18051,19755 2 3650
-C 17076,20205,450 2 3651
-D 19515,19755 2 3652
-E 16101,19755 2 3653
-F 16101,19755 2 3654
-G 18540,20205,450 2 3655
-H 19515,19755 2 3656
-I 8295,19755 2 3657
-J 13662,19755,450 2 3658
-K 18540,19755 2 3659
-L 14637,19755 2 3660
-M 24396,19755 2 3661
-N 20004,19755 2 3662
-O 20004,20205,450 2 3663
-P 18540,19755 2 3664
-Q 20004,20205,3075 2 3665
-R 18051,19755 2 3666
-S 15612,20205,450 2 3667
-T 17076,19755 2 3668
-U 19029,19755,450 2 3669
-V 19029,19755 2 3670
-W 27321,19755 2 3671
-X 19029,19755 2 3672
-Y 19029,19755 2 3673
-Z 17565,19755 2 3674
-lB 8781,19755 2 3675
-[ "
-rs 10734,20820,450 2 3676
-\ "
-rB 8781,19755 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 6831,19755 2 51808
-` "
-a 17076,17205,450 0 3681
-b 19029,20820,450 2 3682
-c 15612,17205,450 0 3683
-d 19029,20820,450 2 3684
-e 17565,17205,450 0 3685
-f 13662,20820 2 3686
-g 19029,17205,3930 1 3687
-h 19029,20820 2 3688
-i 8781,21855 2 3689
-j 8781,21855,3930 3 3690
-k 17076,20820 2 3691
-l 8295,20820 2 3692
-m 27810,17205 0 3693
-n 19029,17205 0 3694
-o 18540,17205,450 0 3695
-p 19029,17205,3930 1 3696
-q 19029,17205,3930 1 3697
-r 13662,17205 0 3698
-s 14637,17205,450 0 3699
-t 14148,20970,450 2 3700
-u 18540,16755,450 0 3701
-v 17565,16755 0 3702
-w 26346,16755 0 3703
-x 17565,16755 0 3704
-y 17565,16755,3930 1 3705
-z 15126,16755 0 3706
-lC 13173,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,20130,6075 3 3709
-} "
-ti 26346,9435 0 51876
-char192 20004,24930 2 3776
-`A "
-char194 20004,24930 2 3778
-^A "
-char200 16101,24930 2 3784
-`E "
-char202 16101,24930 2 3786
-^E "
-char203 16101,25050 2 3787
-:E "
-char206 8295,24930 2 3790
-^I "
-char207 8295,25050 2 3791
-:I "
-char180 17565,22125 2 3764
-aa "
-ga 17565,22125 2 3680
-a^ 17565,22125 2 3678
-^ "
-char168 17565,22125 2 3752
-ad "
-a~ 17565,22521 2 3710
-~ "
-char217 19029,24930,450 2 3801
-`U "
-char219 19029,24930,450 2 3803
-^U "
-char221 19029,24930 2 3805
-'Y "
-char253 17565,22125,3930 3 3837
-'y "
-char176 17565,20505 2 3760
-de "
-char199 17076,20205,5988 3 3783
-,C "
-char231 15612,17205,5988 1 3815
-,c "
-char209 20004,25161 2 3793
-~N "
-char241 19029,22521 2 3825
-~n "
-char161 9759,17115,3540 1 3745
-r! "
-char191 16101,17106,3549 1 3775
-r? "
-char164 17565,15834 0 3748
-Cs "
-char163 17565,20505 2 3747
-Po "
-char165 17565,20055 2 3749
-Ye "
-char167 17565,20205,3930 3 3751
-sc "
-Fn 17565,20820 2 51871
-char162 17565,21603,1890 2 3746
-ct "
-char226 17076,22125,450 2 3810
-^a "
-char234 17565,22125,450 2 3818
-^e "
-char244 18540,22125,450 2 3828
-^o "
-char251 18540,22125,450 2 3835
-^u "
-char225 17076,22125,450 2 3809
-'a "
-char233 17565,22125,450 2 3817
-'e "
-char243 18540,22125,450 2 3827
-'o "
-char250 18540,22125,450 2 3834
-'u "
-char224 17076,22125,450 2 3808
-`a "
-char232 17565,22125,450 2 3816
-`e "
-char242 18540,22125,450 2 3826
-`o "
-char249 18540,22125,450 2 3833
-`u "
-char228 17076,22125,450 2 3812
-:a "
-char235 17565,22125,450 2 3819
-:e "
-char246 18540,22125,450 2 3830
-:o "
-char252 18540,22125,450 2 3836
-:u "
-char197 20004,27354 2 3781
-oA "
-char238 8781,22125 2 3822
-^i "
-char216 20004,20205,450 2 3800
-/O "
-char198 30249,19755 2 3782
-AE "
-char229 17076,24825,450 2 3813
-oa "
-char237 8781,22125 2 3821
-'i "
-char248 18540,17205,450 0 3832
-/o "
-char230 27321,17205,450 0 3814
-ae "
-char196 20004,25050 2 3780
-:A "
-char236 8781,22125 2 3820
-`i "
-char214 20004,25050,450 2 3798
-:O "
-char220 19029,25050,450 2 3804
-:U "
-char201 16101,24930 2 3785
-'E "
-char239 8781,22125 2 3823
-:i "
-char223 18540,20820,450 2 3807
-ss "
-char212 20004,24930,450 2 3796
-^O "
-char193 20004,24930 2 3777
-'A "
-char195 20004,25161 2 3779
-~A "
-char227 17076,22521,450 2 3811
-~a "
-char208 19515,19755 2 3792
--D "
-char240 18540,21666,450 2 3824
-Sd "
-char205 8295,24930 2 3789
-'I "
-char204 8295,24930 2 3788
-`I "
-char211 20004,24930,450 2 3795
-'O "
-char210 20004,24930,450 2 3794
-`O "
-char213 20004,25161,450 2 3797
-~O "
-char245 18540,22521,450 2 3829
-~o "
-vS 15612,24930,450 2 51795
-vs 14637,22125,450 2 51827
-char218 19029,24930,450 2 3802
-'U "
-:Y 19029,25050 2 51801
-char255 17565,22125,3930 3 3839
-:y "
-char222 18540,19755 2 3806
-TP "
-char254 19029,20820,3930 3 3838
-Tp "
-char181 15612,12630,4680 1 3765
-char182 17565,19635,4200 1 3766
-ps "
-char190 30249,20610,555 2 3774
-34 "
-\- 30249,9375 0 51757
-char188 30249,20610,555 2 3772
-14 "
-char189 30249,20610,555 2 3773
-12 "
-char170 14637,20505 2 3754
-Of "
-char186 14637,20505 2 3770
-Om "
-char171 15612,14025 0 3755
-Fo "
-char187 15612,14025 0 3771
-Fc "
-char177 30249,15450,5895 1 3761
-char166 13173,19083,5916 1 3750
-bb "
-char169 13173,19635 0 3753
-co "
-char172 30249,11274 0 3756
-no "
-char174 13173,19635 0 3758
-rg "
-char178 11709,20385 2 3762
-S2 "
-char179 11709,20055 2 3763
-S3 "
-char184 17565,507,5988 1 3768
-ac "
-char185 11709,20055 2 3769
-S1 "
-char215 30249,15225,585 0 3799
-char247 30249,15885,1035 0 3831
-char183 8781,12759 0 3767
-pc "
-fm 8781,20055 2 51873
-sd 17565,20055 2 51874
-dg 17565,20205,4095 3 51755
-tm 16101,17850 0 51796
-ah 17565,22125 2 51935
-ao 17565,24825 2 51930
-f/ 5367,20610,555 2 51759
-em 30249,10440 0 51789
-en 17565,10440 0 51790
-dd 17565,20205,4095 3 51773
-.i 8781,16755 0 51957
-aq 6831,19755 2 3623
-bu 13173,14226 0 51889
-'C 17076,24930,450 2 20166
-'c 15612,22125,450 2 20198
-lq 11220,19755 2 51838
-rq 11220,19755 2 51746
-Bq 11220,4038,3672 1 51772
-vz 15126,22125 2 51834
-fi 21954,21855 2 51881
-fl 21954,20820 2 51882
-ff 25371,20820 2 51883
-Fi 33177,21855 2 51884
-Fl 33177,20820 2 51885
-ij 17565,21855,3930 3 51958
-bq 6831,4038,3672 1 51756
-%0 34152,20505,450 2 51901
-char175 17565,21675 2 3759
-a- "
-ab 17565,22200 2 51926
-a. 17565,22590 2 51927
-oe 28785,17205,450 0 51823
-OE 28785,20205,450 2 51791
-fo 9270,14025 0 51886
-fc 9270,14025 0 51887
-sq 19029,15624 0 51899
-/L 14148,19755 2 51944
-/l 9270,20820 2 51960
-a" 17565,22125 2 51933
-ho 17565,1095,4155 1 51934
-vZ 17565,24930 2 51802
-IJ 21954,19755,450 2 51942
diff --git a/contrib/groff/devlj4/AOI b/contrib/groff/devlj4/AOI
deleted file mode 100644
index f43a1af..0000000
--- a/contrib/groff/devlj4/AOI
+++ /dev/null
@@ -1,813 +0,0 @@
-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 -2439
-P . -4878
-P , -4878
-V A -2439
-A V -1950
-T o -2925
-T r -1461
-T c -2925
-T e -2925
-T d -2925
-T s -2439
-T y -1461
-T a -2925
-T w -1461
-T u -1461
-T J -2925
-L T -2925
-L Y -2925
-Y o -2925
-Y e -2925
-Y a -2439
-Y J -2925
-A W -1461
-W A -1461
-T A -2925
-V o -1461
-V e -1461
-V a -1461
-Y A -2925
-F A -1461
-F . -3903
-F , -3903
-A T -2439
-A Y -2439
-v . -2439
-v , -2439
-y . -2925
-y , -2925
-T . -3414
-T , -3414
-L W -1461
-P A -975
-V J -2925
-V . -3414
-V , -3414
-Y . -3414
-Y , -3414
-W o -975
-W e -975
-W a -975
-W . -1950
-W , -1950
-r . -1950
-r , -1950
-w . -2439
-w , -2439
-Y u -975
-A v -1461
-A y -1461
-A w -975
-o . -2439
-o , -2439
-p . -2439
-p , -2439
-e . -1461
-e , -1461
-b . -2439
-b , -2439
-O T -1461
-O V -975
-O Y -1461
-O . -2439
-O , -2439
-L y -1950
-L O -2439
-L G -2439
-L C -2439
-L Q -2439
-P J -2925
-V y -975
-V u -975
-V O -975
-V G -975
-V C -975
-V Q -975
-D T -1461
-D V -975
-D Y -1461
-D . -2439
-D , -2439
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -486
-F e -486
-F a -486
-c . -1461
-c , -1461
-O A -975
-O W -486
-L U -1950
-R T -975
-R V -975
-R Y -975
-R W -486
-G T -1461
-C A -486
-C . -975
-C , -975
-D A -975
-D W -486
-B T -1461
-B Y -1461
-B . -1461
-B , -1461
-F J -2925
-A O -975
-A G -975
-A C -975
-A U -975
-A Q -975
-W r -486
-W y -486
-W u -486
-W O -486
-W G -486
-W C -486
-W J -1461
-W Q -486
-J A -486
-J . -975
-J , -975
-U A -975
-U . -2439
-U , -2439
-Q W -486
-f . -2439
-f , -2439
-T O -1461
-T G -1461
-T C -1461
-T Q -1461
-O X -975
-L o -2925
-L e -2439
-L q -1950
-G V -975
-G Y -1461
-G W -486
-G . -1950
-G , -1950
-P T -1461
-P V -975
-P Y -1461
-C T -975
-C V -975
-C Y -975
-D X -975
-B V -975
-B X -975
-B A -975
-B W -486
-S . -1950
-S , -1950
-X o -975
-X e -975
-X y -975
-X O -975
-X G -975
-X C -975
-X Q -975
-A o -975
-A e -975
-K o -1461
-K e -1461
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -486
-o x -975
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-r g -486
-g . -486
-g , -486
-p v -486
-p y -486
-p x -975
-c v -486
-c y -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -975
-b y -975
-b w -486
-s . -975
-s , -975
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -975
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -486
-a y -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T S -1461
-L a -975
-L S -1461
-G X -975
-G A -975
-P X -975
-P W -486
-C X -486
-C W -486
-C J -486
-V S -975
-S T -1461
-S V -975
-S Y -1461
-S X -975
-S A -975
-S W -486
-Y S -975
-X a -975
-X u -975
-X S -975
-A t -975
-A c -975
-A d -975
-A a -975
-A u -975
-A q -975
-A S -975
-W S -486
-K c -1461
-K u -975
-K S -975
-t . -486
-t , -486
-h . -486
-h , -486
-n . -486
-n , -486
-m . -486
-m , -486
-l . -486
-l , -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-i . -486
-i , -486
-c x -975
-v e -486
-v s -486
-e x -975
-z . -486
-z , -486
-d . -486
-d , -486
-b f -486
-s v -486
-s y -486
-s x -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-x . -486
-x , -486
-a . -486
-a , -486
-w e -486
-w s -486
-j . -486
-j , -486
-u . -486
-k o -975
-k c -975
-k e -975
-k d -975
-k a -975
-k q -975
-k . -486
-k , -486
-O J -1950
-H . -486
-H , -486
-N . -486
-N , -486
-M . -486
-M , -486
-L . -486
-L , -486
-R . -486
-R , -486
-I . -486
-I , -486
-E . -486
-E , -486
-Z o -1461
-Z e -1461
-Z d -1461
-Z s -486
-Z a -975
-Z . -486
-Z , -486
-D J -1950
-B J -975
-S J -1461
-X . -486
-X , -486
-A s -486
-A . -486
-A , -486
-J J -486
-U J -1950
-K a -975
-K . -486
-K , -486
-o z -975
-r s -486
-p z -975
-c z -975
-v f -486
-e z -975
-z o -975
-z c -975
-z e -975
-z d -975
-z s -486
-z a -975
-z q -975
-b t -486
-b g -486
-b z -1461
-b j -486
-s z -486
-y f -486
-w f -486
-k s -486
-G J -1461
-L cq -3414
-L ' -3414
-T char173 -1461
-T hy -1461
-T - -1461
-T en -1461
-T em -1461
-A cq -1950
-A ' -1950
-char173 T -1461
-hy T -1461
-- T -1461
-en T -1461
-em T -1461
-Y char173 -975
-Y hy -975
-Y - -975
-Y en -975
-Y em -975
-p cq -1950
-p ' -1950
-c cq -975
-c ' -975
-e cq -1950
-e ' -1950
-b cq -1950
-b ' -1950
-a cq -1950
-a ' -1950
-V char173 -975
-V hy -975
-V - -975
-V en -975
-V em -975
-h cq -1950
-h ' -1950
-n cq -1950
-n ' -1950
-m cq -1950
-m ' -1950
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -1950
-' d -1950
-s cq -975
-s ' -975
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -975
-X hy -975
-X - -975
-X en -975
-X em -975
-A char173 -975
-A hy -975
-A - -975
-A en -975
-A em -975
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -975
-' s -975
-char173 X -975
-hy X -975
-- X -975
-char173 A -975
-hy A -975
-- A -975
-en X -975
-en A -975
-em X -975
-b f -486
-charset
-! 7806,20160,405,1176,798,880 2 3617
-dq 11709,19755,0,504,-2439,504 2 3618
-" "
-sh 15612,20460,4296,0,-936 3 3619
-# "
-Do 15612,22065,2295,1062,258,880 2 3620
-$ "
-% 26346,20460,405,0,-1734 2 3621
-& 17565,20160,405,414,381,414 2 3622
-cq 7806,19755,0,744,-1851,744 2 51751
-' "
-( 7806,19755,405,3360,-270,880 2 3624
-) 7806,19755,405,618,2472,618 2 3625
-* 15612,20160,0,0,-2880 2 3626
-+ 26346,15255,585,0,-3894 0 3627
-, 7806,2910,4320,0,2160 1 3628
-char173 7806,10230,0,654,468,654 0 3629
-hy "
-- "
-. 7806,2925,405,0,684 0 3630
-sl 7806,20820,405,4203,3111,880 2 3631
-/ "
-0 15612,20460,405,1371,450,880 2 3632
-1 15612,20055,0,0,-879 2 3633
-2 15612,20460,0,1173,1140,880 2 3634
-3 15612,20055,405,1743,621,880 2 3635
-4 15612,20055,0,1101,1074,880 2 3636
-5 15612,20055,405,1530,453,880 2 3637
-6 15612,20460,405,1863,-6,880 2 3638
-7 15612,20055,0,2184,-213,880 2 3639
-8 15612,20460,405,1362,708,880 2 3640
-9 15612,20460,405,1032,828,880 2 3641
-: 7806,13515,405,0,684 0 3642
-; 7806,13515,4320,0,2160 1 3643
-< 26346,16068,0,0,-3981 0 3644
-= 26346,10800,0,0,-3921 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 14148,20160,405,1497,-1323,880 2 3647
-at 26346,21030,2745,0,-1083 2 3648
-@ "
-A 18051,19755,0,0,2478 2 3649
-B 16587,19755,0,1230,765,880 2 3650
-C 16101,20160,405,1941,-36,880 2 3651
-D 19029,19755,0,516,657,516 2 3652
-E 15612,19755,0,1971,858,880 2 3653
-F 15126,19755,0,2244,807,880 2 3654
-G 18051,20160,405,1218,-144,880 2 3655
-H 19515,19755,0,1179,558,880 2 3656
-I 6831,19755,0,1557,909,880 2 3657
-J 12198,19755,405,1518,2154,880 2 3658
-K 16101,19755,0,3612,717,880 2 3659
-L 12684,19755,0,0,783 2 3660
-M 22932,19755,0,1287,729,880 2 3661
-N 19515,19755,0,1344,735,880 2 3662
-O 19029,20160,405,732,-39,732 2 3663
-P 16587,19755,0,1425,699,880 2 3664
-Q 19029,20160,993,849,-243,849 2 3665
-R 16101,19755,0,1494,744,880 2 3666
-S 14637,20160,405,1374,888,880 2 3667
-T 14637,19755,0,3165,-825,880 2 3668
-U 18540,19755,405,1449,-453,880 2 3669
-V 17076,19755,0,2931,-1407,880 2 3670
-W 25371,19755,0,3333,-1341,880 2 3671
-X 16587,19755,0,3177,2418,880 2 3672
-Y 16587,19755,0,3216,-1296,880 2 3673
-Z 16101,19755,0,2199,1347,880 2 3674
-lB 7806,19755,405,2646,699,880 2 3675
-[ "
-rs 7806,20820,405,0,-1671 2 3676
-\ "
-rB 7806,19755,405,1341,2004,880 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,880 3 3679
-oq 7806,19755,0,1062,-2169,880 2 51808
-` "
-a 16101,17160,405,0,621 0 3681
-b 18051,20820,405,0,735 2 3682
-c 15126,17160,405,1257,114,880 0 3683
-d 18051,20820,405,1623,207,880 2 3684
-e 16587,17160,405,546,-6,546 0 3685
-f 11220,20820,0,3024,114,880 2 3686
-g 18051,17160,3930,654,102,654 1 3687
-h 18051,20820,0,0,573 2 3688
-i 6831,21105,0,2052,918,880 2 3689
-j 7317,21105,3930,1986,4662,880 3 3690
-k 14637,20820,0,2835,738,880 2 3691
-l 6831,20820,0,1794,891,880 2 3692
-m 26835,17160,0,0,735 0 3693
-n 18051,17160,0,0,567 0 3694
-o 17565,17160,405,90,-30,90 0 3695
-p 18051,17160,3930,51,1440,51 1 3696
-q 18051,17160,3930,855,216,855 1 3697
-r 11220,17160,0,2286,816,880 0 3698
-s 12684,17160,405,1206,1044,880 0 3699
-t 12198,20985,405,2229,-525,880 2 3700
-u 18051,16755,405,603,-237,603 0 3701
-v 16101,16755,0,1950,-618,880 0 3702
-w 24396,16755,0,1749,-735,880 0 3703
-x 15126,16755,0,2667,2142,880 0 3704
-y 15612,16755,3930,2085,-378,880 1 3705
-z 13662,16755,0,1953,1530,880 0 3706
-lC 11709,20130,6075,2580,-1005,880 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 11709,20130,6075,0,3153 3 3709
-} "
-ti 26346,8952,0,0,-4029 0 51876
-char192 18051,25005,0,0,2478 2 3776
-`A "
-char194 18051,25005,0,0,2478 2 3778
-^A "
-char200 15612,25005,0,1971,858,880 2 3784
-`E "
-char202 15612,25005,0,1971,858,880 2 3786
-^E "
-char203 15612,24645,0,1971,858,880 2 3787
-:E "
-char206 6831,25005,0,4425,909,880 2 3790
-^I "
-char207 6831,24645,0,4878,909,880 2 3791
-:I "
-char180 15612,22080,0,2073,-6261,880 2 3764
-aa "
-ga 15612,22080,0,0,-3054 2 3680
-a^ 15612,22080,0,0,-4680 2 3678
-^ "
-char168 15612,21795,0,0,-4674 2 3752
-ad "
-a~ 15612,21819,0,1443,-2550,880 2 3710
-~ "
-char217 18540,25005,405,1449,-453,880 2 3801
-`U "
-char219 18540,25005,405,1449,-453,880 2 3803
-^U "
-char221 16587,25005,0,3216,-1296,880 2 3805
-'Y "
-char253 15612,22080,3930,2085,-378,880 3 3837
-'y "
-char176 15612,20460,0,0,-2748 2 3760
-de "
-char199 16101,20160,6285,1941,-36,880 3 3783
-,C "
-char231 15126,17160,6285,1257,114,880 1 3815
-,c "
-char209 19515,24744,0,1344,735,880 2 3793
-~N "
-char241 18051,21819,0,222,567,222 2 3825
-~n "
-char161 7806,17157,3408,714,1260,714 0 3745
-r! "
-char191 14148,17175,3390,0,1623 0 3775
-r? "
-char164 15612,15684,0,96,-528,96 0 3748
-Cs "
-char163 15612,20460,0,2118,1011,880 2 3747
-Po "
-char165 15612,20055,0,3255,-999,880 2 3749
-Ye "
-char167 15612,20160,4095,0,-1920 3 3751
-sc "
-Fn 15612,20820,0,1578,-2127,880 2 51871
-char162 15612,20547,498,1389,-540,880 2 3746
-ct "
-char226 16101,22080,405,0,621 2 3810
-^a "
-char234 16587,22080,405,546,-6,546 2 3818
-^e "
-char244 17565,22080,405,90,-30,90 2 3828
-^o "
-char251 18051,22080,405,603,-237,603 2 3835
-^u "
-char225 16101,22080,405,1827,621,880 2 3809
-'a "
-char233 16587,22080,405,1584,-6,880 2 3817
-'e "
-char243 17565,22080,405,1095,-30,880 2 3827
-'o "
-char250 18051,22080,405,852,-237,852 2 3834
-'u "
-char224 16101,22080,405,0,621 2 3808
-`a "
-char232 16587,22080,405,546,-6,546 2 3816
-`e "
-char242 17565,22080,405,90,-30,90 2 3826
-`o "
-char249 18051,22080,405,603,-237,603 2 3833
-`u "
-char228 16101,21795,405,0,621 2 3812
-:a "
-char235 16587,21795,405,546,-6,546 2 3819
-:e "
-char246 17565,21795,405,90,-30,90 2 3830
-:o "
-char252 18051,21795,405,603,-237,603 2 3836
-:u "
-char197 18051,26850,0,0,2478 2 3781
-oA "
-char238 6831,22080,0,3831,921,880 2 3822
-^i "
-char216 19029,20205,450,2472,1920,880 2 3800
-/O "
-char198 28299,19755,0,2715,2868,880 2 3782
-AE "
-char229 16101,24390,405,0,621 2 3813
-oa "
-char237 6831,22080,0,6462,921,880 2 3821
-'i "
-char248 17565,17232,474,1710,1614,880 0 3832
-/o "
-char230 25857,17160,405,591,780,591 0 3814
-ae "
-char196 18051,24645,0,0,2478 2 3780
-:A "
-char236 6831,22080,0,1335,1338,880 2 3820
-`i "
-char214 19029,24645,405,732,-39,732 2 3798
-:O "
-char220 18540,24645,405,1449,-453,880 2 3804
-:U "
-char201 15612,25005,0,2739,858,880 2 3785
-'E "
-char239 6831,21795,0,4275,921,880 2 3823
-:i "
-char223 16101,20820,405,57,780,57 2 3807
-ss "
-char212 19029,25005,405,732,-39,732 2 3796
-^O "
-char193 18051,25005,0,1518,2478,880 2 3777
-'A "
-char195 18051,24744,0,1263,2478,880 2 3779
-~A "
-char227 16101,21819,405,1197,621,880 2 3811
-~a "
-char208 19029,19755,0,516,690,516 2 3792
--D "
-char240 17565,21426,405,66,-36,66 2 3824
-Sd "
-char205 6831,25005,0,7128,909,880 2 3789
-'I "
-char204 6831,25005,0,2073,909,880 2 3788
-`I "
-char211 19029,25005,405,1029,-39,880 2 3795
-'O "
-char210 19029,25005,405,732,-39,732 2 3794
-`O "
-char213 19029,24744,405,774,-39,774 2 3797
-~O "
-char245 17565,21819,405,465,-30,465 2 3829
-~o "
-vS 14637,25005,405,1374,888,880 2 51795
-vs 12684,22080,405,1596,1044,880 2 51827
-char218 18540,25005,405,1449,-453,880 2 3802
-'U "
-:Y 16587,24645,0,3216,-1296,880 2 51801
-char255 15612,21795,3930,2085,-378,880 3 3839
-:y "
-char222 16587,19755,0,675,753,675 2 3806
-TP "
-char254 18051,20820,3930,51,1440,51 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,880 1 3765
-char182 15612,19635,4200,0,-1344 3 3766
-ps "
-char190 26346,20610,555,0,-1806 2 3774
-34 "
-\- 26346,8295,0,0,-3891 0 51757
-char188 26346,20610,555,0,-1755 2 3772
-14 "
-char189 26346,20610,555,0,-1998 2 3773
-12 "
-char170 15612,20460,0,0,-2658 2 3754
-Of "
-char186 15612,20460,0,0,-2451 2 3770
-Om "
-char171 13662,14145,0,2082,-45,880 0 3755
-Fo "
-char187 13662,14145,0,267,1770,267 0 3771
-Fc "
-char177 26346,15255,3900,0,-3906 1 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,3903,-2112,880 2 3753
-co "
-char172 26346,11679,0,0,-3984 0 3756
-no "
-char174 13173,19635,0,3903,-2112,880 2 3758
-rg "
-char178 10245,20385,0,2097,-225,880 2 3762
-S2 "
-char179 10245,20055,0,2064,-186,880 2 3763
-S3 "
-char184 15612,375,6285,0,-2349 1 3768
-ac "
-char185 10245,20055,0,0,-495 2 3769
-S1 "
-char215 26346,15189,579,0,-3957 0 3799
-char247 26346,12780,0,0,-3894 0 3831
-char183 7806,11760,0,0,-1131 0 3767
-pc "
-fm 7806,20055,0,1680,-2322,880 2 51873
-sd 15612,20055,0,0,-2322 2 51874
-dg 15612,20160,4095,0,-1632 3 51755
-tm 16101,17850,0,1443,-1980,880 0 51796
-ah 15612,22080,0,132,-5370,132 2 51935
-ao 15612,24390,0,0,-6087 2 51930
-f/ 4392,20610,555,7662,7350,880 2 51759
-em 26346,9840,0,462,330,462 0 51789
-en 15612,9840,0,528,336,528 0 51790
-dd 15612,20160,4095,0,-1611 3 51773
-.i 6831,16755,0,975,921,880 0 51957
-aq 7806,19755,0,672,-2604,672 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 16101,25005,405,2718,-36,880 2 20166
-'c 15126,22080,405,2466,114,880 2 20198
-lq 11709,19755,0,1344,-2424,880 2 51838
-rq 11709,19755,0,756,-1836,756 2 51746
-Bq 11709,2970,3315,0,1494 0 51772
-vz 13662,22080,0,1953,1530,880 2 51834
-fi 17076,21105,0,2268,-153,880 2 51881
-fl 17076,20820,0,1668,57,880 2 51882
-ff 20490,20820,0,3111,42,880 2 51883
-Fi 26346,21105,0,2331,-201,880 2 51884
-Fl 26346,20820,0,1692,48,880 2 51885
-ij 13173,21105,3930,1986,918,880 3 51958
-bq 7806,2970,3315,0,1089 0 51756
-%0 34152,20460,405,684,-159,684 2 51901
-char175 15612,21210,0,0,-5265 2 3759
-a- "
-ab 15612,22230,0,0,-5238 2 51926
-a. 15612,21795,0,0,-7032 2 51927
-oe 28299,17160,405,768,270,768 0 51823
-OE 25857,20160,405,2463,-27,880 2 51791
-fo 8781,14145,0,1689,279,880 0 51886
-fc 8781,14145,0,324,1644,324 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 13173,19755,0,21,1839,21 2 51944
-/l 7806,20820,0,3030,2109,880 2 51960
-a" 15612,22080,0,4503,-3531,880 2 51933
-ho 15612,765,3990,0,-6564 1 51934
-vZ 16101,25005,0,2199,1347,880 2 51802
-IJ 18540,19755,405,1518,909,880 2 51942
diff --git a/contrib/groff/devlj4/AOR b/contrib/groff/devlj4/AOR
deleted file mode 100644
index b9a0485..0000000
--- a/contrib/groff/devlj4/AOR
+++ /dev/null
@@ -1,735 +0,0 @@
-name AOR
-spacewidth 7806
-pcltypeface 4168
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2439
-P . -4878
-P , -4878
-V A -2439
-A V -1950
-T o -2439
-T r -975
-T c -2439
-T e -2439
-T d -2925
-T s -1950
-T y -975
-T a -1950
-T w -975
-T u -975
-T J -2439
-L T -2439
-L Y -3414
-Y o -2925
-Y e -2925
-Y a -1950
-Y J -2925
-A W -1950
-W A -1950
-T A -2439
-V o -975
-V e -975
-V a -975
-Y A -3414
-F A -1950
-F . -3903
-F , -3903
-A T -2439
-A Y -3414
-v . -2925
-v , -2925
-y . -2925
-y , -2925
-T . -2925
-T , -2925
-L W -1950
-P A -1461
-V J -2439
-V . -2925
-V , -2925
-Y . -3903
-Y , -3903
-W o -975
-W e -975
-W a -975
-W . -2439
-W , -2439
-r . -3903
-r , -3903
-w . -2439
-w , -2439
-Y u -975
-A v -1461
-A y -1950
-A w -1461
-o . -2439
-o , -2439
-p . -2439
-p , -2439
-e . -1950
-e , -1950
-b . -2439
-b , -2439
-O T -975
-O Y -975
-O . -2439
-O , -2439
-L y -2439
-L O -1461
-L G -1461
-L C -1461
-L Q -1461
-P J -2925
-D T -975
-D Y -975
-D . -1950
-D , -1950
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -486
-F e -486
-F a -486
-c . -1461
-c , -1461
-O A -1461
-L U -1461
-R T -486
-R Y -486
-G T -486
-C A -975
-C . -1461
-C , -1461
-D A -1461
-B T -975
-B Y -975
-B . -1461
-B , -1461
-F J -2925
-A O -975
-A G -975
-A C -975
-A U -975
-A Q -975
-W J -1950
-J A -1461
-J . -1950
-J , -1950
-U A -1461
-U . -1950
-U , -1950
-f . -2925
-f , -2925
-T O -975
-T G -975
-T C -975
-T Q -975
-L o -1461
-L e -1461
-L q -1461
-G Y -486
-G . -1461
-G , -1461
-P T -975
-P Y -975
-C T -486
-C Y -486
-B A -975
-S . -1461
-S , -1461
-X o -1950
-X e -1950
-A o -975
-A e -975
-K o -975
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -975
-o x -486
-o w -486
-h v -486
-h y -975
-n v -486
-n y -975
-m v -486
-m y -975
-r g -486
-g . -486
-g , -486
-p v -486
-p y -975
-p x -486
-c v -486
-c y -975
-c w -486
-v o -486
-v g -486
-v c -486
-v d -975
-v a -486
-v q -486
-e v -486
-e y -975
-b v -1461
-b y -1950
-b w -1461
-s . -1461
-s , -1461
-y o -486
-y g -486
-y c -486
-y d -975
-y a -486
-y q -486
-x o -486
-x g -486
-x c -486
-x e -486
-x d -975
-x a -486
-x q -486
-a v -486
-a y -975
-a w -486
-w o -486
-w g -486
-w c -486
-w d -975
-w a -486
-w q -486
-T S -975
-L a -486
-L S -975
-R o -1950
-G A -975
-C J -975
-S T -975
-S Y -975
-S A -975
-Y S -975
-X a -486
-A t -486
-A g -975
-A c -975
-A d -1461
-A a -486
-A u -975
-A q -975
-A S -975
-K c -975
-K u -975
-K S -975
-t . -486
-t , -486
-h w -486
-h . -486
-h , -486
-n w -486
-n . -486
-n , -486
-m w -486
-m . -486
-m , -486
-l . -486
-l , -486
-r o -486
-r c -486
-r e -486
-r d -975
-r a -486
-r q -486
-i . -486
-i , -486
-p w -486
-c x -486
-v e -486
-v s -486
-e x -486
-e w -486
-z . -486
-z , -486
-d . -486
-d , -486
-b f -975
-y e -486
-y s -486
-f d -486
-x . -486
-x , -486
-a . -486
-a , -486
-w e -486
-w s -486
-j . -486
-j , -486
-u . -486
-k o -975
-k g -975
-k c -975
-k e -975
-k d -1461
-k a -486
-k q -975
-k . -486
-k , -486
-O J -1950
-H . -486
-H , -486
-N . -486
-N , -486
-M . -486
-M , -486
-L . -486
-L , -486
-R e -1950
-R a -486
-R . -486
-R , -486
-I . -486
-I , -486
-E d -486
-E . -486
-E , -486
-Z o -1950
-Z e -1950
-Z d -1950
-Z a -486
-Z . -486
-Z , -486
-D J -1461
-B J -975
-S J -975
-X . -486
-X , -486
-A . -486
-A , -486
-J J -1461
-U J -1461
-K a -486
-K . -486
-K , -486
-t d -486
-r s -486
-g d -486
-z d -486
-b t -975
-b g -975
-b z -975
-b j -975
-G J -975
-A f -486
-U d -486
-L cq -3903
-L ' -3903
-T char173 -975
-T hy -975
-T - -975
-T en -975
-T em -975
-A cq -2439
-A ' -2439
-char173 T -975
-hy T -975
-- T -975
-en T -975
-em T -975
-Y char173 -975
-Y hy -975
-Y - -975
-Y en -975
-Y em -975
-p cq -1950
-p ' -1950
-c cq -975
-c ' -975
-e cq -1950
-e ' -1950
-b cq -1950
-b ' -1950
-a cq -1461
-a ' -1461
-h cq -1950
-h ' -1950
-n cq -1461
-n ' -1461
-m cq -1461
-m ' -1461
-cq d -1950
-' d -1950
-L char173 -1461
-L hy -1461
-L - -1461
-L en -1461
-L em -1461
-A char173 -975
-A hy -975
-A - -975
-A en -975
-A em -975
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -975
-' s -975
-char173 A -1461
-hy A -1461
-- A -1461
-en A -1461
-b f -975
-charset
-! 8295,20160,405 2 3617
-dq 11220,19755 2 3618
-" "
-sh 15612,20460,4296 3 3619
-# "
-Do 15612,21960,2265 2 3620
-$ "
-% 26835,20460,405 2 3621
-& 19029,20160,405 2 3622
-cq 6831,19755 2 51751
-' "
-( 7806,19755,405 2 3624
-) 7806,19755,405 2 3625
-* 15612,20160 2 3626
-+ 26835,15255,585 0 3627
-, 7806,2910,4320 1 3628
-char173 7806,10200 0 3629
-hy "
-- "
-. 7806,2925,405 0 3630
-sl 8295,20820,405 2 3631
-/ "
-0 15612,20460,405 2 3632
-1 15612,20055 2 3633
-2 15612,20460 2 3634
-3 15612,20055,405 2 3635
-4 15612,20055 2 3636
-5 15612,20055,405 2 3637
-6 15612,20460,405 2 3638
-7 15612,20055 2 3639
-8 15612,20460,405 2 3640
-9 15612,20460,405 2 3641
-: 7806,13647,405 0 3642
-; 7806,13647,4320 1 3643
-< 26346,16068 0 3644
-= 26835,10800 0 3645
-> 26346,16068 0 3646
-? 15126,20160,405 2 3647
-at 26835,21030,2745 2 3648
-@ "
-A 18540,19755 2 3649
-B 17565,19755 2 3650
-C 16101,20160,405 2 3651
-D 18540,19755 2 3652
-E 15612,19755 2 3653
-F 15126,19755 2 3654
-G 18051,20160,405 2 3655
-H 19515,19755 2 3656
-I 7317,19755 2 3657
-J 12198,19755,405 2 3658
-K 16587,19755 2 3659
-L 13662,19755 2 3660
-M 23418,19755 2 3661
-N 19515,19755 2 3662
-O 19029,20160,405 2 3663
-P 16587,19755 2 3664
-Q 19029,20160,636 2 3665
-R 16587,19755 2 3666
-S 14148,20160,405 2 3667
-T 15126,19755 2 3668
-U 19029,19755,405 2 3669
-V 16587,19755 2 3670
-W 25857,19755 2 3671
-X 16587,19755 2 3672
-Y 16587,19755 2 3673
-Z 16101,19755 2 3674
-lB 7806,19755,405 2 3675
-[ "
-rs 8295,20820,405 2 3676
-\ "
-rB 7806,19755,405 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 6831,19755 2 51808
-` "
-a 15126,17160,405 0 3681
-b 18540,20820,405 2 3682
-c 14637,17160,405 0 3683
-d 18540,20820,405 2 3684
-e 16587,17160,405 0 3685
-f 11709,20820 2 3686
-g 17565,17160,3930 1 3687
-h 18051,20820 2 3688
-i 7806,21105 2 3689
-j 7806,21105,3930 3 3690
-k 15126,20820 2 3691
-l 7317,20820 2 3692
-m 27321,17160 0 3693
-n 18051,17160 0 3694
-o 18051,17160,405 0 3695
-p 18540,17160,3930 1 3696
-q 18540,17160,3930 1 3697
-r 12198,17160 0 3698
-s 12198,17160,405 0 3699
-t 12198,20925,405 2 3700
-u 17565,16755,405 0 3701
-v 15612,16755 0 3702
-w 23907,16755 0 3703
-x 14637,16755 0 3704
-y 15612,16755,3930 1 3705
-z 13662,16755 0 3706
-lC 11709,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11709,20130,6075 3 3709
-} "
-ti 26346,8952 0 51876
-char192 18540,25005 2 3776
-`A "
-char194 18540,25005 2 3778
-^A "
-char200 15612,25005 2 3784
-`E "
-char202 15612,25005 2 3786
-^E "
-char203 15612,24690 2 3787
-:E "
-char206 7317,25005 2 3790
-^I "
-char207 7317,24690 2 3791
-:I "
-char180 15612,22080 2 3764
-aa "
-ga 15612,22080 2 3680
-a^ 15612,22080 2 3678
-^ "
-char168 15612,21840 2 3752
-ad "
-a~ 15612,21873 2 3710
-~ "
-char217 19029,25005,405 2 3801
-`U "
-char219 19029,25005,405 2 3803
-^U "
-char221 16587,25005 2 3805
-'Y "
-char253 15612,22080,3930 3 3837
-'y "
-char176 15612,20460 2 3760
-de "
-char199 16101,20160,4896 3 3783
-,C "
-char231 14637,17160,4896 1 3815
-,c "
-char209 19515,24915 2 3793
-~N "
-char241 18051,21873 2 3825
-~n "
-char161 8295,17124,3441 0 3745
-r! "
-char191 15126,17124,3441 0 3775
-r? "
-char164 15612,15684 0 3748
-Cs "
-char163 15612,20460 2 3747
-Po "
-char165 15612,20055 2 3749
-Ye "
-char167 15612,20160,4095 3 3751
-sc "
-Fn 15612,20820 2 51871
-char162 15612,20526,537 2 3746
-ct "
-char226 15126,22080,405 2 3810
-^a "
-char234 16587,22080,405 2 3818
-^e "
-char244 18051,22080,405 2 3828
-^o "
-char251 17565,22080,405 2 3835
-^u "
-char225 15126,22080,405 2 3809
-'a "
-char233 16587,22080,405 2 3817
-'e "
-char243 18051,22080,405 2 3827
-'o "
-char250 17565,22080,405 2 3834
-'u "
-char224 15126,22080,405 2 3808
-`a "
-char232 16587,22080,405 2 3816
-`e "
-char242 18051,22080,405 2 3826
-`o "
-char249 17565,22080,405 2 3833
-`u "
-char228 15126,21840,405 2 3812
-:a "
-char235 16587,21840,405 2 3819
-:e "
-char246 18051,21840,405 2 3830
-:o "
-char252 17565,21840,405 2 3836
-:u "
-char197 18540,26850 2 3781
-oA "
-char238 7806,22080 2 3822
-^i "
-char216 19029,20187,501 2 3800
-/O "
-char198 30738,19755 2 3782
-AE "
-char229 15126,24390,405 2 3813
-oa "
-char237 7806,22080 2 3821
-'i "
-char248 18051,17163,432 0 3832
-/o "
-char230 26346,17160,405 0 3814
-ae "
-char196 18540,24690 2 3780
-:A "
-char236 7806,22080 2 3820
-`i "
-char214 19029,24690,405 2 3798
-:O "
-char220 19029,24690,405 2 3804
-:U "
-char201 15612,25005 2 3785
-'E "
-char239 7806,21840 2 3823
-:i "
-char223 16587,20820,405 2 3807
-ss "
-char212 19029,25005,405 2 3796
-^O "
-char193 18540,25005 2 3777
-'A "
-char195 18540,24915 2 3779
-~A "
-char227 15126,21873,405 2 3811
-~a "
-char208 18540,19755 2 3792
--D "
-char240 18051,22695,405 2 3824
-Sd "
-char205 7317,25005 2 3789
-'I "
-char204 7317,25005 2 3788
-`I "
-char211 19029,25005,405 2 3795
-'O "
-char210 19029,25005,405 2 3794
-`O "
-char213 19029,24915,405 2 3797
-~O "
-char245 18051,21873,405 2 3829
-~o "
-vS 14148,25005,405 2 51795
-vs 12198,22080,405 2 51827
-char218 19029,25005,405 2 3802
-'U "
-:Y 16587,24690 2 51801
-char255 15612,21840,3930 3 3839
-:y "
-char222 16587,19755 2 3806
-TP "
-char254 18540,20820,3930 3 3838
-Tp "
-char181 14637,12630,4350 1 3765
-char182 15612,19635,4200 3 3766
-ps "
-char190 26835,20610,555 2 3774
-34 "
-\- 26835,8295 0 51757
-char188 26835,20610,555 2 3772
-14 "
-char189 26835,20610,555 2 3773
-12 "
-char170 15612,20460 2 3754
-Of "
-char186 15612,20460 2 3770
-Om "
-char171 14148,13950 0 3755
-Fo "
-char187 14148,13950 0 3771
-Fc "
-char177 26835,15255,3900 1 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 26835,11331 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,20385 2 3762
-S2 "
-char179 10245,20055 2 3763
-S3 "
-char184 15612,324,4896 1 3768
-ac "
-char185 10245,20055 2 3769
-S1 "
-char215 26835,15189,579 0 3799
-char247 26835,12780 0 3831
-char183 7806,11781 0 3767
-pc "
-fm 7806,20055 2 51873
-sd 15612,20055 2 51874
-dg 15612,20160,4095 3 51755
-tm 16101,17850 0 51796
-ah 15612,22080 2 51935
-ao 15612,24390 2 51930
-f/ 4392,20610,555 2 51759
-em 26835,9840 0 51789
-en 15612,9840 0 51790
-dd 15612,20160,4095 3 51773
-.i 7806,16755 0 51957
-aq 6831,19755 2 3623
-bu 13173,14226 0 51889
-'C 16101,25005,405 2 20166
-'c 14637,22080,405 2 20198
-lq 10245,19755 2 51838
-rq 10245,19755 2 51746
-Bq 10245,2868,3417 0 51772
-vz 13662,22080 2 51834
-fi 18051,21105 2 51881
-fl 18051,20820 2 51882
-ff 20979,20820 2 51883
-Fi 27321,21105 2 51884
-Fl 27321,20820 2 51885
-ij 15126,21105,3930 3 51958
-bq 6831,2868,3417 0 51756
-%0 34152,20460,405 2 51901
-char175 15612,21306 2 3759
-a- "
-ab 15612,22155 2 51926
-a. 15612,21840 2 51927
-oe 29274,17160,405 0 51823
-OE 26346,20160,405 2 51791
-fo 9270,13950 0 51886
-fc 9270,13950 0 51887
-sq 19029,15624 0 51899
-/L 13662,19755 2 51944
-/l 7317,20820 2 51960
-a" 15612,22080 2 51933
-ho 15612,747,4143 1 51934
-vZ 16101,25005 2 51802
-IJ 19029,19755,405 2 51942
diff --git a/contrib/groff/devlj4/CB b/contrib/groff/devlj4/CB
deleted file mode 100644
index 0da67ed..0000000
--- a/contrib/groff/devlj4/CB
+++ /dev/null
@@ -1,350 +0,0 @@
-name CB
-spacewidth 15873
-pcltypeface 4099
-pclproportional 0
-pclweight 3
-pclstyle 0
-charset
-! 15873,15060,330 0 3617
-dq 15873,15060 0 3618
-" "
-sh 15873,17091,1389 2 3619
-# "
-Do 15873,17010,3306 2 3620
-$ "
-% 15873,16275,900 2 3621
-& 15873,14244,330 0 3622
-cq 15873,15060 0 51751
-' "
-( 15873,16935,2295 2 3624
-) 15873,16935,2295 2 3625
-* 15873,15060 0 3626
-+ 15873,11535 0 3627
-, 15873,4305,2655 0 3628
-char173 15873,7440 0 3629
-hy "
-- "
-. 15873,4035,330 0 3630
-sl 15873,18300,3525 2 3631
-/ "
-0 15873,16155,330 2 3632
-1 15873,16155 2 3633
-2 15873,16155 2 3634
-3 15873,16155,330 2 3635
-4 15873,16155 2 3636
-5 15873,15825,330 2 3637
-6 15873,16155,330 2 3638
-7 15873,15825 2 3639
-8 15873,16155,330 2 3640
-9 15873,16155,330 2 3641
-: 15873,10635,330 0 3642
-; 15873,10635,2655 0 3643
-< 15873,11667,243 0 3644
-= 15873,8886 0 3645
-> 15873,11667,243 0 3646
-? 15873,15390,330 2 3647
-at 15873,15276,489 2 3648
-@ "
-A 15873,15060 0 3649
-B 15873,15060 0 3650
-C 15873,15390,330 2 3651
-D 15873,15060 0 3652
-E 15873,15060 0 3653
-F 15873,15060 0 3654
-G 15873,15390,330 2 3655
-H 15873,15060 0 3656
-I 15873,15060 0 3657
-J 15873,15060,330 0 3658
-K 15873,15060 0 3659
-L 15873,15060 0 3660
-M 15873,15060 0 3661
-N 15873,15060,330 0 3662
-O 15873,15390,330 2 3663
-P 15873,15060 0 3664
-Q 15873,15390,3801 2 3665
-R 15873,15060 0 3666
-S 15873,15390,330 2 3667
-T 15873,15060 0 3668
-U 15873,15060,330 0 3669
-V 15873,15060 0 3670
-W 15873,15060 0 3671
-X 15873,15060 0 3672
-Y 15873,15060 0 3673
-Z 15873,15060 0 3674
-lB 15873,16935,2295 2 3675
-[ "
-rs 15873,18300,3525 2 3676
-\ "
-rB 15873,16935,2295 2 3677
-] "
-ha 15873,19758 2 51875
-_ 15873,191367,6588 3 3679
-oq 15873,15060 0 51808
-` "
-a 15873,11775,330 0 3681
-b 15873,16350,330 2 3682
-c 15873,11775,330 0 3683
-d 15873,16350,330 2 3684
-e 15873,11775,330 0 3685
-f 15873,16350 2 3686
-g 15873,11775,4845 1 3687
-h 15873,16350 2 3688
-i 15873,16920 2 3689
-j 15873,16920,4845 3 3690
-k 15873,16350 2 3691
-l 15873,16350 2 3692
-m 15873,11775 0 3693
-n 15873,11775 0 3694
-o 15873,11775,330 0 3695
-p 15873,11775,4845 1 3696
-q 15873,11775,4845 1 3697
-r 15873,11775 0 3698
-s 15873,11775,330 0 3699
-t 15873,14940,330 0 3700
-u 15873,11445,330 0 3701
-v 15873,11445 0 3702
-w 15873,11445 0 3703
-x 15873,11445 0 3704
-y 15873,11445,4845 1 3705
-z 15873,11445 0 3706
-lC 15873,20130,6075 3 3707
-{ "
-ba 15873,19758,6588 3 3708
-| "
-rC 15873,20130,6075 3 3709
-} "
-ti 15873,8160 0 51876
-char192 15873,21375 2 3776
-`A "
-char194 15873,21375 2 3778
-^A "
-char200 15873,21375 2 3784
-`E "
-char202 15873,21375 2 3786
-^E "
-char203 15873,20790 2 3787
-:E "
-char206 15873,21375 2 3790
-^I "
-char207 15873,20790 2 3791
-:I "
-char180 15873,17880 2 3764
-aa "
-ga 15873,17880 2 3680
-a^ 15873,17880 2 3678
-^ "
-char168 15873,16890 2 3752
-ad "
-a~ 15873,16959 2 3710
-~ "
-char217 15873,21375,330 2 3801
-`U "
-char219 15873,21375,330 2 3803
-^U "
-char221 15873,21375 2 3805
-'Y "
-char253 15873,17880,4845 3 3837
-'y "
-char176 15873,16155 2 3760
-de "
-char199 15873,15390,5457 3 3783
-,C "
-char231 15873,11775,5469 1 3815
-,c "
-char209 15873,20490,330 2 3793
-~N "
-char241 15873,16959 2 3825
-~n "
-char161 15873,11784,3606 0 3745
-r! "
-char191 15873,11751,3969 0 3775
-r? "
-char164 15873,15834 2 3748
-Cs "
-char163 15873,16155,741 2 3747
-Po "
-char165 15873,15825 2 3749
-Ye "
-char167 15873,15390,1692 2 3751
-sc "
-Fn 15873,16350,3114 2 51871
-char162 15873,15966,1419 2 3746
-ct "
-char226 15873,17880,330 2 3810
-^a "
-char234 15873,17880,330 2 3818
-^e "
-char244 15873,17880,330 2 3828
-^o "
-char251 15873,17880,330 2 3835
-^u "
-char225 15873,17880,330 2 3809
-'a "
-char233 15873,17880,330 2 3817
-'e "
-char243 15873,17880,330 2 3827
-'o "
-char250 15873,17880,330 2 3834
-'u "
-char224 15873,17880,330 2 3808
-`a "
-char232 15873,17880,330 2 3816
-`e "
-char242 15873,17880,330 2 3826
-`o "
-char249 15873,17880,330 2 3833
-`u "
-char228 15873,16890,330 2 3812
-:a "
-char235 15873,16890,330 2 3819
-:e "
-char246 15873,16890,330 2 3830
-:o "
-char252 15873,16890,330 2 3836
-:u "
-char197 15873,21780 2 3781
-oA "
-char238 15873,17880 2 3822
-^i "
-char216 15873,15432,492 2 3800
-/O "
-char198 15873,15060 0 3782
-AE "
-char229 15873,18900,330 2 3813
-oa "
-char237 15873,17880 2 3821
-'i "
-char248 15873,11913,600 0 3832
-/o "
-char230 15873,11775,330 0 3814
-ae "
-char196 15873,20790 2 3780
-:A "
-char236 15873,17880 2 3820
-`i "
-char214 15873,20790,330 2 3798
-:O "
-char220 15873,20790,330 2 3804
-:U "
-char201 15873,21375 2 3785
-'E "
-char239 15873,16890 2 3823
-:i "
-char223 15873,16350,330 2 3807
-ss "
-char212 15873,21375,330 2 3796
-^O "
-char193 15873,21375 2 3777
-'A "
-char195 15873,20490 2 3779
-~A "
-char227 15873,16959,330 2 3811
-~a "
-char208 15873,15060 0 3792
--D "
-char240 15873,18249,330 2 3824
-Sd "
-char205 15873,21375 2 3789
-'I "
-char204 15873,21375 2 3788
-`I "
-char211 15873,21375,330 2 3795
-'O "
-char210 15873,21375,330 2 3794
-`O "
-char213 15873,20490,330 2 3797
-~O "
-char245 15873,16959,330 2 3829
-~o "
-vS 15873,21375,330 2 51795
-vs 15873,17880,330 2 51827
-char218 15873,21375,330 2 3802
-'U "
-:Y 15873,20790 2 51801
-char255 15873,16890,4845 3 3839
-:y "
-char222 15873,15060 0 3806
-TP "
-char254 15873,16350,4845 3 3838
-Tp "
-char181 15873,11445,5580 1 3765
-char182 15873,19635,4080 2 3766
-ps "
-char190 15873,16545,2415 2 3774
-34 "
-\- 15873,7020 0 51757
-char188 15873,16545,2415 2 3772
-14 "
-char189 15873,16545,2415 2 3773
-12 "
-char170 15873,16155 2 3754
-Of "
-char186 15873,16155 2 3770
-Om "
-char171 15873,11595 0 3755
-Fo "
-char187 15873,11595 0 3771
-Fc "
-char177 15873,11535,3360 0 3761
-char166 15873,19083,5916 3 3750
-bb "
-char169 15873,19635 2 3753
-co "
-char172 15873,9420 0 3756
-no "
-char174 15873,19635 2 3758
-rg "
-char178 15873,16035 2 3762
-S2 "
-char179 15873,16035 2 3763
-S3 "
-char184 15873,0,5469 1 3768
-ac "
-char185 15873,16035 2 3769
-S1 "
-char215 15873,11340 0 3799
-char247 15873,11190 0 3831
-char183 15873,10176 0 3767
-pc "
-fm 15873,15825 2 51873
-sd 15873,15825 2 51874
-dg 15873,15060,1185 0 51755
-tm 15873,17850 2 51796
-ah 15873,17880 2 51935
-ao 15873,18900 2 51930
-f/ 15873,16695,2265 2 51759
-em 15873,7440 0 51789
-en 15873,7440 0 51790
-dd 15873,15060,1185 0 51773
-.i 15873,11445 0 51957
-aq 15873,15060 0 3623
-bu 15873,12714 0 51889
-'C 15873,21375,330 2 20166
-'c 15873,17880,330 2 20198
-lq 15873,15060 0 51838
-rq 15873,15060 0 51746
-Bq 15873,4602,2358 0 51772
-vz 15873,17880 2 51834
-fi 15873,16920 2 51881
-fl 15873,16350 2 51882
-ff 15873,16350 2 51883
-Fi 15873,16350 2 51884
-Fl 15873,16350 2 51885
-ij 15873,16920,4845 3 51958
-bq 15873,4605,2355 0 51756
-%0 15873,16275,900 2 51901
-char175 15873,15567 2 3759
-a- "
-ab 15873,17310 2 51926
-a. 15873,16890 2 51927
-oe 15873,11775,330 0 51823
-OE 15873,15060 0 51791
-fo 15873,11085 0 51886
-fc 15873,11085 0 51887
-sq 15873,14106 0 51899
-/L 15873,15060 0 51944
-/l 15873,16350 2 51960
-a" 15873,18720 2 51933
-ho 15873,573,4680 1 51934
-vZ 15873,21375 2 51802
-IJ 15873,15060,3837 0 51942
diff --git a/contrib/groff/devlj4/CBI b/contrib/groff/devlj4/CBI
deleted file mode 100644
index 10f468d..0000000
--- a/contrib/groff/devlj4/CBI
+++ /dev/null
@@ -1,351 +0,0 @@
-name CBI
-spacewidth 15873
-slant 11.300000
-pcltypeface 4099
-pclproportional 0
-pclweight 3
-pclstyle 1
-charset
-! 15873,15060,330,0,-3018 0 3617
-dq 15873,15060,0,0,-2661 0 3618
-" "
-sh 15873,17091,1389,279,363,279 2 3619
-# "
-Do 15873,17007,3306,0,279 2 3620
-$ "
-% 15873,16275,900,0,-396 2 3621
-& 15873,14238,330,0,426 0 3622
-cq 15873,15060,0,0,-2745 0 51751
-' "
-( 15873,16935,2295,0,-3093 2 3624
-) 15873,16935,2295,0,-1824 2 3625
-* 15873,15060,0,0,-1497 0 3626
-+ 15873,11535,0,0,-891 0 3627
-, 15873,4305,2655,0,-1506 0 3628
-char173 15873,8805,0,0,-2319 0 3629
-hy "
-- "
-. 15873,3675,330,0,-2805 0 3630
-sl 15873,18300,3525,1224,1512,614 2 3631
-/ "
-0 15873,16155,330,0,-927 2 3632
-1 15873,16155,0,0,324 2 3633
-2 15873,16155,0,0,1044 2 3634
-3 15873,16155,330,0,891 2 3635
-4 15873,16155,0,0,345 2 3636
-5 15873,15825,330,0,621 2 3637
-6 15873,16155,330,342,-762,342 2 3638
-7 15873,15825,0,0,-1227 2 3639
-8 15873,16155,330,0,-465 2 3640
-9 15873,16155,330,0,297 2 3641
-: 15873,10572,330,0,-2802 0 3642
-; 15873,10572,2655,0,-831 0 3643
-< 15873,11667,243,0,-600 0 3644
-= 15873,8886,0,0,-951 0 3645
-> 15873,11667,243,0,-1524 0 3646
-? 15873,15390,330,0,-2031 2 3647
-at 15873,15273,489,1020,1203,614 2 3648
-@ "
-A 15873,15060,0,69,2868,69 0 3649
-B 15873,15060,0,0,1992 0 3650
-C 15873,15390,330,903,228,614 2 3651
-D 15873,15060,0,369,2277,369 0 3652
-E 15873,15060,0,1254,1719,614 0 3653
-F 15873,15060,0,1527,1293,614 0 3654
-G 15873,15390,330,1224,585,614 2 3655
-H 15873,15060,0,1878,2172,614 0 3656
-I 15873,15060,0,321,615,321 0 3657
-J 15873,15060,330,2331,1152,614 0 3658
-K 15873,15060,0,1890,1569,614 0 3659
-L 15873,15060,0,27,1602,27 0 3660
-M 15873,15060,0,2508,3099,614 0 3661
-N 15873,15060,330,2625,2439,614 0 3662
-O 15873,15390,330,447,633,447 2 3663
-P 15873,15060,0,816,774,614 0 3664
-Q 15873,15390,3408,453,678,453 2 3665
-R 15873,15060,0,0,1977 0 3666
-S 15873,15390,330,0,1386 2 3667
-T 15873,15060,0,1578,210,614 0 3668
-U 15873,15060,330,2124,75,614 0 3669
-V 15873,15060,0,2718,504,614 0 3670
-W 15873,15060,0,2757,552,614 0 3671
-X 15873,15060,0,1509,2286,614 0 3672
-Y 15873,15060,0,2043,-168,614 0 3673
-Z 15873,15060,0,159,1026,159 0 3674
-lB 15873,16935,2295,0,-1995 2 3675
-[ "
-rs 15873,18300,3525,0,-2523 2 3676
-\ "
-rB 15873,16935,2295,0,-1632 2 3677
-] "
-ha 15873,19758,0,0,-1314 2 51875
-_ 15873,191367,6588,1317,1317,614 3 3679
-oq 15873,15060,0,0,-3345 0 51808
-` "
-a 15873,11775,330,0,837 0 3681
-b 15873,16350,330,390,1974,390 2 3682
-c 15873,11775,330,0,282 0 3683
-d 15873,16350,330,183,1038,183 2 3684
-e 15873,11775,330,0,228 0 3685
-f 15873,16350,0,1308,39,614 2 3686
-g 15873,11775,4845,1260,1542,614 1 3687
-h 15873,16350,0,0,2550 2 3688
-i 15873,16920,0,0,606 2 3689
-j 15873,16920,4845,0,1428 3 3690
-k 15873,16350,0,0,2061 2 3691
-l 15873,16350,0,0,570 2 3692
-m 15873,11775,0,417,3222,417 0 3693
-n 15873,11775,0,0,2292 0 3694
-o 15873,11775,330,0,858 0 3695
-p 15873,11775,4845,330,3072,330 1 3696
-q 15873,11775,4845,1644,810,614 1 3697
-r 15873,11775,0,735,1257,614 0 3698
-s 15873,11775,330,0,798 0 3699
-t 15873,14985,330,0,-1245 0 3700
-u 15873,11445,330,0,432 0 3701
-v 15873,11445,0,1554,936,614 0 3702
-w 15873,11445,0,1896,1278,614 0 3703
-x 15873,11445,0,894,2469,614 0 3704
-y 15873,11445,4845,1887,2409,614 1 3705
-z 15873,11445,0,0,498 0 3706
-lC 15873,20130,6075,1548,-2004,614 3 3707
-{ "
-ba 15873,19758,6588,0,-5946 3 3708
-| "
-rC 15873,20130,6075,0,996 3 3709
-} "
-ti 15873,8160,0,0,-792 0 51876
-char192 15873,21495,0,69,2868,69 2 3776
-`A "
-char194 15873,21495,0,69,2868,69 2 3778
-^A "
-char200 15873,21495,0,1254,1719,614 2 3784
-`E "
-char202 15873,21495,0,1254,1719,614 2 3786
-^E "
-char203 15873,20520,0,1254,1719,614 2 3787
-:E "
-char206 15873,21495,0,609,615,609 2 3790
-^I "
-char207 15873,20520,0,321,615,321 2 3791
-:I "
-char180 15873,18000,0,0,-3249 2 3764
-aa "
-ga 15873,18000,0,0,-2835 2 3680
-a^ 15873,18000,0,9,-2343,9 2 3678
-^ "
-char168 15873,16890,0,0,-4020 2 3752
-ad "
-a~ 15873,16959,0,594,-2031,594 2 3710
-~ "
-char217 15873,21495,330,2124,75,614 2 3801
-`U "
-char219 15873,21495,330,2124,75,614 2 3803
-^U "
-char221 15873,21495,0,2043,-168,614 2 3805
-'Y "
-char253 15873,18000,4845,1887,2409,614 3 3837
-'y "
-char176 15873,16155,0,0,-3120 2 3760
-de "
-char199 15873,15390,5721,903,228,614 3 3783
-,C "
-char231 15873,11775,5562,0,282 1 3815
-,c "
-char209 15873,20487,330,2625,2439,614 2 3793
-~N "
-char241 15873,16959,0,594,2292,594 2 3825
-~n "
-char161 15873,11904,3486,0,-3411 0 3745
-r! "
-char191 15873,11868,3852,0,-747 0 3775
-r? "
-char164 15873,15834,0,345,348,345 2 3748
-Cs "
-char163 15873,16155,603,192,-108,192 2 3747
-Po "
-char165 15873,15825,0,2160,-342,614 2 3749
-Ye "
-char167 15873,15390,1692,0,-1332 2 3751
-sc "
-Fn 15873,16350,3135,12,1572,12 2 51871
-char162 15873,15978,1419,0,-1068 2 3746
-ct "
-char226 15873,18000,330,9,837,9 2 3810
-^a "
-char234 15873,18000,330,9,228,9 2 3818
-^e "
-char244 15873,18000,330,9,858,9 2 3828
-^o "
-char251 15873,18000,330,9,432,9 2 3835
-^u "
-char225 15873,18000,330,0,837 2 3809
-'a "
-char233 15873,18000,330,0,228 2 3817
-'e "
-char243 15873,18000,330,0,858 2 3827
-'o "
-char250 15873,18000,330,0,432 2 3834
-'u "
-char224 15873,18000,330,0,837 2 3808
-`a "
-char232 15873,18000,330,0,228 2 3816
-`e "
-char242 15873,18000,330,0,858 2 3826
-`o "
-char249 15873,18000,330,0,432 2 3833
-`u "
-char228 15873,16890,330,0,837 2 3812
-:a "
-char235 15873,16890,330,0,228 2 3819
-:e "
-char246 15873,16890,330,0,858 2 3830
-:o "
-char252 15873,16890,330,0,432 2 3836
-:u "
-char197 15873,21780,0,69,2868,69 2 3781
-oA "
-char238 15873,18000,0,9,606,9 2 3822
-^i "
-char216 15873,15501,528,1206,1434,614 2 3800
-/O "
-char198 15873,15060,0,2391,2655,614 0 3782
-AE "
-char229 15873,18381,330,0,837 2 3813
-oa "
-char237 15873,18000,0,0,606 2 3821
-'i "
-char248 15873,11901,591,486,1311,486 0 3832
-/o "
-char230 15873,11775,330,654,2010,614 0 3814
-ae "
-char196 15873,20520,0,69,2868,69 2 3780
-:A "
-char236 15873,18000,0,0,606 2 3820
-`i "
-char214 15873,20520,330,447,633,447 2 3798
-:O "
-char220 15873,20520,330,2124,75,614 2 3804
-:U "
-char201 15873,21495,0,1254,1719,614 2 3785
-'E "
-char239 15873,16890,0,0,606 2 3823
-:i "
-char223 15873,16350,330,0,2220 2 3807
-ss "
-char212 15873,21495,330,609,633,609 2 3796
-^O "
-char193 15873,21495,0,69,2868,69 2 3777
-'A "
-char195 15873,20487,0,174,2868,174 2 3779
-~A "
-char227 15873,16959,330,594,837,594 2 3811
-~a "
-char208 15873,15060,0,366,2280,366 0 3792
--D "
-char240 15873,18222,330,0,171 2 3824
-Sd "
-char205 15873,21495,0,321,615,321 2 3789
-'I "
-char204 15873,21495,0,321,615,321 2 3788
-`I "
-char211 15873,21495,330,591,633,591 2 3795
-'O "
-char210 15873,21495,330,447,633,447 2 3794
-`O "
-char213 15873,20487,330,1986,633,614 2 3797
-~O "
-char245 15873,16959,330,594,858,594 2 3829
-~o "
-vS 15873,21495,330,984,1386,614 2 51795
-vs 15873,18000,330,9,798,9 2 51827
-char218 15873,21495,330,2124,75,614 2 3802
-'U "
-:Y 15873,20520,0,2043,-168,614 2 51801
-char255 15873,16890,4845,1887,2409,614 3 3839
-:y "
-char222 15873,15060,0,222,2166,222 0 3806
-TP "
-char254 15873,16350,4845,330,3075,330 3 3838
-Tp "
-char181 15873,11445,5580,114,-12,114 1 3765
-char182 15873,19635,4080,0,-1308 2 3766
-ps "
-char190 15873,16674,2286,4155,1086,614 2 3774
-34 "
-\- 15873,7020,0,0,-951 0 51757
-char188 15873,16674,2286,4458,1638,614 2 3772
-14 "
-char189 15873,16674,2286,3384,1857,614 2 3773
-12 "
-char170 15873,16155,0,0,-3528 2 3754
-Of "
-char186 15873,16155,0,0,-3588 2 3770
-Om "
-char171 15873,11625,0,354,1047,354 0 3755
-Fo "
-char187 15873,11625,0,0,1605 0 3771
-Fc "
-char177 15873,11535,3360,0,-891 0 3761
-char166 15873,19083,5916,0,-5946 3 3750
-bb "
-char169 15873,19635,0,225,-1134,225 2 3753
-co "
-char172 15873,9420,0,0,-951 0 3756
-no "
-char174 15873,19635,0,225,-1134,225 2 3758
-rg "
-char178 15873,16170,0,0,-3063 2 3762
-S2 "
-char179 15873,16170,0,0,-3162 2 3763
-S3 "
-char184 15873,0,5562,0,-2265 1 3768
-ac "
-char185 15873,16170,0,0,-3066 2 3769
-S1 "
-char215 15873,11646,0,0,-798 0 3799
-char247 15873,11190,0,0,-1110 0 3831
-char183 15873,10128,0,0,-4290 0 3767
-pc "
-fm 15873,15825,0,0,-5124 2 51873
-sd 15873,15825,0,0,-2748 2 51874
-dg 15873,15060,1185,0,-1776 0 51755
-tm 15873,17850,0,108,-417,108 2 51796
-ah 15873,18000,0,9,-2343,9 2 51935
-ao 15873,18381,0,0,-5319 2 51930
-f/ 15873,16695,2265,2712,2529,614 2 51759
-em 15873,8805,0,1707,1929,614 0 51789
-en 15873,8805,0,0,-363 0 51790
-dd 15873,15060,1185,0,-1776 0 51773
-.i 15873,11445,0,0,606 0 51957
-aq 15873,15060,0,0,-4983 0 3623
-bu 15873,12714,0,0,-1848 0 51889
-'C 15873,21495,330,903,228,614 2 20166
-'c 15873,18000,330,0,282 2 20198
-lq 15873,15060,0,387,-741,387 0 51838
-rq 15873,15060,0,0,-144 0 51746
-Bq 15873,4596,2364,0,1314 0 51772
-vz 15873,18000,0,9,498,9 2 51834
-fi 15873,16920,0,438,2340,438 2 51881
-fl 15873,16350,0,336,2337,336 2 51882
-ff 15873,16350,0,4086,2349,614 2 51883
-Fi 15873,16350,0,2229,2946,614 2 51884
-Fl 15873,16350,0,1425,2949,614 2 51885
-ij 15873,16920,4845,738,1320,614 3 51958
-bq 15873,4596,2364,0,-1647 0 51756
-%0 15873,16275,900,3066,3417,614 2 51901
-char175 15873,16032,0,537,-2187,537 2 3759
-a- "
-ab 15873,17340,0,993,-2841,614 2 51926
-a. 15873,16890,0,0,-6186 2 51927
-oe 15873,11775,330,1284,1977,614 0 51823
-OE 15873,15060,0,2781,1740,614 0 51791
-fo 15873,11070,0,0,-2004 0 51886
-fc 15873,11070,0,0,-1389 0 51887
-sq 15873,14106,0,0,-444 0 51899
-/L 15873,15060,0,27,1602,27 0 51944
-/l 15873,16350,0,0,570 2 51960
-a" 15873,18720,0,2916,-4083,614 2 51933
-ho 15873,564,4665,0,-4917 1 51934
-vZ 15873,21495,0,984,1026,614 2 51802
-IJ 15873,15060,3849,1506,1941,614 0 51942
diff --git a/contrib/groff/devlj4/CI b/contrib/groff/devlj4/CI
deleted file mode 100644
index 8a98a36..0000000
--- a/contrib/groff/devlj4/CI
+++ /dev/null
@@ -1,351 +0,0 @@
-name CI
-spacewidth 15873
-slant 11.300000
-pcltypeface 4099
-pclproportional 0
-pclweight 0
-pclstyle 1
-charset
-! 15873,15060,330,0,-5232 0 3617
-dq 15873,15060,0,0,-4632 0 3618
-" "
-sh 15873,16827,2046,1710,-1473,610 2 3619
-# "
-Do 15873,17259,3642,954,-1644,610 2 3620
-$ "
-% 15873,16380,330,1140,-2169,610 2 3621
-& 15873,14169,330,1563,-1911,610 0 3622
-cq 15873,15060,0,0,-5217 0 51751
-' "
-( 15873,17070,2580,1185,-7563,610 2 3624
-) 15873,17070,2580,0,-2013 2 3625
-* 15873,15060,0,174,-3273,174 0 3626
-+ 15873,11385,0,252,-2151,252 0 3627
-, 15873,3195,3420,0,-3000 0 3628
-char173 15873,6570,0,0,-3741 0 3629
-hy "
-- "
-. 15873,3105,330,0,-5040 0 3630
-sl 15873,18465,3765,2349,-699,610 2 3631
-/ "
-0 15873,15390,330,399,-2832,399 0 3632
-1 15873,15060,0,0,-1494 0 3633
-2 15873,15390,0,423,-786,423 0 3634
-3 15873,15390,330,0,-1113 0 3635
-4 15873,15060,0,0,-1548 0 3636
-5 15873,15060,330,882,-1170,610 0 3637
-6 15873,15390,330,1530,-2436,610 0 3638
-7 15873,15060,0,954,-2829,610 0 3639
-8 15873,15390,330,624,-2226,610 0 3640
-9 15873,15390,330,684,-1659,610 0 3641
-: 15873,9975,330,0,-5043 0 3642
-; 15873,9975,3420,0,-3177 0 3643
-< 15873,10647,3,0,-1155 0 3644
-= 15873,8451,0,252,-2151,252 0 3645
-> 15873,10647,3,0,-1959 0 3646
-? 15873,15390,330,483,-4173,483 0 3647
-at 15873,14391,363,2031,-1359,610 0 3648
-@ "
-A 15873,15060,0,1470,1092,610 0 3649
-B 15873,15060,0,1383,171,610 0 3650
-C 15873,15390,330,2835,-1689,610 0 3651
-D 15873,15060,0,2061,537,610 0 3652
-E 15873,15060,0,2724,-153,610 0 3653
-F 15873,15060,0,3120,-471,610 0 3654
-G 15873,15390,330,2259,-957,610 0 3655
-H 15873,15060,0,3483,285,610 0 3656
-I 15873,15060,0,1764,-1188,610 0 3657
-J 15873,15060,330,3729,-369,610 0 3658
-K 15873,15060,0,3453,-210,610 0 3659
-L 15873,15060,0,1512,-135,610 0 3660
-M 15873,15060,0,4218,1107,610 0 3661
-N 15873,15060,0,4182,738,610 0 3662
-O 15873,15390,330,2058,-1137,610 0 3663
-P 15873,15060,0,2262,-786,610 0 3664
-Q 15873,15390,3357,2037,-1074,610 0 3665
-R 15873,15060,0,1248,234,610 0 3666
-S 15873,15390,330,1893,-804,610 0 3667
-T 15873,15060,0,3183,-1968,610 0 3668
-U 15873,15060,330,4095,-2097,610 0 3669
-V 15873,15060,0,4191,-1725,610 0 3670
-W 15873,15060,0,4260,-1671,610 0 3671
-X 15873,15060,0,3177,522,610 0 3672
-Y 15873,15060,0,3672,-2262,610 0 3673
-Z 15873,15060,0,1707,-807,610 0 3674
-lB 15873,17070,2580,1815,-6345,610 2 3675
-[ "
-rs 15873,18465,3765,0,-4674 2 3676
-\ "
-rB 15873,17070,2580,0,-1221 2 3677
-] "
-ha 15873,19758,0,0,-1314 2 51875
-_ 15873,191367,6588,1317,1317,610 3 3679
-oq 15873,15060,0,0,-6267 0 51808
-` "
-a 15873,11775,330,531,-696,531 0 3681
-b 15873,16500,330,1602,723,610 2 3682
-c 15873,11775,330,1542,-1617,610 0 3683
-d 15873,16500,330,2148,-1143,610 2 3684
-e 15873,11775,330,1269,-1611,610 0 3685
-f 15873,16500,0,2262,-1173,610 2 3686
-g 15873,11775,5145,2622,-96,610 1 3687
-h 15873,16500,0,1179,387,610 2 3688
-i 15873,17235,0,0,-1260 2 3689
-j 15873,17235,5145,0,81 3 3690
-k 15873,16500,0,1857,24,610 2 3691
-l 15873,16500,0,0,-1131 2 3692
-m 15873,11775,0,1746,1188,610 0 3693
-n 15873,11775,0,960,585,610 0 3694
-o 15873,11775,330,1443,-1140,610 0 3695
-p 15873,11775,5145,1500,1920,610 1 3696
-q 15873,11775,5145,3354,-984,610 1 3697
-r 15873,11775,0,2475,-597,610 0 3698
-s 15873,11775,330,915,-1356,610 0 3699
-t 15873,14760,330,738,-3216,610 0 3700
-u 15873,11445,330,726,-1404,610 0 3701
-v 15873,11445,0,3342,-1224,610 0 3702
-w 15873,11445,0,3735,-831,610 0 3703
-x 15873,11445,0,2502,648,610 0 3704
-y 15873,11445,5145,3123,903,610 1 3705
-z 15873,11445,0,1101,-1368,610 0 3706
-lC 15873,20130,6075,2940,-5529,610 3 3707
-{ "
-ba 15873,19758,6588,0,-5946 3 3708
-| "
-rC 15873,20130,6075,0,-1059 3 3709
-} "
-ti 15873,7233,0,0,-1089 0 51876
-char192 15873,21255,0,1470,1092,610 2 3776
-`A "
-char194 15873,21255,0,1707,1092,610 2 3778
-^A "
-char200 15873,21255,0,2724,-153,610 2 3784
-`E "
-char202 15873,21255,0,2724,-153,610 2 3786
-^E "
-char203 15873,20670,0,2724,-153,610 2 3787
-:E "
-char206 15873,21255,0,2157,-1188,610 2 3790
-^I "
-char207 15873,20670,0,1764,-1188,610 2 3791
-:I "
-char180 15873,17640,0,1401,-6675,610 2 3764
-aa "
-ga 15873,17640,0,0,-4491 2 3680
-a^ 15873,17640,0,1257,-4491,610 2 3678
-^ "
-char168 15873,16905,0,0,-6489 2 3752
-ad "
-a~ 15873,16818,0,1788,-4146,610 2 3710
-~ "
-char217 15873,21255,330,4095,-2097,610 2 3801
-`U "
-char219 15873,21255,330,4095,-2097,610 2 3803
-^U "
-char221 15873,21255,0,3672,-2262,610 2 3805
-'Y "
-char253 15873,17640,5145,3123,903,610 3 3837
-'y "
-char176 15873,15390,0,0,-4464 0 3760
-de "
-char199 15873,15390,4815,2835,-1689,610 1 3783
-,C "
-char231 15873,11775,4815,1542,-1617,610 1 3815
-,c "
-char209 15873,20580,0,4182,738,610 2 3793
-~N "
-char241 15873,16818,0,1788,585,610 2 3825
-~n "
-char161 15873,11946,3444,0,-5715 0 3745
-r! "
-char191 15873,11946,3774,0,-2577 0 3775
-r? "
-char164 15873,15684,0,1560,-2253,610 2 3748
-Cs "
-char163 15873,15390,474,1797,-2232,610 0 3747
-Po "
-char165 15873,15060,0,3741,-2178,610 0 3749
-Ye "
-char167 15873,15390,1905,0,-3360 0 3751
-sc "
-Fn 15873,15090,4350,1704,-774,610 0 51871
-char162 15873,16083,1536,900,-3015,610 2 3746
-ct "
-char226 15873,17640,330,1257,-696,610 2 3810
-^a "
-char234 15873,17640,330,1269,-1611,610 2 3818
-^e "
-char244 15873,17640,330,1443,-1140,610 2 3828
-^o "
-char251 15873,17640,330,1257,-1404,610 2 3835
-^u "
-char225 15873,17640,330,1401,-696,610 2 3809
-'a "
-char233 15873,17640,330,1401,-1611,610 2 3817
-'e "
-char243 15873,17640,330,1443,-1140,610 2 3827
-'o "
-char250 15873,17640,330,1401,-1404,610 2 3834
-'u "
-char224 15873,17640,330,531,-696,531 2 3808
-`a "
-char232 15873,17640,330,1269,-1611,610 2 3816
-`e "
-char242 15873,17640,330,1443,-1140,610 2 3826
-`o "
-char249 15873,17640,330,726,-1404,610 2 3833
-`u "
-char228 15873,16905,330,531,-696,531 2 3812
-:a "
-char235 15873,16905,330,1269,-1611,610 2 3819
-:e "
-char246 15873,16905,330,1443,-1140,610 2 3830
-:o "
-char252 15873,16905,330,726,-1404,610 2 3836
-:u "
-char197 15873,21690,0,1470,1092,610 2 3781
-oA "
-char238 15873,17640,0,1257,-1260,610 2 3822
-^i "
-char216 15873,15390,453,2697,-333,610 0 3800
-/O "
-char198 15873,15060,0,2871,855,610 0 3782
-AE "
-char229 15873,17997,330,531,-696,531 2 3813
-oa "
-char237 15873,17640,0,1401,-1260,610 2 3821
-'i "
-char248 15873,11793,330,2241,-291,610 0 3832
-/o "
-char230 15873,11775,330,2148,-189,610 0 3814
-ae "
-char196 15873,20670,0,1470,1092,610 2 3780
-:A "
-char236 15873,17640,0,0,-1260 2 3820
-`i "
-char214 15873,20670,330,2058,-1137,610 2 3798
-:O "
-char220 15873,20670,330,4095,-2097,610 2 3804
-:U "
-char201 15873,21255,0,2724,-153,610 2 3785
-'E "
-char239 15873,16905,0,0,-1260 2 3823
-:i "
-char223 15873,16500,330,1746,-66,610 2 3807
-ss "
-char212 15873,21255,330,2157,-1137,610 2 3796
-^O "
-char193 15873,21255,0,2217,1092,610 2 3777
-'A "
-char195 15873,20580,0,2445,1092,610 2 3779
-~A "
-char227 15873,16818,330,1788,-696,610 2 3811
-~a "
-char208 15873,15060,0,2061,537,610 0 3792
--D "
-char240 15873,18297,330,1614,-1143,610 2 3824
-Sd "
-char205 15873,21255,0,2217,-1188,610 2 3789
-'I "
-char204 15873,21255,0,1764,-1188,610 2 3788
-`I "
-char211 15873,21255,330,2217,-1137,610 2 3795
-'O "
-char210 15873,21255,330,2058,-1137,610 2 3794
-`O "
-char213 15873,20580,330,2895,-1137,610 2 3797
-~O "
-char245 15873,16818,330,1788,-1140,610 2 3829
-~o "
-vS 15873,21255,330,2157,-804,610 2 51795
-vs 15873,17640,330,1257,-1356,610 2 51827
-char218 15873,21255,330,4095,-2097,610 2 3802
-'U "
-:Y 15873,20670,0,3672,-2262,610 2 51801
-char255 15873,16905,5145,3123,903,610 3 3839
-:y "
-char222 15873,15060,0,2421,-756,610 0 3806
-TP "
-char254 15873,16500,5145,1380,2037,610 3 3838
-Tp "
-char181 15873,11445,5595,0,-321 1 3765
-char182 15873,19635,4080,150,-2508,150 2 3766
-ps "
-char190 15873,15498,2655,4026,15,610 0 3774
-34 "
-\- 15873,6435,0,252,-2151,252 0 51757
-char188 15873,15498,2655,4626,-30,610 0 3772
-14 "
-char189 15873,15498,2655,3426,615,610 0 3773
-12 "
-char170 15873,15390,0,0,-5310 0 3754
-Of "
-char186 15873,15390,0,0,-5274 0 3770
-Om "
-char171 15873,11010,0,1230,-2184,610 0 3755
-Fo "
-char187 15873,11010,0,330,-1284,330 0 3771
-Fc "
-char177 15873,11385,2835,252,-2151,252 0 3761
-char166 15873,19083,5916,0,-5946 3 3750
-bb "
-char169 15873,19635,0,2121,-3030,610 2 3753
-co "
-char172 15873,8865,0,252,-2151,252 0 3756
-no "
-char174 15873,19635,0,1839,-2748,610 2 3758
-rg "
-char178 15873,15240,0,0,-4467 0 3762
-S2 "
-char179 15873,15240,0,0,-4548 0 3763
-S3 "
-char184 15873,0,4815,0,-4626 1 3768
-ac "
-char185 15873,15060,0,0,-4830 0 3769
-S1 "
-char215 15873,11340,0,252,-2151,252 0 3799
-char247 15873,10530,0,306,-2205,306 0 3831
-char183 15873,9657,0,0,-6252 0 3767
-pc "
-fm 15873,15060,0,0,-7596 0 51873
-sd 15873,15060,0,0,-5274 0 51874
-dg 15873,15060,1290,0,-4491 0 51755
-tm 15873,17850,0,1896,-2205,610 2 51796
-ah 15873,17640,0,1257,-4491,610 2 51935
-ao 15873,17997,0,0,-7365 2 51930
-f/ 15873,15498,2655,3126,915,610 0 51759
-em 15873,6570,0,3141,264,610 0 51789
-en 15873,6570,0,606,-2142,606 0 51790
-dd 15873,15060,1290,0,-4491 0 51773
-.i 15873,11445,0,0,-1260 0 51957
-aq 15873,15060,0,0,-6936 0 3623
-bu 15873,12714,0,0,-1848 0 51889
-'C 15873,21255,330,2835,-1689,610 2 20166
-'c 15873,17640,330,1542,-1617,610 2 20198
-lq 15873,15060,0,861,-3495,610 0 51838
-rq 15873,15060,0,1011,-3645,610 0 51746
-Bq 15873,3495,3120,0,-1491 0 51772
-vz 15873,17640,0,1257,-1368,610 2 51834
-fi 15873,17235,0,1983,1185,610 2 51881
-fl 15873,16500,0,1806,1185,610 2 51882
-ff 15873,16500,0,5799,1212,610 2 51883
-Fi 15873,16500,0,3705,846,610 2 51884
-Fl 15873,16500,0,2208,852,610 2 51885
-ij 15873,17235,5145,2958,1278,610 3 51958
-bq 15873,3495,3120,0,-3498 0 51756
-%0 15873,16380,330,2361,-471,610 2 51901
-char175 15873,15666,0,1914,-3453,610 2 3759
-a- "
-ab 15873,16395,0,2325,-5001,610 2 51926
-a. 15873,16905,0,0,-8292 2 51927
-oe 15873,11775,330,2334,30,610 0 51823
-OE 15873,15060,0,2799,-390,610 0 51791
-fo 15873,10365,0,0,-4143 0 51886
-fc 15873,10365,0,0,-3543 0 51887
-sq 15873,14106,0,0,-444 0 51899
-/L 15873,15060,0,1515,-135,610 0 51944
-/l 15873,16500,0,0,-1185 2 51960
-a" 15873,18420,0,2355,-6834,610 2 51933
-ho 15873,0,4263,0,-7344 0 51934
-vZ 15873,21255,0,2157,-807,610 2 51802
-IJ 15873,15060,2904,3021,-207,610 0 51942
diff --git a/contrib/groff/devlj4/CLARENDON b/contrib/groff/devlj4/CLARENDON
deleted file mode 100644
index 86f6c00..0000000
--- a/contrib/groff/devlj4/CLARENDON
+++ /dev/null
@@ -1,351 +0,0 @@
-name CLARENDON
-spacewidth 5856
-pcltypeface 4140
-pclproportional 1
-pclweight 3
-pclstyle 4
-ligatures fi fl ff ffi ffl 0
-charset
-! 6342,18300 2 3617
-dq 11709,18645 2 3618
-" "
-sh 11709,18300 2 3619
-# "
-Do 11709,18309,306 2 3620
-$ "
-% 17565,18645,345 2 3621
-& 16587,18645,345 2 3622
-cq 5856,18645 2 51751
-' "
-( 5856,18300,6870 3 3624
-) 5856,18300,6870 3 3625
-* 11709,18645 2 3626
-+ 17565,16545 0 3627
-, 5856,3945,3375 0 3628
-char173 5856,8295 0 3629
-hy "
-- "
-. 5856,3945 0 3630
-sl 5856,18645,345 2 3631
-/ "
-0 11709,18645,345 2 3632
-1 11709,18300 2 3633
-2 11709,18645,345 2 3634
-3 11709,18645,345 2 3635
-4 11709,18300 2 3636
-5 11709,18300,345 2 3637
-6 11709,18645,345 2 3638
-7 11709,18300 2 3639
-8 11709,18645,345 2 3640
-9 11709,18645,345 2 3641
-: 5856,13965 0 3642
-; 5856,13965,3375 0 3643
-< 26346,16068 0 3644
-= 17565,12540 0 3645
-> 26346,16068 0 3646
-? 11709,18300 2 3647
-at 26346,16950,4131 2 3648
-@ "
-A 13662,18300 2 3649
-B 13662,18300 2 3650
-C 12684,18645,345 2 3651
-D 13662,18300 2 3652
-E 13662,18285 2 3653
-F 13173,18300 2 3654
-G 13662,18645,345 2 3655
-H 15126,18300 2 3656
-I 7806,18300 2 3657
-J 11220,18300,345 2 3658
-K 14637,18300 2 3659
-L 12198,18300 2 3660
-M 18051,18300 2 3661
-N 14637,18300 2 3662
-O 13662,18645,345 2 3663
-P 13173,18300 2 3664
-Q 14148,18645,2553 2 3665
-R 15126,18300,345 2 3666
-S 12198,18645,345 2 3667
-T 13662,18300 2 3668
-U 13173,18300,345 2 3669
-V 14148,18300 2 3670
-W 19515,18300 2 3671
-X 13662,18300 2 3672
-Y 13173,18300 2 3673
-Z 12198,18300 2 3674
-lB 5856,18300,5085 3 3675
-[ "
-rs 5856,18645,345 2 3676
-\ "
-rB 5856,18300,5085 3 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 5856,18645 2 51808
-` "
-a 13662,14250,345 0 3681
-b 12684,18300,345 2 3682
-c 11220,14250,345 0 3683
-d 12684,18300,345 2 3684
-e 11709,14250,345 0 3685
-f 8781,18645 2 3686
-g 13662,15165,4605 1 3687
-h 13173,18300 2 3688
-i 6831,18705 2 3689
-j 8295,18705,4605 3 3690
-k 13173,18300 2 3691
-l 6831,18300 2 3692
-m 19515,14250 0 3693
-n 13173,14250 0 3694
-o 12198,14250,345 0 3695
-p 12684,14250,4290 1 3696
-q 12684,14250,4290 1 3697
-r 9759,14250 0 3698
-s 11220,14250,345 0 3699
-t 8295,17265,345 2 3700
-u 13173,13905,345 0 3701
-v 11709,13905 0 3702
-w 17565,13905 0 3703
-x 12198,13905 0 3704
-y 12198,13905,4605 1 3705
-z 10245,13905 0 3706
-lC 13173,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,19935,6210 3 3709
-} "
-ti 26346,9435 0 51876
-char192 13662,23355 2 3776
-`A "
-char194 13662,22755 2 3778
-^A "
-char200 13662,23355 2 3784
-`E "
-char202 13662,22755 2 3786
-^E "
-char203 13662,23325 2 3787
-:E "
-char206 7806,22755 2 3790
-^I "
-char207 7806,23325 2 3791
-:I "
-char180 11709,19305 2 3764
-aa "
-ga 11709,19305 2 3680
-a^ 11709,18180 2 3678
-^ "
-char168 11709,18750 2 3752
-ad "
-a~ 11709,18654 2 3710
-~ "
-char217 13173,23355,345 2 3801
-`U "
-char219 13173,22755,345 2 3803
-^U "
-char221 13173,23355 2 3805
-'Y "
-char253 12198,19305,4605 3 3837
-'y "
-char176 11709,18645 2 3760
-de "
-char199 12684,18645,4725 3 3783
-,C "
-char231 11220,14250,4737 1 3815
-,c "
-char209 14637,23229 2 3793
-~N "
-char241 13173,18654 2 3825
-~n "
-char161 6342,13956,4344 1 3745
-r! "
-char191 11709,13956,4344 1 3775
-r? "
-char164 17565,15834 0 3748
-Cs "
-char163 11709,18645,345 2 3747
-Po "
-char165 11709,18300 2 3749
-Ye "
-char167 11709,19605,6420 3 3751
-sc "
-Fn 11709,18645 2 51871
-char162 11709,16917 2 3746
-ct "
-char226 13662,18180,345 2 3810
-^a "
-char234 11709,18180,345 2 3818
-^e "
-char244 12198,18180,345 2 3828
-^o "
-char251 13173,18180,345 2 3835
-^u "
-char225 13662,19305,345 2 3809
-'a "
-char233 11709,19305,345 2 3817
-'e "
-char243 12198,19305,345 2 3827
-'o "
-char250 13173,19305,345 2 3834
-'u "
-char224 13662,19305,345 2 3808
-`a "
-char232 11709,19305,345 2 3816
-`e "
-char242 12198,19305,345 2 3826
-`o "
-char249 13173,19305,345 2 3833
-`u "
-char228 13662,18750,345 2 3812
-:a "
-char235 11709,18750,345 2 3819
-:e "
-char246 12198,18750,345 2 3830
-:o "
-char252 13173,18750,345 2 3836
-:u "
-char197 13662,25200 2 3781
-oA "
-char238 6831,18180 2 3822
-^i "
-char216 13662,18645,345 2 3800
-/O "
-char198 22932,18285 2 3782
-AE "
-char229 13662,21195,345 2 3813
-oa "
-char237 6831,19305 2 3821
-'i "
-char248 12198,14250,345 0 3832
-/o "
-char230 18051,14250,345 0 3814
-ae "
-char196 13662,23325 2 3780
-:A "
-char236 6831,19305 2 3820
-`i "
-char214 13662,23325,345 2 3798
-:O "
-char220 13173,23325,345 2 3804
-:U "
-char201 13662,23355 2 3785
-'E "
-char239 6831,18750 2 3823
-:i "
-char223 13173,18645 2 3807
-ss "
-char212 13662,22755,345 2 3796
-^O "
-char193 13662,23355 2 3777
-'A "
-char195 13662,23229 2 3779
-~A "
-char227 13662,18654,345 2 3811
-~a "
-char208 13662,18300 2 3792
--D "
-char240 12198,19083,345 2 3824
-Sd "
-char205 7806,23355 2 3789
-'I "
-char204 7806,23355 2 3788
-`I "
-char211 13662,23355,345 2 3795
-'O "
-char210 13662,23355,345 2 3794
-`O "
-char213 13662,23229,345 2 3797
-~O "
-char245 12198,18654,345 2 3829
-~o "
-vS 12198,22755,345 2 51795
-vs 11220,18180,345 2 51827
-char218 13173,23355,345 2 3802
-'U "
-:Y 13173,23325 2 51801
-char255 12198,18750,4605 3 3839
-:y "
-char222 13173,18300 2 3806
-TP "
-char254 12684,18300,4290 3 3838
-Tp "
-char181 14637,10800,5193 1 3765
-char182 12198,19635,4200 3 3766
-ps "
-char190 17565,18645,345 2 3774
-34 "
-\- 17565,10200 0 51757
-char188 17565,18645,345 2 3772
-14 "
-char189 17565,18645,345 2 3773
-12 "
-char170 11709,18645 2 3754
-Of "
-char186 11709,18645 2 3770
-Om "
-char171 12198,12195 0 3755
-Fo "
-char187 12198,12195 0 3771
-Fc "
-char177 17565,16500 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 17565,13479 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 7806,18480 2 3762
-S2 "
-char179 7806,18480 2 3763
-S3 "
-char184 11709,108,4737 1 3768
-ac "
-char185 7806,18300 2 3769
-S1 "
-char215 17565,16782 0 3799
-char247 17565,15045 0 3831
-char183 5856,11745 0 3767
-pc "
-fm 5856,18645 2 51873
-sd 10245,18645 2 51874
-dg 11709,18300,4575 3 51755
-tm 16101,17550 2 51796
-ah 11709,18180 2 51935
-ao 11709,21195 2 51930
-f/ 3903,18645,345 2 51759
-em 17565,8295 0 51789
-en 11709,8295 0 51790
-dd 11709,18300,4575 3 51773
-.i 6831,13905 0 51957
-aq 5856,18645 2 3623
-bu 13173,14226 0 51889
-'C 12684,23355,345 2 20166
-'c 11220,19305,345 2 20198
-lq 10734,18645 2 51838
-rq 10734,18645 2 51746
-Bq 10734,3615,3705 0 51772
-vz 10245,18180 2 51834
-fi 15612,18705 2 51881
-fl 15612,18645 2 51882
-ff 17076,18645 2 51883
-Fi 24396,18705 2 51884
-Fl 24396,18645 2 51885
-ij 14637,18705,4605 3 51958
-bq 5856,3615,3705 0 51756
-%0 23418,18645,345 2 51901
-char175 11709,16920 2 3759
-a- "
-ab 11709,19080 2 51926
-a. 11709,18750 2 51927
-oe 18051,14250,345 0 51823
-OE 20979,18645,345 2 51791
-fo 7806,12195 0 51886
-fc 7806,12195 0 51887
-sq 19029,15624 0 51899
-/L 12198,18300 2 51944
-/l 6831,18300 2 51960
-a" 11709,19305 2 51933
-ho 11709,1062,4353 1 51934
-vZ 12198,22755 2 51802
-IJ 19029,18300,345 2 51942
diff --git a/contrib/groff/devlj4/CORONET b/contrib/groff/devlj4/CORONET
deleted file mode 100644
index 9dcecce..0000000
--- a/contrib/groff/devlj4/CORONET
+++ /dev/null
@@ -1,351 +0,0 @@
-name CORONET
-spacewidth 13227
-slant 12.000000
-pcltypeface 4102
-pclproportional 0
-pclweight 0
-pclstyle 1
-charset
-! 13227,18990,330 2 3617
-dq 13227,18990 2 3618
-" "
-sh 13227,21309,2451 2 3619
-# "
-Do 13227,19320,1074 2 3620
-$ "
-% 13227,19320,330 2 3621
-& 13227,19320,330 2 3622
-cq 13227,19320 2 51751
-' "
-( 13227,19320,1935 2 3624
-) 13227,19320,1935 2 3625
-* 13227,18990 2 3626
-+ 13227,15075 0 3627
-, 13227,1785,2250 0 3628
-char173 13227,7995 0 3629
-hy "
-- "
-. 13227,2100,330 0 3630
-sl 13227,19545,330 2 3631
-/ "
-0 13227,19320,330 2 3632
-1 13227,19320 2 3633
-2 13227,19320 2 3634
-3 13227,19320,330 2 3635
-4 13227,19320 2 3636
-5 13227,18990,330 2 3637
-6 13227,19320,330 2 3638
-7 13227,18990 2 3639
-8 13227,19320,330 2 3640
-9 13227,19320,330 2 3641
-: 13227,12492,330 0 3642
-; 13227,12492,2250 0 3643
-< 13227,15063 0 3644
-= 13227,11721 0 3645
-> 13227,15063 0 3646
-? 13227,19320,330 2 3647
-at 13227,19320,330 2 3648
-@ "
-A 13227,18990 2 3649
-B 13227,18990 2 3650
-C 13227,19320,330 2 3651
-D 13227,18990 2 3652
-E 13227,18990 2 3653
-F 13227,18990 2 3654
-G 13227,19320,330 2 3655
-H 13227,18990 2 3656
-I 13227,18990 2 3657
-J 13227,18990,330 2 3658
-K 13227,18990 2 3659
-L 13227,18990 2 3660
-M 13227,18990 2 3661
-N 13227,18990 2 3662
-O 13227,19320,330 2 3663
-P 13227,18990 2 3664
-Q 13227,19320,2778 2 3665
-R 13227,18990 2 3666
-S 13227,19320,330 2 3667
-T 13227,18990 2 3668
-U 13227,18990,330 2 3669
-V 13227,18990 2 3670
-W 13227,18990 2 3671
-X 13227,18990 2 3672
-Y 13227,18990 2 3673
-Z 13227,18990 2 3674
-lB 13227,18990,2940 2 3675
-[ "
-rs 13227,19545,330 2 3676
-\ "
-rB 13227,18990,2940 2 3677
-] "
-ha 13227,19758 2 51875
-_ 13227,191367,6588 3 3679
-oq 13227,19326 2 51808
-` "
-a 13227,14355,330 0 3681
-b 13227,19545,330 2 3682
-c 13227,14355,330 0 3683
-d 13227,19545,330 2 3684
-e 13227,14355,330 0 3685
-f 13227,19335 2 3686
-g 13227,14355,4350 0 3687
-h 13227,19545 2 3688
-i 13227,18780 2 3689
-j 13227,18780,4350 2 3690
-k 13227,19545 2 3691
-l 13227,19545 2 3692
-m 13227,14355 0 3693
-n 13227,14355 0 3694
-o 13227,14355,330 0 3695
-p 13227,14355,5475 1 3696
-q 13227,14355,5475 1 3697
-r 13227,14355 0 3698
-s 13227,14355,330 0 3699
-t 13227,18495,330 2 3700
-u 13227,14025,330 0 3701
-v 13227,14025 0 3702
-w 13227,14025 0 3703
-x 13227,14025 0 3704
-y 13227,14025,4350 0 3705
-z 13227,14025 0 3706
-lC 13227,20130,6075 3 3707
-{ "
-ba 13227,19758,6588 3 3708
-| "
-rC 13227,20130,6075 3 3709
-} "
-ti 13227,10485 0 51876
-char192 13227,24630 2 3776
-`A "
-char194 13227,24810 2 3778
-^A "
-char200 13227,24630 2 3784
-`E "
-char202 13227,24810 2 3786
-^E "
-char203 13227,23115 2 3787
-:E "
-char206 13227,24810 2 3790
-^I "
-char207 13227,23115 2 3791
-:I "
-char180 13227,19725 2 3764
-aa "
-ga 13227,19725 2 3680
-a^ 13227,19905 2 3678
-^ "
-char168 13227,18195 2 3752
-ad "
-a~ 13227,18873 2 3710
-~ "
-char217 13227,24630,330 2 3801
-`U "
-char219 13227,24810,330 2 3803
-^U "
-char221 13227,24630 2 3805
-'Y "
-char253 13227,19725,4350 2 3837
-'y "
-char176 13227,19320 2 3760
-de "
-char199 13227,19320,5325 3 3783
-,C "
-char231 13227,14355,5295 1 3815
-,c "
-char209 13227,23814 2 3793
-~N "
-char241 13227,18873 2 3825
-~n "
-char161 13227,14271,5049 1 3745
-r! "
-char191 13227,14214,5436 1 3775
-r? "
-char164 13227,15684 0 3748
-Cs "
-char163 13227,19320,330 2 3747
-Po "
-char165 13227,18990 2 3749
-Ye "
-char167 13227,19320,1344 2 3751
-sc "
-Fn 13227,19335,3540 2 51871
-char162 13227,19320,330 2 3746
-ct "
-char226 13227,19905,330 2 3810
-^a "
-char234 13227,19905,330 2 3818
-^e "
-char244 13227,19905,330 2 3828
-^o "
-char251 13227,19905,330 2 3835
-^u "
-char225 13227,19725,330 2 3809
-'a "
-char233 13227,19725,330 2 3817
-'e "
-char243 13227,19725,330 2 3827
-'o "
-char250 13227,19725,330 2 3834
-'u "
-char224 13227,19725,330 2 3808
-`a "
-char232 13227,19725,330 2 3816
-`e "
-char242 13227,19725,330 2 3826
-`o "
-char249 13227,19725,330 2 3833
-`u "
-char228 13227,18195,330 2 3812
-:a "
-char235 13227,18195,330 2 3819
-:e "
-char246 13227,18195,330 2 3830
-:o "
-char252 13227,18195,330 2 3836
-:u "
-char197 13227,24810 2 3781
-oA "
-char238 13227,19905 2 3822
-^i "
-char216 13227,19320,342 2 3800
-/O "
-char198 13227,18990 2 3782
-AE "
-char229 13227,19905,330 2 3813
-oa "
-char237 13227,19725 2 3821
-'i "
-char248 13227,14895,735 0 3832
-/o "
-char230 13227,14355,330 0 3814
-ae "
-char196 13227,23115 2 3780
-:A "
-char236 13227,19725 2 3820
-`i "
-char214 13227,23115,330 2 3798
-:O "
-char220 13227,23115,330 2 3804
-:U "
-char201 13227,24630 2 3785
-'E "
-char239 13227,18195 2 3823
-:i "
-char223 13227,19335,330 2 3807
-ss "
-char212 13227,24810,330 2 3796
-^O "
-char193 13227,24630 2 3777
-'A "
-char195 13227,23814 2 3779
-~A "
-char227 13227,18873,330 2 3811
-~a "
-char208 13227,18990 2 3792
--D "
-char240 13227,19545,330 2 3824
-Sd "
-char205 13227,24630 2 3789
-'I "
-char204 13227,24630 2 3788
-`I "
-char211 13227,24630,330 2 3795
-'O "
-char210 13227,24630,330 2 3794
-`O "
-char213 13227,23814,330 2 3797
-~O "
-char245 13227,18873,330 2 3829
-~o "
-vS 13227,24810,330 2 51795
-vs 13227,19905,330 2 51827
-char218 13227,24630,330 2 3802
-'U "
-:Y 13227,23115 2 51801
-char255 13227,18195,4350 2 3839
-:y "
-char222 13227,18990 2 3806
-TP "
-char254 13227,19545,5475 3 3838
-Tp "
-char181 13227,14025,4350 0 3765
-char182 13227,19635,4200 2 3766
-ps "
-char190 13227,19110,3825 2 3774
-34 "
-\- 13227,9945 0 51757
-char188 13227,19110,3825 2 3772
-14 "
-char189 13227,19110,3825 2 3773
-12 "
-char170 13227,19320 2 3754
-Of "
-char186 13227,19320 2 3770
-Om "
-char171 13227,13710 0 3755
-Fo "
-char187 13227,13710 0 3771
-Fc "
-char177 13227,15075 0 3761
-char166 13227,19083,5916 3 3750
-bb "
-char169 13227,19635 2 3753
-co "
-char172 13227,12501 0 3756
-no "
-char174 13227,19635 2 3758
-rg "
-char178 13227,19110 2 3762
-S2 "
-char179 13227,19110 2 3763
-S3 "
-char184 13227,0,5295 1 3768
-ac "
-char185 13227,19110 2 3769
-S1 "
-char215 13227,14814 0 3799
-char247 13227,14655 0 3831
-char183 13227,11007 0 3767
-pc "
-fm 13227,18990 2 51873
-sd 13227,18990 2 51874
-dg 13227,18990 2 51755
-tm 13227,17850 2 51796
-ah 13227,19905 2 51935
-ao 13227,19905 2 51930
-f/ 13227,15675,777 0 51759
-em 13227,7710 0 51789
-en 13227,7710 0 51790
-dd 13227,18990 2 51773
-.i 13227,14025 0 51957
-aq 13227,18990 2 3623
-bu 13227,12714 0 51889
-'C 13227,24630,330 2 20166
-'c 13227,19725,330 2 20198
-lq 13227,19326 2 51838
-rq 13227,19320 2 51746
-Bq 13227,2214,2091 0 51772
-vz 13227,19905 2 51834
-fi 13227,19335 2 51881
-fl 13227,19335 2 51882
-ff 13227,19335 2 51883
-Fi 13227,19335 2 51884
-Fl 13227,19335 2 51885
-ij 13227,18780,4350 2 51958
-bq 13227,2214,2091 0 51756
-%0 13227,19320,330 2 51901
-char175 13227,18051 2 3759
-a- "
-ab 13227,19350 2 51926
-a. 13227,18195 2 51927
-oe 13227,14355,330 0 51823
-OE 13227,19320,330 2 51791
-fo 13227,13710 0 51886
-fc 13227,13710 0 51887
-sq 13227,14106 0 51899
-/L 13227,18990 2 51944
-/l 13227,19545 2 51960
-a" 13227,19725 2 51933
-ho 13227,735,4086 0 51934
-vZ 13227,24810 2 51802
-IJ 13227,18990,330 2 51942
diff --git a/contrib/groff/devlj4/CR b/contrib/groff/devlj4/CR
deleted file mode 100644
index c6da8a6..0000000
--- a/contrib/groff/devlj4/CR
+++ /dev/null
@@ -1,350 +0,0 @@
-name CR
-spacewidth 15873
-pcltypeface 4099
-pclproportional 0
-pclweight 0
-pclstyle 0
-charset
-! 15873,15060,330 0 3617
-dq 15873,15060 0 3618
-" "
-sh 15873,16827,2040 2 3619
-# "
-Do 15873,17247,3642 2 3620
-$ "
-% 15873,16380,330 2 3621
-& 15873,14187,330 0 3622
-cq 15873,15060 0 51751
-' "
-( 15873,17070,2580 2 3624
-) 15873,17070,2580 2 3625
-* 15873,15060 0 3626
-+ 15873,11385 0 3627
-, 15873,3195,3420 0 3628
-char173 15873,7275 0 3629
-hy "
-- "
-. 15873,2805,330 0 3630
-sl 15873,18465,3765 2 3631
-/ "
-0 15873,15390,330 0 3632
-1 15873,15060 0 3633
-2 15873,15390 0 3634
-3 15873,15390,330 0 3635
-4 15873,15060 0 3636
-5 15873,15060,330 0 3637
-6 15873,15390,330 0 3638
-7 15873,15060 0 3639
-8 15873,15390,330 0 3640
-9 15873,15390,330 0 3641
-: 15873,9705,393 0 3642
-; 15873,9705,3420 0 3643
-< 15873,10647,3 0 3644
-= 15873,8451 0 3645
-> 15873,10647,3 0 3646
-? 15873,15390,330 0 3647
-at 15873,14391,363 0 3648
-@ "
-A 15873,15060 0 3649
-B 15873,15060 0 3650
-C 15873,15390,330 0 3651
-D 15873,15060 0 3652
-E 15873,15060 0 3653
-F 15873,15060 0 3654
-G 15873,15390,330 0 3655
-H 15873,15060 0 3656
-I 15873,15060 0 3657
-J 15873,15060,330 0 3658
-K 15873,15060 0 3659
-L 15873,15060 0 3660
-M 15873,15060 0 3661
-N 15873,15060 0 3662
-O 15873,15390,330 0 3663
-P 15873,15060 0 3664
-Q 15873,15390,3360 0 3665
-R 15873,15060 0 3666
-S 15873,15390,330 0 3667
-T 15873,15060 0 3668
-U 15873,15060,330 0 3669
-V 15873,15060 0 3670
-W 15873,15060 0 3671
-X 15873,15060 0 3672
-Y 15873,15060 0 3673
-Z 15873,15060 0 3674
-lB 15873,17070,2580 2 3675
-[ "
-rs 15873,18465,3765 2 3676
-\ "
-rB 15873,17070,2580 2 3677
-] "
-ha 15873,19758 2 51875
-_ 15873,191367,6588 3 3679
-oq 15873,15060 0 51808
-` "
-a 15873,11775,330 0 3681
-b 15873,16500,330 2 3682
-c 15873,11775,330 0 3683
-d 15873,16500,330 2 3684
-e 15873,11775,330 0 3685
-f 15873,16500 2 3686
-g 15873,11775,5145 1 3687
-h 15873,16500 2 3688
-i 15873,17235 2 3689
-j 15873,17235,5145 3 3690
-k 15873,16500 2 3691
-l 15873,16500 2 3692
-m 15873,11775 0 3693
-n 15873,11775 0 3694
-o 15873,11775,330 0 3695
-p 15873,11775,5145 1 3696
-q 15873,11775,5145 1 3697
-r 15873,11775 0 3698
-s 15873,11775,330 0 3699
-t 15873,14826,330 0 3700
-u 15873,11445,330 0 3701
-v 15873,11445 0 3702
-w 15873,11445 0 3703
-x 15873,11445 0 3704
-y 15873,11445,5145 1 3705
-z 15873,11445 0 3706
-lC 15873,20130,6075 3 3707
-{ "
-ba 15873,19758,6588 3 3708
-| "
-rC 15873,20130,6075 3 3709
-} "
-ti 15873,7233 0 51876
-char192 15873,21180 2 3776
-`A "
-char194 15873,21180 2 3778
-^A "
-char200 15873,21180 2 3784
-`E "
-char202 15873,21180 2 3786
-^E "
-char203 15873,20670 2 3787
-:E "
-char206 15873,21180 2 3790
-^I "
-char207 15873,20670 2 3791
-:I "
-char180 15873,17565 2 3764
-aa "
-ga 15873,17565 2 3680
-a^ 15873,17565 2 3678
-^ "
-char168 15873,16905 2 3752
-ad "
-a~ 15873,16830 2 3710
-~ "
-char217 15873,21180,330 2 3801
-`U "
-char219 15873,21180,330 2 3803
-^U "
-char221 15873,21180 2 3805
-'Y "
-char253 15873,17565,5145 3 3837
-'y "
-char176 15873,15390 0 3760
-de "
-char199 15873,15390,5175 1 3783
-,C "
-char231 15873,11775,4815 1 3815
-,c "
-char209 15873,20571 2 3793
-~N "
-char241 15873,16830 2 3825
-~n "
-char161 15873,11880,3510 0 3745
-r! "
-char191 15873,11898,3822 0 3775
-r? "
-char164 15873,15684 2 3748
-Cs "
-char163 15873,15390,330 0 3747
-Po "
-char165 15873,15060 0 3749
-Ye "
-char167 15873,15390,1905 0 3751
-sc "
-Fn 15873,15090,4350 0 51871
-char162 15873,16179,1431 2 3746
-ct "
-char226 15873,17565,330 2 3810
-^a "
-char234 15873,17565,330 2 3818
-^e "
-char244 15873,17565,330 2 3828
-^o "
-char251 15873,17565,330 2 3835
-^u "
-char225 15873,17565,330 2 3809
-'a "
-char233 15873,17565,330 2 3817
-'e "
-char243 15873,17565,330 2 3827
-'o "
-char250 15873,17565,330 2 3834
-'u "
-char224 15873,17565,330 2 3808
-`a "
-char232 15873,17565,330 2 3816
-`e "
-char242 15873,17565,330 2 3826
-`o "
-char249 15873,17565,330 2 3833
-`u "
-char228 15873,16905,330 2 3812
-:a "
-char235 15873,16905,330 2 3819
-:e "
-char246 15873,16905,330 2 3830
-:o "
-char252 15873,16905,330 2 3836
-:u "
-char197 15873,21690 2 3781
-oA "
-char238 15873,17565 2 3822
-^i "
-char216 15873,15591,612 2 3800
-/O "
-char198 15873,15060 0 3782
-AE "
-char229 15873,17997,330 2 3813
-oa "
-char237 15873,17565 2 3821
-'i "
-char248 15873,11856,459 0 3832
-/o "
-char230 15873,11775,330 0 3814
-ae "
-char196 15873,20670 2 3780
-:A "
-char236 15873,17565 2 3820
-`i "
-char214 15873,20670,330 2 3798
-:O "
-char220 15873,20670,330 2 3804
-:U "
-char201 15873,21180 2 3785
-'E "
-char239 15873,16905 2 3823
-:i "
-char223 15873,16500,330 2 3807
-ss "
-char212 15873,21180,330 2 3796
-^O "
-char193 15873,21180 2 3777
-'A "
-char195 15873,20571 2 3779
-~A "
-char227 15873,16830,330 2 3811
-~a "
-char208 15873,15060 0 3792
--D "
-char240 15873,18015,330 2 3824
-Sd "
-char205 15873,21180 2 3789
-'I "
-char204 15873,21180 2 3788
-`I "
-char211 15873,21180,330 2 3795
-'O "
-char210 15873,21180,330 2 3794
-`O "
-char213 15873,20571,330 2 3797
-~O "
-char245 15873,16830,330 2 3829
-~o "
-vS 15873,21180,330 2 51795
-vs 15873,17565,330 2 51827
-char218 15873,21180,330 2 3802
-'U "
-:Y 15873,20670 2 51801
-char255 15873,16905,5145 3 3839
-:y "
-char222 15873,15060 0 3806
-TP "
-char254 15873,16500,5145 3 3838
-Tp "
-char181 15873,11445,5595 1 3765
-char182 15873,19635,4080 2 3766
-ps "
-char190 15873,15519,2673 2 3774
-34 "
-\- 15873,6435 0 51757
-char188 15873,15519,2673 2 3772
-14 "
-char189 15873,15519,2673 2 3773
-12 "
-char170 15873,15390 0 3754
-Of "
-char186 15873,15390 0 3770
-Om "
-char171 15873,11490 0 3755
-Fo "
-char187 15873,11490 0 3771
-Fc "
-char177 15873,11385,2835 0 3761
-char166 15873,19083,5916 3 3750
-bb "
-char169 15873,19635 2 3753
-co "
-char172 15873,8865 0 3756
-no "
-char174 15873,19635 2 3758
-rg "
-char178 15873,15240 0 3762
-S2 "
-char179 15873,15240 0 3763
-S3 "
-char184 15873,0,4815 1 3768
-ac "
-char185 15873,15060 0 3769
-S1 "
-char215 15873,11340 0 3799
-char247 15873,10530 0 3831
-char183 15873,8931 0 3767
-pc "
-fm 15873,15060 0 51873
-sd 15873,15060 0 51874
-dg 15873,15060,1290 0 51755
-tm 15873,17850 2 51796
-ah 15873,17565 2 51935
-ao 15873,17997 2 51930
-f/ 15873,15519,2673 2 51759
-em 15873,7275 0 51789
-en 15873,7275 0 51790
-dd 15873,15060,1290 0 51773
-.i 15873,11445 0 51957
-aq 15873,15060 0 3623
-bu 15873,12714 0 51889
-'C 15873,21180,330 2 20166
-'c 15873,17565,330 2 20198
-lq 15873,15060 0 51838
-rq 15873,15060 0 51746
-Bq 15873,3495,3120 0 51772
-vz 15873,17565 2 51834
-fi 15873,17235 2 51881
-fl 15873,16500 2 51882
-ff 15873,16500 2 51883
-Fi 15873,16500 2 51884
-Fl 15873,16500 2 51885
-ij 15873,17235,5145 3 51958
-bq 15873,3495,3120 0 51756
-%0 15873,16380,330 2 51901
-char175 15873,15726 2 3759
-a- "
-ab 15873,16725 2 51926
-a. 15873,16905 2 51927
-oe 15873,11775,330 0 51823
-OE 15873,15060 0 51791
-fo 15873,10845 0 51886
-fc 15873,10845 0 51887
-sq 15873,14106 0 51899
-/L 15873,15060 0 51944
-/l 15873,16500 2 51960
-a" 15873,18195 2 51933
-ho 15873,0,4263 0 51934
-vZ 15873,21180 2 51802
-IJ 15873,15060,2850 0 51942
diff --git a/contrib/groff/devlj4/DESC.in b/contrib/groff/devlj4/DESC.in
deleted file mode 100644
index b726647..0000000
--- a/contrib/groff/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/devlj4/GB b/contrib/groff/devlj4/GB
deleted file mode 100644
index 5433de6..0000000
--- a/contrib/groff/devlj4/GB
+++ /dev/null
@@ -1,749 +0,0 @@
-name GB
-spacewidth 7317
-pcltypeface 4197
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2925
-P . -3903
-P , -3903
-V A -3414
-A V -4389
-T o -4389
-T r -2925
-T c -3903
-T e -3903
-T d -3903
-T s -2925
-T y -3414
-T a -2925
-T w -3414
-T u -2925
-L T -2925
-L Y -2925
-Y o -3903
-Y e -3414
-Y a -3414
-A W -4389
-W A -3414
-T A -2925
-V o -3414
-V e -2925
-V a -2925
-Y A -3414
-F A -2439
-F . -3903
-F , -3903
-A T -2925
-A Y -3414
-v . -2439
-v , -2439
-y . -2439
-y , -2439
-T . -2925
-T , -2925
-L W -2925
-P A -2439
-V . -3903
-V , -3903
-Y . -3414
-Y , -3414
-W o -3414
-W e -2925
-W a -2925
-W . -3903
-W , -3903
-r . -1950
-r , -1950
-w . -975
-w , -975
-Y u -2439
-A v -1950
-A y -1950
-A w -1950
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -1461
-b , -1461
-O T -1950
-O V -1950
-O Y -1950
-O . -1950
-O , -1950
-L y -975
-V y -1950
-V u -1950
-V O -1950
-V G -1950
-V C -1950
-V Q -1950
-D T -1950
-D V -1950
-D Y -1950
-D . -1950
-D , -1950
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -1461
-F e -975
-F a -975
-O A -975
-O W -1950
-L U -486
-R T -1950
-R V -1950
-R Y -1950
-R W -1950
-G T -486
-P o -1461
-P g -975
-P e -975
-P a -975
-D A -975
-D W -1950
-B T -975
-B Y -975
-B . -975
-B , -975
-A O -975
-A G -975
-A C -975
-A U -1461
-A Q -975
-W r -1950
-W y -1950
-W u -1950
-W O -1950
-W G -1950
-W C -1950
-W Q -1950
-J A -486
-J . -486
-J , -486
-U A -1461
-U . -1950
-U , -1950
-Q A -975
-Q W -1950
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -486
-G V -486
-G Y -486
-G W -486
-G . -486
-G , -486
-P T -975
-P V -975
-P Y -975
-D X -1461
-B V -975
-B X -975
-B A -975
-B W -975
-S . -975
-S , -975
-X o -1461
-X e -975
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -975
-Q X -1461
-K o -1461
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -1461
-o y -1461
-o x -1461
-o w -1461
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -975
-p v -975
-p y -975
-p x -975
-v o -1461
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -486
-e y -486
-b v -975
-b y -975
-b w -975
-s . -486
-s , -486
-y o -1461
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-x o -1461
-x c -975
-x e -975
-x d -975
-x q -975
-a v -975
-a y -975
-a w -975
-w o -1461
-w g -975
-w c -975
-w d -975
-w a -975
-w q -975
-T S -975
-R o -1461
-R y -1461
-R O -1461
-R G -1461
-R C -1461
-R U -1461
-R Q -1461
-G X -486
-G A -486
-P s -486
-P Z -975
-P X -975
-P W -975
-V S -975
-S A -975
-Y S -975
-A t -486
-A c -975
-A d -975
-A q -975
-W S -975
-K c -975
-o f -486
-h w -975
-n w -975
-m w -975
-r o -1461
-r c -975
-r e -975
-r d -975
-r a -975
-r q -975
-p w -975
-v e -975
-v s -486
-e x -486
-e w -486
-y e -975
-y s -486
-f o -1461
-f c -975
-f e -975
-f d -975
-f q -975
-w e -975
-w s -486
-k o -975
-k c -486
-k e -486
-k d -486
-k q -486
-O Z -975
-R e -975
-G Z -486
-E o -486
-E v -975
-E y -975
-E w -975
-Z o -486
-Z y -975
-Z w -975
-D Z -975
-B Z -975
-J o -486
-U g -486
-t o -975
-t c -486
-t e -486
-t d -486
-t q -486
-o t -486
-o g -486
-o z -975
-o j -486
-r s -486
-g o -975
-g c -486
-g e -486
-g d -486
-g q -486
-p z -486
-e z -486
-z o -975
-z c -486
-z e -486
-z d -486
-z q -486
-b z -486
-C o -486
-C y -975
-B o -486
-B y -486
-B S -486
-B U -486
-U o -975
-U c -486
-U e -486
-U d -486
-U s -486
-U a -486
-U q -486
-L cq -2925
-L ' -2925
-T char173 -3414
-T hy -3414
-T - -3414
-T en -3414
-T em -3414
-A cq -2925
-A ' -2925
-char173 T -3414
-hy T -3414
-- T -3414
-en T -3414
-em T -3414
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -1461
-p ' -1461
-e cq -486
-e ' -486
-b cq -975
-b ' -975
-a cq -975
-a ' -975
-V char173 -1950
-V hy -1950
-V - -1950
-V en -1950
-V em -1950
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-R cq -1461
-R ' -1461
-W char173 -1950
-W hy -1950
-W - -1950
-W en -1950
-W em -1950
-cq d -1461
-' d -1461
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -975
-A hy -975
-A - -975
-A en -975
-A em -975
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -486
-' s -486
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-R char173 -1461
-R hy -1461
-R - -1461
-R en -1461
-R em -1461
-G cq -486
-G ' -486
-B cq -486
-B ' -486
-charset
-! 7317,18948,390 2 3617
-dq 10734,18987 2 3618
-" "
-sh 13173,17805,390 0 3619
-# "
-Do 13173,19584,1779 2 3620
-$ "
-% 21954,17805,390 0 3621
-& 22443,18165,390 0 3622
-cq 6831,18555 2 51751
-' "
-( 8295,20250,6705 3 3624
-) 8295,20250,6705 3 3625
-* 13173,18555 2 3626
-+ 21954,13467,87 0 3627
-, 7317,3972,4152 0 3628
-char173 7317,7575 0 3629
-hy "
-- "
-. 7317,3915,390 0 3630
-sl 13173,20250,300 2 3631
-/ "
-0 13173,17805,390 0 3632
-1 13173,17805,150 0 3633
-2 13173,17805,150 0 3634
-3 13173,17805,390 0 3635
-4 13173,17805 0 3636
-5 13173,17490,390 0 3637
-6 13173,17805,390 0 3638
-7 13173,17415,390 0 3639
-8 13173,17805,390 0 3640
-9 13173,17805,390 0 3641
-: 7317,11940,390 0 3642
-; 7317,11940,4152 0 3643
-< 26346,16068 0 3644
-= 21954,9654 0 3645
-> 26346,16068 0 3646
-? 10245,18948,390 2 3647
-at 21954,16950,4131 0 3648
-@ "
-A 20004,18939,150 2 3649
-B 17565,18315,150 2 3650
-C 20004,18555,390 2 3651
-D 21954,18555,150 2 3652
-E 16587,18315,150 2 3653
-F 16587,18315,150 2 3654
-G 21468,18555,390 2 3655
-H 23418,18315,150 2 3656
-I 10245,18315,150 2 3657
-J 9759,18315,6363 3 3658
-K 19515,18315,150 2 3659
-L 16101,18315,150 2 3660
-M 24882,18315,390 2 3661
-N 22443,18315,612 2 3662
-O 22932,18555,390 2 3663
-P 16587,18555,150 2 3664
-Q 22932,18555,5253 2 3665
-R 19515,18315,150 2 3666
-S 14148,18555,390 2 3667
-T 17565,19500,138 2 3668
-U 21468,18315,390 2 3669
-V 19515,18315,390 2 3670
-W 26346,18315,390 2 3671
-X 20004,18315,150 2 3672
-Y 18540,18315,150 2 3673
-Z 17565,19500,150 2 3674
-lB 8295,18165,4905 0 3675
-[ "
-rs 13173,20250,300 2 3676
-\ "
-rB 8295,18165,4905 0 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 6831,18555 2 51808
-` "
-a 12198,12420,390 0 3681
-b 14637,20250,390 2 3682
-c 11220,12420,390 0 3683
-d 14637,20250,390 2 3684
-e 11709,12420,390 0 3685
-f 9270,20250,150 2 3686
-g 14148,12420,6705 1 3687
-h 15612,20250,150 2 3688
-i 7806,19329,150 2 3689
-j 7317,19329,6705 3 3690
-k 14637,20250,150 2 3691
-l 7806,20250,150 2 3692
-m 22932,12420,150 0 3693
-n 15612,12420,150 0 3694
-o 14148,12420,390 0 3695
-p 14637,12420,6855 1 3696
-q 14637,12420,6855 1 3697
-r 11220,12420,150 0 3698
-s 9759,12420,390 0 3699
-t 9759,15585,390 0 3700
-u 15612,12420,390 0 3701
-v 14148,12180,390 0 3702
-w 20004,12180,390 0 3703
-x 14148,12180,150 0 3704
-y 13662,12180,6705 1 3705
-z 12684,12870,150 0 3706
-lC 13173,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,19935,6210 3 3709
-} "
-ti 26346,9435 0 51876
-char192 20004,24810,150 2 3776
-`A "
-char194 20004,24810,150 2 3778
-^A "
-char200 16587,24810,150 2 3784
-`E "
-char202 16587,24810,150 2 3786
-^E "
-char203 16587,23505,150 2 3787
-:E "
-char206 10245,24810,150 2 3790
-^I "
-char207 10245,23505,150 2 3791
-:I "
-char180 13173,20475 2 3764
-aa "
-ga 13173,20475 2 3680
-a^ 13173,20475 2 3678
-^ "
-char168 13173,18090 0 3752
-ad "
-a~ 13173,18324 2 3710
-~ "
-char217 21468,24810,390 2 3801
-`U "
-char219 21468,24810,390 2 3803
-^U "
-char221 18540,24810,150 2 3805
-'Y "
-char253 13662,20475,6705 3 3837
-'y "
-char176 13173,17415 0 3760
-de "
-char199 20004,18555,6405 3 3783
-,C "
-char231 11220,12420,5694 0 3815
-,c "
-char209 22443,23973,612 2 3793
-~N "
-char241 15612,18324,150 2 3825
-~n "
-char161 7317,12330,7008 1 3745
-r! "
-char191 10245,12330,7008 1 3775
-r? "
-char164 13173,15834 0 3748
-Cs "
-char163 13173,17805,390 0 3747
-Po "
-char165 13173,18315,150 2 3749
-Ye "
-char167 13173,18555,6705 3 3751
-sc "
-Fn 13173,20250,6705 3 51871
-char162 13173,18012,57 0 3746
-ct "
-char226 12198,20475,390 2 3810
-^a "
-char234 11709,20475,390 2 3818
-^e "
-char244 14148,20475,390 2 3828
-^o "
-char251 15612,20475,390 2 3835
-^u "
-char225 12198,20475,390 2 3809
-'a "
-char233 11709,20475,390 2 3817
-'e "
-char243 14148,20475,390 2 3827
-'o "
-char250 15612,20475,390 2 3834
-'u "
-char224 12198,20475,390 2 3808
-`a "
-char232 11709,20475,390 2 3816
-`e "
-char242 14148,20475,390 2 3826
-`o "
-char249 15612,20475,390 2 3833
-`u "
-char228 12198,18090,390 0 3812
-:a "
-char235 11709,18090,390 0 3819
-:e "
-char246 14148,18090,390 0 3830
-:o "
-char252 15612,18090,390 0 3836
-:u "
-char197 20004,25065,150 2 3781
-oA "
-char238 7806,20475,150 2 3822
-^i "
-char216 22932,18729,390 2 3800
-/O "
-char198 25857,18315,150 2 3782
-AE "
-char229 12198,19836,390 2 3813
-oa "
-char237 7806,20475,150 2 3821
-'i "
-char248 14148,12525,804 0 3832
-/o "
-char230 18051,12420,390 0 3814
-ae "
-char196 20004,23505,150 2 3780
-:A "
-char236 7806,20475,150 2 3820
-`i "
-char214 22932,23505,390 2 3798
-:O "
-char220 21468,23505,390 2 3804
-:U "
-char201 16587,24810,150 2 3785
-'E "
-char239 7806,18090,150 0 3823
-:i "
-char223 15612,20250,390 2 3807
-ss "
-char212 22932,24810,390 2 3796
-^O "
-char193 20004,24810,150 2 3777
-'A "
-char195 20004,23973,150 2 3779
-~A "
-char227 12198,18324,390 2 3811
-~a "
-char208 21954,18555,150 2 3792
--D "
-char240 14148,20250,390 2 3824
-Sd "
-char205 10245,24810,150 2 3789
-'I "
-char204 10245,24810,150 2 3788
-`I "
-char211 22932,24810,390 2 3795
-'O "
-char210 22932,24810,390 2 3794
-`O "
-char213 22932,23973,390 2 3797
-~O "
-char245 14148,18324,390 2 3829
-~o "
-vS 14148,24810,390 2 51795
-vs 9759,20475,390 2 51827
-char218 21468,24810,390 2 3802
-'U "
-:Y 18540,23505,150 2 51801
-char255 13662,18090,6705 1 3839
-:y "
-char222 16587,18315,153 2 3806
-TP "
-char254 14637,20250,6855 3 3838
-Tp "
-char181 14637,10800,5193 0 3765
-char182 13173,19635,4200 2 3766
-ps "
-char190 21954,17805,390 0 3774
-34 "
-\- 21954,7755 0 51757
-char188 21954,17805,390 0 3772
-14 "
-char189 21954,17805,390 0 3773
-12 "
-char170 12198,17805 0 3754
-Of "
-char186 12198,17805 0 3770
-Om "
-char171 12684,10605 0 3755
-Fo "
-char187 12684,10605 0 3771
-Fc "
-char177 21954,13467,3354 0 3761
-char166 13173,19083,5916 2 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 21954,10560 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 9270,17805 0 3762
-S2 "
-char179 9270,17805 0 3763
-S3 "
-char184 13173,57,5694 0 3768
-ac "
-char185 9270,17805 0 3769
-S1 "
-char215 21954,13470,144 0 3799
-char247 21954,13383,3 0 3831
-char183 7317,10722 0 3767
-pc "
-fm 13173,17805 0 51873
-sd 13173,17805 0 51874
-dg 13173,18555,6579 3 51755
-tm 16101,17550 0 51796
-ah 13173,20475 2 51935
-ao 13173,19836 2 51930
-f/ 2928,17805,390 0 51759
-em 21954,7185 0 51789
-en 13173,7185 0 51790
-dd 13173,18555,4905 2 51773
-.i 7806,12420,150 0 51957
-aq 6831,18987 2 3623
-bu 13173,14226 0 51889
-'C 20004,24810,390 2 20166
-'c 11220,20475,390 2 20198
-lq 12198,18555 2 51838
-rq 12198,18555 2 51746
-Bq 12198,3714,3519 0 51772
-vz 12684,20475,150 2 51834
-fi 15612,20250,150 2 51881
-fl 15612,20250,150 2 51882
-ff 17076,20250,150 2 51883
-Fi 23418,20250,150 2 51884
-Fl 23418,20250,150 2 51885
-ij 15126,19329,6705 3 51958
-bq 6831,3714,3519 0 51756
-%0 30249,17805,180 0 51901
-char175 13173,17088 0 3759
-a- "
-ab 13173,17079 0 51926
-a. 13173,18471 2 51927
-oe 20979,12420,390 0 51823
-OE 28299,18555,390 2 51791
-fo 8295,10605 0 51886
-fc 8295,10605 0 51887
-sq 19029,15624 0 51899
-/L 16101,18315,150 2 51944
-/l 7806,20250,150 2 51960
-a" 13173,20475 2 51933
-ho 13173,993,4317 0 51934
-vZ 17565,24810,150 2 51802
-IJ 20004,18315,6363 3 51942
diff --git a/contrib/groff/devlj4/GBI b/contrib/groff/devlj4/GBI
deleted file mode 100644
index 806237c..0000000
--- a/contrib/groff/devlj4/GBI
+++ /dev/null
@@ -1,752 +0,0 @@
-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 -4878
-P . -4389
-P , -4389
-V A -4389
-A V -4389
-T o -4389
-T r -3414
-T c -3903
-T e -3903
-T d -3903
-T s -3414
-T y -3903
-T a -3903
-T w -3903
-T u -3414
-L T -3414
-L Y -3903
-Y o -3903
-Y e -3903
-Y a -4389
-A W -4389
-W A -3414
-T A -3414
-V o -2925
-V e -2925
-V a -3414
-Y A -4389
-F A -2439
-F . -3903
-F , -3903
-A T -3414
-A Y -3903
-v . -1461
-v , -1461
-y . -975
-y , -975
-T . -3414
-T , -3414
-L W -4878
-P A -2925
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -2439
-W e -2439
-W a -2925
-W . -3414
-W , -3414
-r . -1950
-r , -1950
-w . -1461
-w , -1461
-Y u -2925
-A v -1950
-A y -1950
-A w -1950
-o . -975
-o , -975
-p . -975
-p , -975
-b . -1950
-b , -1950
-O T -1950
-O V -1950
-O Y -1950
-O . -975
-O , -975
-L y -2925
-L O -1950
-L G -1950
-L C -1950
-L Q -1950
-V y -1950
-V u -1950
-V O -975
-V G -975
-V C -975
-V Q -975
-D T -1950
-D V -1950
-D Y -1950
-D . -975
-D , -975
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -975
-F e -975
-F a -975
-O A -975
-O W -1950
-L U -1950
-R T -1950
-R V -1950
-R Y -1950
-R W -1950
-G T -975
-P o -975
-P e -975
-P a -1461
-D A -975
-D W -1950
-B T -975
-B Y -975
-B . -975
-B , -975
-A O -1461
-A G -1461
-A C -1461
-A U -1950
-A Q -1461
-W r -1461
-W y -1461
-W u -1461
-W O -975
-W G -975
-W C -975
-W Q -975
-J A -486
-J . -486
-J , -486
-U A -1461
-U . -1461
-U , -1461
-Q A -975
-Q W -1950
-T O -975
-T G -975
-T C -975
-T Q -975
-O X -975
-L o -975
-L e -975
-L q -486
-G V -975
-G Y -975
-G W -975
-P T -975
-P V -975
-P Y -975
-C T -486
-C V -486
-C Y -486
-D X -975
-B V -975
-B X -975
-B A -975
-B W -975
-X o -975
-X e -975
-X y -1461
-X O -975
-X G -975
-X C -975
-X Q -975
-A o -975
-A e -975
-Q X -975
-K o -975
-K e -975
-K y -1461
-K w -1461
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -975
-o y -975
-o x -975
-o w -975
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-p v -486
-p y -486
-p x -486
-v o -486
-b v -486
-b y -486
-b w -486
-y o -486
-x o -975
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-w o -975
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T i -975
-L a -486
-R o -975
-R y -975
-R O -975
-R G -975
-R C -975
-R U -975
-R Q -975
-P Z -975
-P X -975
-P W -975
-C W -486
-V i -975
-Y i -975
-X a -486
-A g -486
-A c -975
-A d -975
-A a -486
-A q -486
-W i -975
-K c -975
-o f -486
-h w -486
-h . -486
-h , -486
-n w -486
-n . -486
-n , -486
-m w -486
-m . -486
-m , -486
-r o -975
-r c -975
-r e -975
-r d -975
-r a -975
-r q -975
-p w -486
-f o -486
-w e -486
-w s -486
-k o -486
-O Z -975
-L J -486
-R e -975
-R a -486
-E o -486
-E v -486
-E y -486
-E w -486
-Z o -975
-Z e -975
-Z d -975
-Z y -1461
-Z a -486
-Z w -1461
-Z O -975
-Z G -975
-Z C -975
-Z Q -975
-D Z -975
-B Z -975
-A J -486
-J o -486
-K a -486
-t o -486
-o t -486
-o g -486
-o z -486
-o j -486
-g o -486
-v y -486
-v x -486
-v w -486
-z o -486
-w t -486
-w h -486
-w n -486
-w m -486
-w l -486
-w r -486
-w i -486
-w p -486
-w v -486
-w z -486
-w b -486
-w y -486
-w f -486
-w x -486
-w w -486
-w j -486
-w u -486
-w k -486
-R J -486
-C o -486
-E T -486
-E V -486
-E Y -486
-E W -486
-E U -486
-B o -486
-B y -486
-B U -486
-U o -486
-L cq -4878
-L ' -4878
-T char173 -3903
-T hy -3903
-T - -3903
-T en -3903
-T em -3903
-A cq -2439
-A ' -2439
-char173 T -3903
-hy T -3903
-- T -3903
-en T -3903
-em T -3903
-Y char173 -2925
-Y hy -2925
-Y - -2925
-Y en -2925
-Y em -2925
-p cq -486
-p ' -486
-b cq -975
-b ' -975
-V char173 -1950
-V hy -1950
-V - -1950
-V en -1950
-V em -1950
-h cq -486
-h ' -486
-n cq -486
-n ' -486
-m cq -486
-m ' -486
-R cq -975
-R ' -975
-W char173 -1461
-W hy -1461
-W - -1461
-W en -1461
-W em -1461
-cq d -975
-' d -975
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-v cq -486
-v ' -486
-w cq -486
-w ' -486
-E cq -486
-E ' -486
-Z char173 -1461
-Z hy -1461
-Z - -1461
-Z en -1461
-Z em -1461
-B cq -486
-B ' -486
-w char173 -486
-w hy -486
-w - -486
-w en -486
-w em -486
-charset
-! 6831,18717,390,2859,345,962 2 3617
-dq 11220,18555,0,1827,-2346,962 2 3618
-" "
-sh 13173,17415,390,1542,33,962 0 3619
-# "
-Do 13173,19182,2292,1161,255,962 2 3620
-$ "
-% 21954,17805,582,0,-1386 0 3621
-& 18540,18555,390,1743,-672,962 2 3622
-cq 6831,18555,0,2763,-1368,962 2 51751
-' "
-( 7806,20172,6930,4779,306,962 3 3624
-) 7806,20172,6930,822,4263,822 3 3625
-* 13173,18555,0,1908,-1731,962 2 3626
-+ 21954,13467,87,0,-2871 0 3627
-, 6831,3381,4077,0,687 0 3628
-char173 6831,7575,0,882,558,882 0 3629
-hy "
-- "
-. 6831,3486,390,0,-270 0 3630
-sl 13173,18594,390,4080,1101,962 2 3631
-/ "
-0 13173,17805,390,1212,-213,962 0 3632
-1 13173,17805,150,279,-567,279 0 3633
-2 13173,17805,150,1017,1179,962 0 3634
-3 13173,17805,390,336,1731,336 0 3635
-4 13173,17805,0,1485,699,962 0 3636
-5 13173,17415,390,1881,-714,962 0 3637
-6 13173,17805,390,1575,111,962 0 3638
-7 13173,17415,390,2856,-1332,962 0 3639
-8 13173,17805,390,1428,21,962 0 3640
-9 13173,17805,390,1536,72,962 0 3641
-: 6831,12177,390,1032,-270,962 0 3642
-; 6831,12177,4077,1032,687,962 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 21954,9654,0,0,-2877 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 10245,18705,390,2250,-1023,962 2 3647
-at 21954,16950,4131,1743,1035,962 0 3648
-@ "
-A 19515,18555,195,15,1764,15 2 3649
-B 16587,18555,195,1047,1806,962 2 3650
-C 19515,18555,390,2028,-837,962 2 3651
-D 20490,18555,195,1566,1323,962 2 3652
-E 16587,18360,195,1848,1476,962 2 3653
-F 15126,18360,195,3372,1542,962 2 3654
-G 20979,18555,390,1476,-1074,962 2 3655
-H 21468,18360,195,3429,1671,962 2 3656
-I 10245,18360,195,3429,1542,962 2 3657
-J 9270,18360,6219,3918,4407,962 3 3658
-K 19029,18360,195,2877,1482,962 2 3659
-L 16587,18360,195,900,1431,900 2 3660
-M 22932,18360,195,2907,2571,962 2 3661
-N 20979,18360,195,3810,1401,962 2 3662
-O 21954,18555,390,1014,-807,962 2 3663
-P 16587,18555,195,1896,1236,962 2 3664
-Q 21954,18555,6639,1014,-807,962 3 3665
-R 19515,18555,195,63,1344,63 2 3666
-S 13173,18555,390,2022,732,962 2 3667
-T 18051,19425,195,4188,-1452,962 2 3668
-U 21468,18360,390,3498,-1761,962 2 3669
-V 19515,18360,390,3597,-1551,962 2 3670
-W 26346,18360,390,4203,-1437,962 2 3671
-X 19029,18360,195,3300,1851,962 2 3672
-Y 19515,18360,195,3228,-2169,962 2 3673
-Z 17565,19425,195,1575,285,962 2 3674
-lB 7806,18165,4614,4290,2805,962 0 3675
-[ "
-rs 13173,18717,390,0,-2868 2 3676
-\ "
-rB 7806,18165,4614,3402,3693,962 0 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,962 3 3679
-oq 6831,18555,0,3195,-1800,962 2 51808
-` "
-a 13662,13143,390,1143,663,962 0 3681
-b 14637,20250,390,714,351,714 2 3682
-c 11220,12420,390,1695,438,962 0 3683
-d 14637,20250,390,2610,417,962 2 3684
-e 11220,12420,390,1365,429,962 0 3685
-f 7806,20250,6705,5985,4074,962 3 3686
-g 12684,12420,6705,2031,2331,962 1 3687
-h 14637,20250,390,555,657,555 2 3688
-i 8295,18765,390,1344,498,962 2 3689
-j 7806,18765,6705,2169,3789,962 3 3690
-k 14148,20250,390,858,426,858 2 3691
-l 7806,20250,390,2595,252,962 2 3692
-m 21468,12420,390,291,255,291 0 3693
-n 14637,12420,390,486,57,486 0 3694
-o 12684,12420,390,459,339,459 0 3695
-p 14637,13893,6735,639,3318,639 1 3696
-q 14148,12420,6900,1143,501,962 1 3697
-r 10245,12420,0,2187,390,962 0 3698
-s 8781,12420,390,873,903,873 0 3699
-t 8295,14937,390,2001,312,962 0 3700
-u 14148,12420,390,813,111,813 0 3701
-v 15126,12420,390,759,324,759 0 3702
-w 20490,12420,390,1065,462,962 0 3703
-x 12684,12420,390,1731,1635,962 0 3704
-y 13173,12420,6705,1029,1767,962 1 3705
-z 11220,12885,195,2064,2046,962 0 3706
-lC 13173,19935,6210,3339,-972,962 2 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 13173,19935,6210,63,2304,63 2 3709
-} "
-ti 26346,9435,0,0,-4029 0 51876
-char192 19515,24843,195,15,1764,15 2 3776
-`A "
-char194 19515,25182,195,15,1764,15 2 3778
-^A "
-char200 16587,24843,195,1848,1476,962 2 3784
-`E "
-char202 16587,25182,195,1848,1476,962 2 3786
-^E "
-char203 16587,23439,195,1848,1476,962 2 3787
-:E "
-char206 10245,25182,195,4377,1542,962 2 3790
-^I "
-char207 10245,23439,195,3792,1542,962 2 3791
-:I "
-char180 13173,19668,0,1317,-6054,962 2 3764
-aa "
-ga 13173,19668,0,0,-2961 2 3680
-a^ 13173,20514,0,285,-3393,285 2 3678
-^ "
-char168 13173,18057,0,1161,-3669,962 0 3752
-ad "
-a~ 13173,18468,0,1074,-3600,962 2 3710
-~ "
-char217 21468,24843,390,3498,-1761,962 2 3801
-`U "
-char219 21468,25182,390,3498,-1761,962 2 3803
-^U "
-char221 19515,24843,195,3228,-2169,962 2 3805
-'Y "
-char253 13173,19668,6705,1317,1767,962 3 3837
-'y "
-char176 13173,17415,0,600,-1974,600 0 3760
-de "
-char199 19515,18555,6060,2028,-837,962 2 3783
-,C "
-char231 11220,12420,4776,1695,438,962 0 3815
-,c "
-char209 20979,24255,195,3810,1401,962 2 3793
-~N "
-char241 14637,18468,390,486,57,486 2 3825
-~n "
-char161 6831,12411,6696,834,2370,834 1 3745
-r! "
-char191 10245,12405,6690,0,1686 1 3775
-r? "
-char164 13173,15834,0,2349,1044,962 0 3748
-Cs "
-char163 13173,17262,390,951,1173,951 0 3747
-Po "
-char165 13173,18090,150,3885,-1269,962 0 3749
-Ye "
-char167 13173,18555,6705,525,-69,525 3 3751
-sc "
-Fn 13173,20250,6705,3279,1419,962 3 51871
-char162 13173,17613,417,1263,-1290,962 0 3746
-ct "
-char226 13662,20514,390,1143,663,962 2 3810
-^a "
-char234 11220,20514,390,1365,429,962 2 3818
-^e "
-char244 12684,20514,390,531,339,531 2 3828
-^o "
-char251 14148,20514,390,813,111,813 2 3835
-^u "
-char225 13662,19668,390,1143,663,962 2 3809
-'a "
-char233 11220,19668,390,2295,429,962 2 3817
-'e "
-char243 12684,19668,390,1563,339,962 2 3827
-'o "
-char250 14148,19668,390,831,111,831 2 3834
-'u "
-char224 13662,19668,390,1143,663,962 2 3808
-`a "
-char232 11220,19668,390,1365,429,962 2 3816
-`e "
-char242 12684,19668,390,459,339,459 2 3826
-`o "
-char249 14148,19668,390,813,111,813 2 3833
-`u "
-char228 13662,18057,390,1143,663,962 0 3812
-:a "
-char235 11220,18057,390,2139,429,962 0 3819
-:e "
-char246 12684,18057,390,1407,339,962 0 3830
-:o "
-char252 14148,18057,390,813,111,813 0 3836
-:u "
-char197 19515,24900,195,15,1764,15 2 3781
-oA "
-char238 8295,20514,390,2724,459,962 2 3822
-^i "
-char216 21954,18555,390,1125,-696,962 2 3800
-/O "
-char198 25857,18360,195,870,2910,870 2 3782
-AE "
-char229 13662,18861,390,1377,663,962 2 3813
-oa "
-char237 8295,19668,390,3756,459,962 2 3821
-'i "
-char248 12684,12420,390,552,444,552 0 3832
-/o "
-char230 18540,13047,390,1296,477,962 0 3814
-ae "
-char196 19515,23439,195,15,1764,15 2 3780
-:A "
-char236 8295,19668,390,663,459,663 2 3820
-`i "
-char214 21954,23439,390,1014,-807,962 2 3798
-:O "
-char220 21468,23439,390,3498,-1761,962 2 3804
-:U "
-char201 16587,24843,195,1848,1476,962 2 3785
-'E "
-char239 8295,18057,390,3600,459,962 0 3823
-:i "
-char223 14148,20250,6705,2916,4902,962 3 3807
-ss "
-char212 21954,25182,390,1014,-807,962 2 3796
-^O "
-char193 19515,24843,195,15,1764,15 2 3777
-'A "
-char195 19515,24255,195,648,1764,648 2 3779
-~A "
-char227 13662,18468,390,1143,663,962 2 3811
-~a "
-char208 20490,18555,342,1557,1314,962 2 3792
--D "
-char240 12684,20250,390,600,339,600 2 3824
-Sd "
-char205 10245,24843,195,3540,1542,962 2 3789
-'I "
-char204 10245,24843,195,3429,1542,962 2 3788
-`I "
-char211 21954,24843,390,1014,-807,962 2 3795
-'O "
-char210 21954,24843,390,1014,-807,962 2 3794
-`O "
-char213 21954,24255,390,1014,-807,962 2 3797
-~O "
-char245 12684,18468,390,1320,339,962 2 3829
-~o "
-vS 13173,24657,390,3903,732,962 2 51795
-vs 8781,20526,390,4242,903,962 2 51827
-char218 21468,24843,390,3498,-1761,962 2 3802
-'U "
-:Y 19515,23439,195,3228,-2169,962 2 51801
-char255 13173,18057,6705,1161,1767,962 1 3839
-:y "
-char222 16587,18360,195,846,1221,846 2 3806
-TP "
-char254 14637,20250,6900,663,3342,663 3 3838
-Tp "
-char181 14637,10800,5193,582,756,582 0 3765
-char182 13173,19635,4200,1032,-690,962 2 3766
-ps "
-char190 21954,17805,180,0,-627 0 3774
-34 "
-\- 21954,7755,0,0,-2892 0 51757
-char188 21954,17625,180,0,-1242 0 3772
-14 "
-char189 21954,17625,180,0,-1317 0 3773
-12 "
-char170 11220,17805,0,1833,-1338,962 0 3754
-Of "
-char186 11220,17805,0,1218,-1776,962 0 3770
-Om "
-char171 11220,9906,0,837,609,837 0 3755
-Fo "
-char187 11220,9906,0,435,1011,435 0 3771
-Fc "
-char177 21954,13467,3354,0,-2865 0 3761
-char166 13173,19083,5916,0,-4596 2 3750
-bb "
-char169 13173,19725,0,5022,-3198,962 2 3753
-co "
-char172 21954,10560,0,0,-2565 0 3756
-no "
-char174 13173,19725,0,5022,-3198,962 2 3758
-rg "
-char178 8781,17805,0,2001,-606,962 0 3762
-S2 "
-char179 8781,17805,0,1881,-387,962 0 3763
-S3 "
-char184 13173,657,4776,0,-1791 0 3768
-ac "
-char185 8781,17625,0,1389,-1590,962 0 3769
-S1 "
-char215 21954,13530,192,0,-2934 0 3799
-char247 21954,13383,3,0,-2886 0 3831
-char183 6831,10533,0,336,-1116,336 0 3767
-pc "
-fm 13173,17415,0,0,-1461 0 51873
-sd 13173,17415,0,1680,-1461,962 0 51874
-dg 13173,18555,6657,1035,186,962 3 51755
-tm 16101,17550,0,5508,-3159,962 0 51796
-ah 13173,20526,0,2367,-5475,962 2 51935
-ao 13173,18861,0,285,-5313,285 2 51930
-f/ 2928,17625,180,8301,6948,962 0 51759
-em 21954,7185,0,666,-45,666 0 51789
-en 13173,7185,0,537,-72,537 0 51790
-dd 13173,18555,4989,990,243,962 2 51773
-.i 8295,12420,390,288,459,288 0 51957
-aq 6831,18555,0,2289,-2826,962 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 19515,24843,390,2028,-837,962 2 20166
-'c 11220,19668,390,1995,438,962 2 20198
-lq 11220,18555,0,4245,-1419,962 2 51838
-rq 11220,18555,0,3423,-597,962 2 51746
-Bq 11220,3456,4002,0,3399 0 51772
-vz 11220,20526,195,3345,2046,962 2 51834
-fi 14637,20250,6705,1566,3645,962 3 51881
-fl 14637,20250,6705,2934,3735,962 3 51882
-ff 14637,20250,6705,5373,3861,962 3 51883
-Fi 21468,20250,6705,1701,3675,962 3 51884
-Fl 21468,20250,6705,2832,3765,962 3 51885
-ij 14637,18765,6705,2169,498,962 3 51958
-bq 6831,3456,4002,0,2925 0 51756
-%0 30249,17805,450,0,-1386 0 51901
-char175 13173,16974,0,438,-4107,438 0 3759
-a- "
-ab 13173,17325,0,1386,-5277,962 0 51926
-a. 13173,18057,0,0,-6510 0 51927
-oe 19029,12420,390,1338,357,962 0 51823
-OE 27321,18555,390,1932,-528,962 2 51791
-fo 6831,9906,0,999,792,962 0 51886
-fc 6831,9906,0,423,1368,423 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 16587,18360,195,900,1431,900 2 51944
-/l 7806,20250,390,2580,444,962 2 51960
-a" 13173,19830,0,3630,-3816,962 2 51933
-ho 13173,711,4791,0,-4011 0 51934
-vZ 17565,24657,195,1707,285,962 2 51802
-IJ 19515,18360,6219,3918,1542,962 3 51942
diff --git a/contrib/groff/devlj4/GI b/contrib/groff/devlj4/GI
deleted file mode 100644
index 6ca1893..0000000
--- a/contrib/groff/devlj4/GI
+++ /dev/null
@@ -1,686 +0,0 @@
-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 -3903
-P . -4389
-P , -4389
-V A -3414
-A V -3414
-T o -4878
-T r -3414
-T c -4389
-T e -4389
-T d -4389
-T s -3414
-T y -4389
-T a -3903
-T w -4389
-T u -3414
-L T -3903
-L Y -3414
-Y o -3903
-Y e -3903
-Y a -3903
-A W -3414
-W A -3414
-T A -3414
-V o -2925
-V e -2925
-V a -2925
-Y A -3414
-F A -2439
-F . -3903
-F , -3903
-A T -3414
-A Y -3414
-v . -1461
-v , -1461
-y . -975
-y , -975
-T . -3414
-T , -3414
-L W -3414
-P A -2925
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -2925
-W e -2925
-W a -2925
-W . -3903
-W , -3903
-r . -1950
-r , -1950
-w . -1461
-w , -1461
-Y u -2439
-A v -1950
-A y -1950
-A w -1950
-o . -1461
-o , -1461
-p . -975
-p , -975
-b . -1950
-b , -1950
-O T -1950
-O V -1950
-O Y -1950
-O . -975
-O , -975
-V y -1461
-V u -1461
-V O -975
-V G -975
-V C -975
-V Q -975
-D T -1950
-D V -1950
-D Y -1950
-D . -975
-D , -975
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -1461
-F e -975
-F a -975
-O A -975
-O W -1950
-R T -2925
-R V -2925
-R Y -2925
-R W -2925
-G T -975
-P o -1461
-P e -1461
-P a -1461
-D A -975
-D W -1950
-B T -975
-B Y -975
-B . -975
-B , -975
-A O -1950
-A G -1950
-A C -1950
-A U -1950
-A Q -1950
-W r -1461
-W y -1461
-W u -1461
-W O -975
-W G -975
-W C -975
-W Q -975
-U A -975
-U . -975
-U , -975
-Q A -975
-Q W -1950
-T O -975
-T G -975
-T C -975
-T Q -975
-O X -975
-L o -486
-G V -975
-G Y -975
-G W -975
-P T -975
-P V -975
-P Y -975
-D X -975
-B V -975
-B X -975
-B A -975
-B W -975
-F r -486
-F y -486
-F u -486
-F O -486
-F G -486
-F C -486
-F Q -486
-X o -1461
-X e -1461
-X y -1461
-X O -975
-X G -975
-X C -975
-X Q -975
-A o -1461
-A e -1461
-Q X -975
-K o -1461
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -486
-o x -486
-o w -486
-v o -486
-y o -486
-x o -975
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-w o -486
-R o -1461
-R y -1461
-R O -1461
-R G -1461
-R C -1461
-R U -1461
-R Q -1461
-P Z -975
-P X -975
-P W -975
-X a -486
-A t -975
-A g -486
-A c -1461
-A d -975
-A a -486
-A q -486
-K c -975
-o f -486
-h . -486
-h , -486
-n . -486
-n , -486
-m . -486
-m , -486
-r o -975
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-f o -486
-k o -486
-O Z -975
-R e -1461
-R a -486
-G Z -975
-E o -486
-Z o -975
-Z e -486
-Z d -486
-Z y -486
-Z a -486
-Z w -486
-Z O -486
-Z G -486
-Z C -486
-Z Q -486
-D Z -975
-B Z -975
-J o -486
-K a -486
-t o -486
-o t -486
-o g -486
-o z -486
-o j -486
-g o -486
-z o -486
-C o -486
-E T -486
-E V -486
-E Z -486
-E Y -486
-E W -486
-B o -486
-U o -486
-L cq -4878
-L ' -4878
-T char173 -4389
-T hy -4389
-T - -4389
-T en -4389
-T em -4389
-A cq -2439
-A ' -2439
-char173 T -3414
-hy T -3414
-- T -3414
-en T -3414
-em T -3414
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -486
-p ' -486
-b cq -975
-b ' -975
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -486
-h ' -486
-n cq -486
-n ' -486
-m cq -486
-m ' -486
-R cq -1950
-R ' -1950
-W char173 -1461
-W hy -1461
-W - -1461
-W en -1461
-W em -1461
-cq d -975
-' d -975
-F char173 -486
-F hy -486
-F - -486
-F en -486
-F em -486
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-R char173 -1461
-R hy -1461
-R - -1461
-R en -1461
-R em -1461
-v cq -486
-v ' -486
-w cq -486
-w ' -486
-E cq -486
-E ' -486
-Z cq -975
-Z ' -975
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-B cq -486
-B ' -486
-charset
-! 6342,18648,390,2823,786,910 2 3617
-dq 11220,18555,0,2325,-3858,910 2 3618
-" "
-sh 12684,17805,390,1377,-72,910 0 3619
-# "
-Do 12684,19380,2415,1467,-54,910 2 3620
-$ "
-% 20490,17805,180,252,-1311,252 0 3621
-& 18051,18555,390,1461,9,910 2 3622
-cq 6342,18555,0,2622,-1662,910 2 51751
-' "
-( 6342,20283,6705,5652,855,910 3 3624
-) 6342,20283,6705,1701,4806,910 3 3625
-* 12684,18555,0,2358,-2589,910 2 3626
-+ 20490,13191,261,0,-2496 0 3627
-, 6342,3300,3891,0,1584 0 3628
-char173 6342,6960,0,438,183,438 0 3629
-hy "
-- "
-. 6342,2985,390,0,861 0 3630
-sl 13173,20250,225,4644,1500,910 2 3631
-/ "
-0 12684,17805,390,1482,-354,910 0 3632
-1 12684,17415,150,0,-843 0 3633
-2 12684,17805,0,633,216,633 0 3634
-3 12684,17805,390,588,1335,588 0 3635
-4 12684,17805,0,1158,18,910 0 3636
-5 12684,17415,390,780,-183,780 0 3637
-6 12684,17805,390,2220,-102,910 0 3638
-7 12684,17415,390,2988,-888,910 0 3639
-8 12684,17805,390,1620,-105,910 0 3640
-9 12684,17805,390,1731,-126,910 0 3641
-: 6342,11586,390,1044,861,910 0 3642
-; 6342,11586,3891,1251,1584,910 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 20490,8883,0,0,-2688 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 9270,18648,390,2514,-396,910 2 3647
-at 20619,16980,3654,2277,1044,910 0 3648
-@ "
-A 18540,18555,150,0,2757 2 3649
-B 15126,18555,150,1614,1335,910 2 3650
-C 18540,18555,390,2820,-795,910 2 3651
-D 20004,18555,150,1380,1872,910 2 3652
-E 15612,18315,150,1824,1827,910 2 3653
-F 13173,18315,150,3717,1683,910 2 3654
-G 20490,18555,390,1182,-873,910 2 3655
-H 20490,18315,150,3783,1785,910 2 3656
-I 8781,18315,150,3582,1641,910 2 3657
-J 8295,18315,5814,3522,4017,910 2 3658
-K 18051,18315,150,2922,1755,910 2 3659
-L 15612,18315,150,345,1536,345 2 3660
-M 20490,18315,150,3192,2418,910 2 3661
-N 19515,18315,150,3774,1101,910 2 3662
-O 20979,18555,390,1308,-624,910 2 3663
-P 14637,18555,150,2430,1737,910 2 3664
-Q 20979,18555,6027,1248,-684,910 2 3665
-R 18051,18555,150,0,1965 2 3666
-S 12198,18555,390,1974,759,910 2 3667
-T 16101,19185,150,4656,-1578,910 2 3668
-U 20004,18315,390,3312,-1641,910 2 3669
-V 19029,18315,390,5280,-2376,910 2 3670
-W 25371,18315,390,5025,-2190,910 2 3671
-X 18540,18315,150,3168,1833,910 2 3672
-Y 17565,18315,150,5103,-1386,910 2 3673
-Z 16587,19557,0,1626,78,910 2 3674
-lB 6342,18165,5160,4749,3360,910 0 3675
-[ "
-rs 13173,20250,225,0,-3234 2 3676
-\ "
-rB 6342,18165,5160,3387,4722,910 0 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,910 3 3679
-oq 6342,18555,0,3606,-2646,910 2 51808
-` "
-a 12198,11670,390,687,1335,687 0 3681
-b 12684,20253,390,1776,216,910 2 3682
-c 9759,11670,390,1668,495,910 0 3683
-d 13173,20250,390,2223,915,910 2 3684
-e 9759,11670,390,1515,687,910 0 3685
-f 7317,20250,6705,6675,5391,910 3 3686
-g 11220,11670,6705,1806,1908,910 1 3687
-h 12684,20250,390,801,1086,801 2 3688
-i 7806,18495,390,1020,24,910 2 3689
-j 6342,18495,6705,2055,4209,910 3 3690
-k 13173,20250,390,657,957,657 2 3691
-l 7317,20250,390,1938,606,910 2 3692
-m 21468,11670,390,345,342,345 0 3693
-n 14637,11670,390,513,309,513 0 3694
-o 12198,11670,390,423,288,423 0 3695
-p 12198,13440,6855,963,3558,910 1 3696
-q 12684,11670,6855,1458,1005,910 1 3697
-r 10245,11670,0,2121,417,910 0 3698
-s 7806,11670,390,1242,1449,910 0 3699
-t 8295,13944,390,1638,75,910 0 3700
-u 13662,11670,390,576,381,576 0 3701
-v 13662,11670,390,1317,423,910 0 3702
-w 19029,11670,390,1209,393,910 0 3703
-x 12198,11670,390,936,1476,910 0 3704
-y 11709,11670,6705,867,2037,867 1 3705
-z 11220,12315,0,1359,1530,910 0 3706
-lC 11709,19935,6210,3360,-1692,910 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 11709,19935,6210,0,2232 3 3709
-} "
-ti 26346,8952,0,0,-4029 0 51876
-char192 18540,24930,150,0,2757 2 3776
-`A "
-char194 18540,24915,150,438,2757,438 2 3778
-^A "
-char200 15612,24930,150,1824,1827,910 2 3784
-`E "
-char202 15612,24915,150,1824,1827,910 2 3786
-^E "
-char203 15612,22620,150,1824,1827,910 2 3787
-:E "
-char206 8781,24915,150,4425,1641,910 2 3790
-^I "
-char207 8781,22620,150,4899,1641,910 2 3791
-:I "
-char180 12684,19590,0,1218,-5838,910 2 3764
-aa "
-ga 12684,19590,0,0,-3147 2 3680
-a^ 12684,19614,0,210,-3726,210 2 3678
-^ "
-char168 12684,17394,0,153,-3873,153 0 3752
-ad "
-a~ 12684,17481,0,1239,-3270,910 0 3710
-~ "
-char217 20004,24930,390,3312,-1641,910 2 3801
-`U "
-char219 20004,24915,390,3312,-1641,910 2 3803
-^U "
-char221 17565,24930,150,5103,-1386,910 2 3805
-'Y "
-char253 11709,19590,6705,2106,2037,910 3 3837
-'y "
-char176 12684,17805,0,828,-2298,828 0 3760
-de "
-char199 18540,18555,6018,2820,-795,910 2 3783
-,C "
-char231 9759,11670,4770,1668,516,910 0 3815
-,c "
-char209 19515,23727,150,3774,1101,910 2 3793
-~N "
-char241 14637,17481,390,513,309,513 0 3825
-~n "
-char161 6831,12000,7038,1113,2007,910 1 3745
-r! "
-char191 9270,12000,7038,0,2256 1 3775
-r? "
-char164 12684,15684,0,2205,291,910 0 3748
-Cs "
-char163 12684,17805,390,1413,1200,910 0 3747
-Po "
-char165 12684,18315,150,4137,-486,910 2 3749
-Ye "
-char167 12684,18555,5250,0,66 2 3751
-sc "
-Fn 12684,20250,6705,3483,3216,910 3 51871
-char162 12684,17568,186,795,-1197,795 0 3746
-ct "
-char226 12198,19614,390,687,1335,687 2 3810
-^a "
-char234 9759,19614,390,1671,687,910 2 3818
-^e "
-char244 12198,19614,390,453,288,453 2 3828
-^o "
-char251 13662,19614,390,576,381,576 2 3835
-^u "
-char225 12198,19590,390,1863,1335,910 2 3809
-'a "
-char233 9759,19590,390,3081,687,910 2 3817
-'e "
-char243 12198,19590,390,1863,288,910 2 3827
-'o "
-char250 13662,19590,390,1131,381,910 2 3834
-'u "
-char224 12198,19590,390,687,1335,687 2 3808
-`a "
-char232 9759,19590,390,1515,687,910 2 3816
-`e "
-char242 12198,19590,390,423,288,423 2 3826
-`o "
-char249 13662,19590,390,576,381,576 2 3833
-`u "
-char228 12198,17394,390,891,1335,891 0 3812
-:a "
-char235 9759,17394,390,2109,687,910 0 3819
-:e "
-char246 12198,17394,390,891,288,891 0 3830
-:o "
-char252 13662,17394,390,576,381,576 0 3836
-:u "
-char197 18540,24681,150,150,2757,150 2 3781
-oA "
-char238 7806,19614,390,2649,24,910 2 3822
-^i "
-char216 20979,18555,390,2475,1140,910 2 3800
-/O "
-char198 25371,18315,150,1821,2859,910 2 3782
-AE "
-char229 12198,19566,390,1257,1335,910 2 3813
-oa "
-char237 7806,19590,390,4059,24,910 2 3821
-'i "
-char248 12198,11670,390,2388,2475,910 0 3832
-/o "
-char230 16587,11670,390,1551,1377,910 0 3814
-ae "
-char196 18540,22620,150,1191,2757,910 2 3780
-:A "
-char236 7806,19590,390,966,24,910 2 3820
-`i "
-char214 20979,22620,390,1308,-624,910 2 3798
-:O "
-char220 20004,22620,390,3312,-1641,910 2 3804
-:U "
-char201 15612,24930,150,1824,1827,910 2 3785
-'E "
-char239 7806,17394,390,2562,24,910 0 3823
-:i "
-char223 13173,20250,6705,3594,6294,910 3 3807
-ss "
-char212 20979,24915,390,1308,-624,910 2 3796
-^O "
-char193 18540,24930,150,1083,2757,910 2 3777
-'A "
-char195 18540,23727,150,2175,2757,910 2 3779
-~A "
-char227 12198,17481,390,1482,1335,910 0 3811
-~a "
-char208 20004,18555,150,1380,1872,910 2 3792
--D "
-char240 12198,20199,327,540,288,540 2 3824
-Sd "
-char205 8781,24930,150,5073,1641,910 2 3789
-'I "
-char204 8781,24930,150,3582,1641,910 2 3788
-`I "
-char211 20979,24930,390,1308,-624,910 2 3795
-'O "
-char210 20979,24930,390,1308,-624,910 2 3794
-`O "
-char213 20979,23727,390,1308,-624,910 2 3797
-~O "
-char245 12198,17481,390,1482,288,910 0 3829
-~o "
-vS 12198,24969,390,2829,759,910 2 51795
-vs 7806,19863,390,4191,1449,910 2 51827
-char218 20004,24930,390,3312,-1641,910 2 3802
-'U "
-:Y 17565,22620,150,5103,-1386,910 2 51801
-char255 11709,17394,6705,1134,2037,910 1 3839
-:y "
-char222 14637,18315,150,1383,1722,910 2 3806
-TP "
-char254 12198,20250,6855,963,3561,910 3 3838
-Tp "
-char181 14637,10800,5595,612,585,612 0 3765
-char182 12684,19635,4200,1812,-981,910 2 3766
-ps "
-char190 20490,17805,390,0,-1074 0 3774
-34 "
-\- 20490,7305,0,0,-2532 0 51757
-char188 20490,17625,390,0,-1143 0 3772
-14 "
-char189 20490,17625,390,33,-204,33 0 3773
-12 "
-char170 11709,17805,0,1590,-1725,910 0 3754
-Of "
-char186 11709,17805,0,936,-1989,910 0 3770
-Om "
-char171 10734,9945,0,759,-9,759 0 3755
-Fo "
-char187 10734,9945,0,204,546,204 0 3771
-Fc "
-char177 20490,13191,3105,0,-2502 0 3761
-char166 13173,19083,5916,0,-4596 2 3750
-bb "
-char169 13173,19725,0,5526,-3702,910 2 3753
-co "
-char172 20490,10029,0,0,-2055 0 3756
-no "
-char174 13173,19725,0,5526,-3702,910 2 3758
-rg "
-char178 8781,17805,0,1725,-690,910 0 3762
-S2 "
-char179 8781,17805,0,1746,-273,910 0 3763
-S3 "
-char184 12684,0,4770,0,-948 0 3768
-ac "
-char185 8781,17625,0,1257,-1230,910 0 3769
-S1 "
-char215 20490,12969,189,0,-2793 0 3799
-char247 20490,12966,36,0,-2424 0 3831
-char183 6342,10350,0,534,-1212,534 0 3767
-pc "
-fm 12684,17805,0,0,-2970 0 51873
-sd 12684,17805,0,0,-1374 0 51874
-dg 12684,18555,5250,2079,-741,910 2 51755
-tm 16101,17550,0,6012,-3663,910 0 51796
-ah 12684,19863,0,1152,-4668,910 2 51935
-ao 12684,19566,0,570,-4965,570 2 51930
-f/ 2928,17415,390,8091,6480,910 0 51759
-em 20490,6960,0,651,420,651 0 51789
-en 12684,6960,0,756,357,756 0 51790
-dd 12684,18555,5250,1128,210,910 2 51773
-.i 7806,11670,390,657,24,657 0 51957
-aq 7317,18555,0,2418,-3858,910 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 18540,24930,390,2820,-795,910 2 20166
-'c 9759,19590,390,3231,495,910 2 20198
-lq 10734,18555,0,3054,-1956,910 2 51838
-rq 10734,18555,0,2940,-1842,910 2 51746
-Bq 10734,2013,4437,0,2022 0 51772
-vz 11220,19863,0,2484,1530,910 2 51834
-fi 13173,20250,6705,1812,5289,910 3 51881
-fl 14148,20250,6705,1464,5172,910 3 51882
-ff 13662,20250,6705,6495,5286,910 3 51883
-Fi 19029,20250,6705,1914,5388,910 3 51884
-Fl 19515,20601,6705,2037,5289,910 3 51885
-ij 14148,18495,6705,2055,24,910 3 51958
-bq 6342,2013,4437,0,1680 0 51756
-%0 29760,17805,207,378,-1368,378 0 51901
-char175 12684,17328,0,609,-3933,609 0 3759
-a- "
-ab 12684,18054,0,918,-4341,910 0 51926
-a. 12684,17034,0,0,-6228 0 51927
-oe 18051,11670,390,1527,288,910 0 51823
-OE 27321,18555,390,1800,-636,910 2 51791
-fo 7806,9945,0,780,-672,780 0 51886
-fc 7806,9945,0,0,147 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 15612,18315,150,345,1536,345 2 51944
-/l 7317,20250,390,2265,660,910 2 51960
-a" 12684,19590,0,3705,-4452,910 2 51933
-ho 12684,420,4155,0,-3069 0 51934
-vZ 16587,24969,0,1626,78,910 2 51802
-IJ 17076,18315,5814,3522,1641,910 2 51942
diff --git a/contrib/groff/devlj4/GR b/contrib/groff/devlj4/GR
deleted file mode 100644
index 169cbd1..0000000
--- a/contrib/groff/devlj4/GR
+++ /dev/null
@@ -1,872 +0,0 @@
-name GR
-spacewidth 6831
-pcltypeface 4197
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3414
-P . -4389
-P , -4389
-V A -4389
-A V -4389
-T o -3903
-T r -2439
-T c -3414
-T e -3414
-T d -3414
-T s -2439
-T y -4389
-T a -2439
-T w -4389
-T u -3414
-L T -2925
-L Y -2925
-Y o -4389
-Y e -3903
-Y a -2925
-A W -4389
-W A -4389
-T A -2439
-V o -3414
-V e -3414
-V a -2925
-Y A -2925
-F A -2925
-F . -3903
-F , -3903
-A T -2925
-A Y -2925
-v . -2439
-v , -2439
-y . -2925
-y , -2925
-T . -2439
-T , -2439
-L W -3414
-P A -2925
-V . -3903
-V , -3903
-Y . -2925
-Y , -2925
-W o -3414
-W e -3414
-W a -2925
-W . -3903
-W , -3903
-r . -1461
-r , -1461
-w . -2925
-w , -2925
-Y u -3414
-A v -2439
-A y -2439
-A w -2925
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -486
-e , -486
-b . -1461
-b , -1461
-O T -1950
-O V -1950
-O Y -1950
-O . -1950
-O , -1950
-L y -2439
-L O -1950
-L G -1950
-L C -1950
-L Q -1950
-P J -975
-V y -1950
-V u -1950
-V O -1950
-V G -1950
-V C -1950
-V Q -1950
-D T -1950
-D V -1950
-D Y -1950
-D . -1950
-D , -1950
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -1461
-F e -1461
-F a -975
-c . -486
-c , -486
-O A -1461
-O W -1950
-L U -1950
-R T -2925
-R V -2925
-R Y -2925
-R W -2925
-G T -486
-P o -1461
-P g -975
-P e -1461
-P a -975
-D A -1461
-D W -1950
-B T -1461
-B Y -1461
-B . -1461
-B , -1461
-A O -1461
-A G -1461
-A C -1461
-A U -1950
-A Q -1461
-W r -1950
-W y -1950
-W u -1950
-W O -1950
-W G -1950
-W C -1950
-W Q -1950
-J A -486
-J . -486
-J , -486
-U A -1950
-U . -1950
-U , -1950
-Q A -1461
-Q W -1950
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -1461
-L e -975
-L q -1461
-G V -486
-G Y -486
-G W -486
-P T -975
-P V -975
-P Y -975
-D X -1461
-B V -1461
-B X -1461
-B A -1461
-B W -1461
-S . -975
-S , -975
-X o -1461
-X e -975
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -975
-Q X -1461
-K o -1461
-K e -975
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -1461
-o y -1461
-o x -1461
-o w -1461
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -975
-p v -975
-p y -975
-p x -975
-v o -1461
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -486
-e y -486
-b v -975
-b y -975
-b w -1461
-s . -486
-s , -486
-y o -1461
-y g -975
-y c -1461
-y d -1461
-y a -975
-y q -1461
-x o -1461
-x c -975
-x e -975
-x d -975
-x q -975
-a v -486
-a y -486
-a w -486
-w o -1461
-w g -975
-w c -1461
-w d -1461
-w a -975
-w q -1461
-T S -975
-R o -1461
-R y -1950
-R O -1950
-R G -1950
-R C -1950
-R U -1950
-R Q -1950
-P s -486
-P Z -975
-P X -975
-P W -975
-V S -975
-S A -975
-Y S -975
-X u -975
-A t -975
-A c -975
-A d -975
-A u -975
-A q -1461
-W S -975
-J y -486
-K c -975
-K u -975
-o f -486
-h w -975
-n w -975
-m w -975
-r o -1461
-r c -975
-r e -975
-r d -975
-r a -975
-r q -975
-p w -975
-v e -975
-v s -486
-e x -486
-e w -486
-y e -1461
-y s -486
-f o -1461
-f c -975
-f e -975
-f d -975
-f q -975
-w e -1461
-w s -486
-k o -1461
-k c -975
-k e -975
-k d -975
-k q -975
-O Z -975
-O J -975
-L J -975
-R e -975
-R u -975
-P H -486
-P N -486
-P M -486
-P L -486
-P R -486
-P I -486
-P P -486
-P E -486
-P D -486
-P B -486
-P F -486
-P U -486
-P K -486
-E t -486
-E o -975
-E c -486
-E v -486
-E e -486
-E d -486
-E y -486
-E w -486
-E u -486
-E q -486
-E O -486
-E G -486
-E C -486
-E J -486
-E Q -486
-Z o -1461
-Z e -975
-Z d -975
-Z y -975
-Z w -975
-Z u -975
-Z O -975
-Z G -975
-Z C -975
-Z Q -975
-D Z -975
-D J -975
-B Z -975
-B J -975
-A J -975
-J o -975
-J e -486
-J a -486
-J u -486
-J O -486
-J G -486
-J C -486
-J S -486
-J Q -486
-U g -486
-K J -486
-t o -1461
-t c -975
-t e -975
-t d -975
-t q -975
-o t -486
-o g -486
-o z -975
-o j -486
-r s -486
-g o -975
-g c -486
-g e -486
-g d -486
-g q -486
-p z -486
-e z -486
-z o -975
-z c -486
-z e -486
-z d -486
-z q -486
-b z -486
-R J -975
-G J -486
-C o -486
-C y -975
-E T -486
-E V -486
-E Y -486
-E W -486
-E U -486
-B o -486
-B y -486
-B a -486
-B H -486
-B N -486
-B M -486
-B L -486
-B R -486
-B I -486
-B P -486
-B E -486
-B D -486
-B B -486
-B F -486
-B U -486
-B K -486
-U t -486
-U o -975
-U n -486
-U m -486
-U r -486
-U p -486
-U c -486
-U v -486
-U e -486
-U z -486
-U d -486
-U s -975
-U y -486
-U f -486
-U x -486
-U a -975
-U w -486
-U q -486
-U O -486
-U G -486
-U C -486
-U S -486
-U Q -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -3414
-L ' -3414
-T char173 -4389
-T hy -4389
-T - -4389
-T en -4389
-T em -4389
-A cq -2925
-A ' -2925
-char173 T -4389
-hy T -4389
-- T -4389
-en T -4389
-em T -4389
-Y char173 -3414
-Y hy -3414
-Y - -3414
-Y en -3414
-Y em -3414
-p cq -975
-p ' -975
-e cq -486
-e ' -486
-b cq -1461
-b ' -1461
-a cq -486
-a ' -486
-V char173 -1950
-V hy -1950
-V - -1950
-V en -1950
-V em -1950
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-R cq -1950
-R ' -1950
-W char173 -1950
-W hy -1950
-W - -1950
-W en -1950
-W em -1950
-cq d -1461
-' d -1461
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -486
-' s -486
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-R char173 -1950
-R hy -1950
-R - -1950
-R en -1950
-R em -1950
-K cq -486
-K ' -486
-G cq -486
-G ' -486
-E cq -486
-E ' -486
-E char173 -486
-E hy -486
-E - -486
-E en -486
-E em -486
-Z char173 -975
-Z hy -975
-Z - -975
-Z en -975
-Z em -975
-B cq -486
-B ' -486
-J char173 -486
-J hy -486
-J - -486
-J en -486
-J em -486
-U char173 -486
-U hy -486
-U - -486
-U en -486
-U em -486
-charset
-! 6831,18837,390 2 3617
-dq 11220,18555 2 3618
-" "
-sh 12684,17805,390 0 3619
-# "
-Do 12684,19122,1707 2 3620
-$ "
-% 21468,17415,390 0 3621
-& 21954,18165,390 0 3622
-cq 7317,18555 2 51751
-' "
-( 7806,20250,6705 3 3624
-) 7806,20250,6705 3 3625
-* 12684,18555 2 3626
-+ 21468,13191,261 0 3627
-, 6831,3096,4449 0 3628
-char173 6831,6960 0 3629
-hy "
-- "
-. 6831,2847,390 0 3630
-sl 12684,20250,480 2 3631
-/ "
-0 12684,17805,390 0 3632
-1 12684,17805,150 0 3633
-2 12684,17805,150 0 3634
-3 12684,17805,390 0 3635
-4 12684,17415,390 0 3636
-5 12684,17415,390 0 3637
-6 12684,17811,390 0 3638
-7 12684,17415,390 0 3639
-8 12684,17805,390 0 3640
-9 12684,17805,390 0 3641
-: 6831,10593,390 0 3642
-; 6831,10593,4449 0 3643
-< 26346,16068 0 3644
-= 21468,8883 0 3645
-> 26346,16068 0 3646
-? 9759,18837,390 2 3647
-at 21594,16980,3654 0 3648
-@ "
-A 20004,18555,150 2 3649
-B 16101,18315,150 2 3650
-C 19515,18555,390 2 3651
-D 20979,18555,150 2 3652
-E 16587,18315,150 2 3653
-F 15612,18315,150 2 3654
-G 20979,18555,390 2 3655
-H 22443,18315,150 2 3656
-I 8781,18315,150 2 3657
-J 9759,18315,6060 2 3658
-K 19029,18315,150 2 3659
-L 16101,18315,150 2 3660
-M 23907,18315,390 2 3661
-N 22443,18315,774 2 3662
-O 22443,18555,390 2 3663
-P 15612,18555,150 2 3664
-Q 22443,18555,6339 3 3665
-R 18540,18315,150 2 3666
-S 12684,18555,390 2 3667
-T 18051,19299,150 2 3668
-U 21468,18315,390 2 3669
-V 19029,18315,390 2 3670
-W 25857,18315,390 2 3671
-X 20004,18315,150 2 3672
-Y 19029,18315,150 2 3673
-Z 17565,19299 2 3674
-lB 7806,18165,4905 0 3675
-[ "
-rs 12684,20250,480 2 3676
-\ "
-rB 7806,18165,4905 0 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 7317,18555 2 51808
-` "
-a 11220,11670,390 0 3681
-b 14148,20265,390 2 3682
-c 11220,11670,390 0 3683
-d 13662,20250,390 2 3684
-e 11220,11670,390 0 3685
-f 8295,20250,150 2 3686
-g 12198,11670,6705 1 3687
-h 14637,20250,150 2 3688
-i 7317,19356,150 2 3689
-j 6831,19356,6705 3 3690
-k 14637,20250,150 2 3691
-l 7317,20262,150 2 3692
-m 21954,11670,153 0 3693
-n 14637,11673,150 0 3694
-o 14148,11670,390 0 3695
-p 14148,11679,6855 1 3696
-q 13662,11670,6855 1 3697
-r 10245,11670,150 0 3698
-s 9270,11670,390 0 3699
-t 8781,13677,390 0 3700
-u 14148,11280,390 0 3701
-v 13173,11430,390 0 3702
-w 20004,11430,390 0 3703
-x 13173,11430,150 0 3704
-y 14148,11430,6705 1 3705
-z 12198,12063 0 3706
-lC 11709,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11709,19935,6210 3 3709
-} "
-ti 26346,8952 0 51876
-char192 20004,24846,150 2 3776
-`A "
-char194 20004,24600,150 2 3778
-^A "
-char200 16587,24846,150 2 3784
-`E "
-char202 16587,24600,150 2 3786
-^E "
-char203 16587,23751,150 2 3787
-:E "
-char206 8781,24600,150 2 3790
-^I "
-char207 8781,23751,150 2 3791
-:I "
-char180 12684,20460 2 3764
-aa "
-ga 12684,20460 2 3680
-a^ 12684,20460 2 3678
-^ "
-char168 12684,17244 0 3752
-ad "
-a~ 12684,18180 0 3710
-~ "
-char217 21468,24846,390 2 3801
-`U "
-char219 21468,24600,390 2 3803
-^U "
-char221 19029,24846,150 2 3805
-'Y "
-char253 14148,20460,6705 3 3837
-'y "
-char176 12684,17805 0 3760
-de "
-char199 19515,18555,5964 2 3783
-,C "
-char231 11220,11670,5553 0 3815
-,c "
-char209 22443,24498,774 2 3793
-~N "
-char241 14637,18180,150 0 3825
-~n "
-char161 6831,12096,7131 1 3745
-r! "
-char191 9759,12096,7131 1 3775
-r? "
-char164 12684,15684 0 3748
-Cs "
-char163 12684,17805,5424 0 3747
-Po "
-char165 12684,18315,150 2 3749
-Ye "
-char167 12684,18555,5250 2 3751
-sc "
-Fn 12684,20250,6705 3 51871
-char162 12684,17556,126 0 3746
-ct "
-char226 11220,20460,390 2 3810
-^a "
-char234 11220,20460,390 2 3818
-^e "
-char244 14148,20460,390 2 3828
-^o "
-char251 14148,20460,390 2 3835
-^u "
-char225 11220,20460,390 2 3809
-'a "
-char233 11220,20460,390 2 3817
-'e "
-char243 14148,20460,390 2 3827
-'o "
-char250 14148,20460,390 2 3834
-'u "
-char224 11220,20460,390 2 3808
-`a "
-char232 11220,20460,390 2 3816
-`e "
-char242 14148,20460,390 2 3826
-`o "
-char249 14148,20460,390 2 3833
-`u "
-char228 11220,17244,390 0 3812
-:a "
-char235 11220,17244,390 0 3819
-:e "
-char246 14148,17244,390 0 3830
-:o "
-char252 14148,17244,390 0 3836
-:u "
-char197 20004,24768,150 2 3781
-oA "
-char238 7317,20460,150 2 3822
-^i "
-char216 22443,18948,501 2 3800
-/O "
-char198 28299,18315,150 2 3782
-AE "
-char229 11220,19248,390 2 3813
-oa "
-char237 7317,20460,150 2 3821
-'i "
-char248 14148,11832,489 0 3832
-/o "
-char230 17076,11670,390 0 3814
-ae "
-char196 20004,23751,150 2 3780
-:A "
-char236 7317,20460,150 2 3820
-`i "
-char214 22443,23751,390 2 3798
-:O "
-char220 21468,23751,390 2 3804
-:U "
-char201 16587,24846,150 2 3785
-'E "
-char239 7317,17244,150 0 3823
-:i "
-char223 14637,20250,390 2 3807
-ss "
-char212 22443,24600,390 2 3796
-^O "
-char193 20004,24846,150 2 3777
-'A "
-char195 20004,24498,150 2 3779
-~A "
-char227 11220,18180,390 0 3811
-~a "
-char208 20979,18555,150 2 3792
--D "
-char240 14148,20250,390 2 3824
-Sd "
-char205 8781,24846,150 2 3789
-'I "
-char204 8781,24846,150 2 3788
-`I "
-char211 22443,24846,390 2 3795
-'O "
-char210 22443,24846,390 2 3794
-`O "
-char213 22443,24498,390 2 3797
-~O "
-char245 14148,18180,390 0 3829
-~o "
-vS 12684,24612,390 2 51795
-vs 9270,20499,390 2 51827
-char218 21468,24846,390 2 3802
-'U "
-:Y 19029,23751,150 2 51801
-char255 14148,17244,6705 1 3839
-:y "
-char222 15612,18315,150 2 3806
-TP "
-char254 14148,20250,6855 3 3838
-Tp "
-char181 14637,10800,5595 0 3765
-char182 12684,19635,4200 2 3766
-ps "
-char190 21468,17805,288 0 3774
-34 "
-\- 21468,7305 0 51757
-char188 21468,17805,288 0 3772
-14 "
-char189 21468,17805,288 0 3773
-12 "
-char170 12684,17805 0 3754
-Of "
-char186 12684,17805 0 3770
-Om "
-char171 11220,9945 0 3755
-Fo "
-char187 11220,9945 0 3771
-Fc "
-char177 21468,13191,3105 0 3761
-char166 13173,19083,5916 2 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 21468,10029 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 8781,17805 0 3762
-S2 "
-char179 8781,17805 0 3763
-S3 "
-char184 12684,255,5553 0 3768
-ac "
-char185 8781,17805 0 3769
-S1 "
-char215 21468,12969,189 0 3799
-char247 21468,12966,36 0 3831
-char183 6831,10326 0 3767
-pc "
-fm 12684,17805 0 51873
-sd 12684,17805 0 51874
-dg 12684,18555,5250 2 51755
-tm 16101,17550 0 51796
-ah 12684,20499 2 51935
-ao 12684,19248 2 51930
-f/ 2928,17805,288 0 51759
-em 21468,6960 0 51789
-en 12684,6960 0 51790
-dd 12684,18555,5250 2 51773
-.i 7317,11673,150 0 51957
-aq 7317,18555 2 3623
-bu 13173,14226 0 51889
-'C 19515,24846,390 2 20166
-'c 11220,20460,390 2 20198
-lq 11220,18555 2 51838
-rq 11220,18555 2 51746
-Bq 11220,2811,3939 0 51772
-vz 12198,20499 2 51834
-fi 14637,20250,150 2 51881
-fl 14637,20250,150 2 51882
-ff 15612,20250,150 2 51883
-Fi 21954,20250,150 2 51884
-Fl 21954,20250,150 2 51885
-ij 14148,19356,6705 3 51958
-bq 7317,2811,3939 0 51756
-%0 30738,17805,180 0 51901
-char175 12684,17367 0 3759
-a- "
-ab 12684,17796 0 51926
-a. 12684,17244 0 51927
-oe 20004,11670,390 0 51823
-OE 27321,18555,390 2 51791
-fo 7317,9945 0 51886
-fc 7317,9945 0 51887
-sq 19029,15624 0 51899
-/L 16101,18315,150 2 51944
-/l 7317,20262,150 2 51960
-a" 12684,20460 2 51933
-ho 12684,600,4653 0 51934
-vZ 17565,24612 2 51802
-IJ 18540,18315,6060 2 51942
diff --git a/contrib/groff/devlj4/LGB b/contrib/groff/devlj4/LGB
deleted file mode 100644
index 681116e..0000000
--- a/contrib/groff/devlj4/LGB
+++ /dev/null
@@ -1,350 +0,0 @@
-name LGB
-spacewidth 13227
-pcltypeface 4102
-pclproportional 0
-pclweight 3
-pclstyle 0
-charset
-! 13227,18990,330 2 3617
-dq 13227,18990 2 3618
-" "
-sh 13227,21345,2391 2 3619
-# "
-Do 13227,19320,993 2 3620
-$ "
-% 13227,19320,330 2 3621
-& 13227,19320,330 2 3622
-cq 13227,19320 2 51751
-' "
-( 13227,19320,2325 2 3624
-) 13227,19320,2325 2 3625
-* 13227,18990 2 3626
-+ 13227,15645 0 3627
-, 13227,2925,2640 0 3628
-char173 13227,8775 0 3629
-hy "
-- "
-. 13227,3180,330 0 3630
-sl 13227,19545,330 2 3631
-/ "
-0 13227,19320,330 2 3632
-1 13227,19320 2 3633
-2 13227,19320 2 3634
-3 13227,19320,330 2 3635
-4 13227,19320 2 3636
-5 13227,18990,330 2 3637
-6 13227,19320,330 2 3638
-7 13227,18990 2 3639
-8 13227,19320,330 2 3640
-9 13227,19320,330 2 3641
-: 13227,12654,330 0 3642
-; 13227,12654,2640 0 3643
-< 13227,15312 0 3644
-= 13227,12534 0 3645
-> 13227,15312 0 3646
-? 13227,19320,330 2 3647
-at 13227,19320,330 2 3648
-@ "
-A 13227,18990 2 3649
-B 13227,18990 2 3650
-C 13227,19320,330 2 3651
-D 13227,18990 2 3652
-E 13227,18990 2 3653
-F 13227,18990 2 3654
-G 13227,19320,330 2 3655
-H 13227,18990 2 3656
-I 13227,18990 2 3657
-J 13227,18990,330 2 3658
-K 13227,18990 2 3659
-L 13227,18990 2 3660
-M 13227,18990 2 3661
-N 13227,18990 2 3662
-O 13227,19320,330 2 3663
-P 13227,18990 2 3664
-Q 13227,19320,2760 2 3665
-R 13227,18990 2 3666
-S 13227,19320,330 2 3667
-T 13227,18990 2 3668
-U 13227,18990,330 2 3669
-V 13227,18990 2 3670
-W 13227,18990 2 3671
-X 13227,18990 2 3672
-Y 13227,18990 2 3673
-Z 13227,18990 2 3674
-lB 13227,18990,3510 2 3675
-[ "
-rs 13227,19545,330 2 3676
-\ "
-rB 13227,18990,3510 2 3677
-] "
-ha 13227,19758 2 51875
-_ 13227,191367,6588 3 3679
-oq 13227,19320 2 51808
-` "
-a 13227,14355,330 0 3681
-b 13227,19545,330 2 3682
-c 13227,14355,330 0 3683
-d 13227,19545,330 2 3684
-e 13227,14355,330 0 3685
-f 13227,19335 2 3686
-g 13227,14355,4350 0 3687
-h 13227,19545 2 3688
-i 13227,19095 2 3689
-j 13227,19095,4350 2 3690
-k 13227,19545 2 3691
-l 13227,19545 2 3692
-m 13227,14355 0 3693
-n 13227,14355 0 3694
-o 13227,14355,330 0 3695
-p 13227,14355,5475 1 3696
-q 13227,14355,5475 1 3697
-r 13227,14355 0 3698
-s 13227,14355,330 0 3699
-t 13227,18300,330 2 3700
-u 13227,14025,330 0 3701
-v 13227,14025 0 3702
-w 13227,14025 0 3703
-x 13227,14025 0 3704
-y 13227,14025,4350 0 3705
-z 13227,14025 0 3706
-lC 13227,20130,6141 3 3707
-{ "
-ba 13227,19758,6588 3 3708
-| "
-rC 13227,20130,6141 3 3709
-} "
-ti 13227,11181 0 51876
-char192 13227,25155 2 3776
-`A "
-char194 13227,25080 2 3778
-^A "
-char200 13227,25155 2 3784
-`E "
-char202 13227,25080 2 3786
-^E "
-char203 13227,24000 2 3787
-:E "
-char206 13227,25080 2 3790
-^I "
-char207 13227,24000 2 3791
-:I "
-char180 13227,20745 2 3764
-aa "
-ga 13227,20745 2 3680
-a^ 13227,21015 2 3678
-^ "
-char168 13227,19125 2 3752
-ad "
-a~ 13227,19683 2 3710
-~ "
-char217 13227,25155,330 2 3801
-`U "
-char219 13227,25080,330 2 3803
-^U "
-char221 13227,25155 2 3805
-'Y "
-char253 13227,20745,4350 2 3837
-'y "
-char176 13227,19320 2 3760
-de "
-char199 13227,19320,5787 3 3783
-,C "
-char231 13227,14355,6060 1 3815
-,c "
-char209 13227,24552 2 3793
-~N "
-char241 13227,19683 2 3825
-~n "
-char161 13227,14319,5001 1 3745
-r! "
-char191 13227,14265,5385 1 3775
-r? "
-char164 13227,15885 0 3748
-Cs "
-char163 13227,18990,330 2 3747
-Po "
-char165 13227,18990 2 3749
-Ye "
-char167 13227,19320,1218 2 3751
-sc "
-Fn 13227,19335,3558 2 51871
-char162 13227,19320,330 2 3746
-ct "
-char226 13227,21015,330 2 3810
-^a "
-char234 13227,21015,330 2 3818
-^e "
-char244 13227,21015,330 2 3828
-^o "
-char251 13227,21015,330 2 3835
-^u "
-char225 13227,20745,330 2 3809
-'a "
-char233 13227,20745,330 2 3817
-'e "
-char243 13227,20745,330 2 3827
-'o "
-char250 13227,20745,330 2 3834
-'u "
-char224 13227,20745,330 2 3808
-`a "
-char232 13227,20745,330 2 3816
-`e "
-char242 13227,20745,330 2 3826
-`o "
-char249 13227,20745,330 2 3833
-`u "
-char228 13227,19125,330 2 3812
-:a "
-char235 13227,19125,330 2 3819
-:e "
-char246 13227,19125,330 2 3830
-:o "
-char252 13227,19125,330 2 3836
-:u "
-char197 13227,24882 2 3781
-oA "
-char238 13227,21015 2 3822
-^i "
-char216 13227,19320,459 2 3800
-/O "
-char198 13227,18990 2 3782
-AE "
-char229 13227,20790,330 2 3813
-oa "
-char237 13227,20745 2 3821
-'i "
-char248 13227,14901,957 0 3832
-/o "
-char230 13227,14355,330 0 3814
-ae "
-char196 13227,24000 2 3780
-:A "
-char236 13227,20745 2 3820
-`i "
-char214 13227,24000,330 2 3798
-:O "
-char220 13227,24000,330 2 3804
-:U "
-char201 13227,25155 2 3785
-'E "
-char239 13227,19125 2 3823
-:i "
-char223 13227,19335,330 2 3807
-ss "
-char212 13227,25080,330 2 3796
-^O "
-char193 13227,25155 2 3777
-'A "
-char195 13227,24552 2 3779
-~A "
-char227 13227,19683,330 2 3811
-~a "
-char208 13227,18990 2 3792
--D "
-char240 13227,19656,330 2 3824
-Sd "
-char205 13227,25155 2 3789
-'I "
-char204 13227,25155 2 3788
-`I "
-char211 13227,25155,330 2 3795
-'O "
-char210 13227,25155,330 2 3794
-`O "
-char213 13227,24552,330 2 3797
-~O "
-char245 13227,19683,330 2 3829
-~o "
-vS 13227,25116,330 2 51795
-vs 13227,21015,330 2 51827
-char218 13227,25155,330 2 3802
-'U "
-:Y 13227,24000 2 51801
-char255 13227,19125,4350 2 3839
-:y "
-char222 13227,18990 2 3806
-TP "
-char254 13227,19545,5475 3 3838
-Tp "
-char181 13227,14025,4350 0 3765
-char182 13227,19635,4200 2 3766
-ps "
-char190 13227,19110,3825 2 3774
-34 "
-\- 13227,10425 0 51757
-char188 13227,19110,3825 2 3772
-14 "
-char189 13227,19110,3825 2 3773
-12 "
-char170 13227,19320 2 3754
-Of "
-char186 13227,19320 2 3770
-Om "
-char171 13227,14115 0 3755
-Fo "
-char187 13227,14115 0 3771
-Fc "
-char177 13227,15645,30 0 3761
-char166 13227,19083,5916 3 3750
-bb "
-char169 13227,19635 2 3753
-co "
-char172 13227,13020 0 3756
-no "
-char174 13227,19635 2 3758
-rg "
-char178 13227,19110 2 3762
-S2 "
-char179 13227,19110 2 3763
-S3 "
-char184 13227,0,6060 1 3768
-ac "
-char185 13227,19110 2 3769
-S1 "
-char215 13227,15549 0 3799
-char247 13227,15510 0 3831
-char183 13227,11376 0 3767
-pc "
-fm 13227,18990 2 51873
-sd 13227,18990 2 51874
-dg 13227,18990 2 51755
-tm 13227,17850 2 51796
-ah 13227,21015 2 51935
-ao 13227,20790 2 51930
-f/ 13227,15675 0 51759
-em 13227,8430 0 51789
-en 13227,8430 0 51790
-dd 13227,18990 2 51773
-.i 13227,14025 0 51957
-aq 13227,18990 2 3623
-bu 13227,12714 0 51889
-'C 13227,25155,330 2 20166
-'c 13227,20745,330 2 20198
-lq 13227,19320 2 51838
-rq 13227,19320 2 51746
-Bq 13227,3486,2079 0 51772
-vz 13227,21015 2 51834
-fi 13227,19335 2 51881
-fl 13227,19335 2 51882
-ff 13227,19335 2 51883
-Fi 13227,19335 2 51884
-Fl 13227,19335 2 51885
-ij 13227,19095,4350 2 51958
-bq 13227,3486,2079 0 51756
-%0 13227,19320,330 2 51901
-char175 13227,19119 2 3759
-a- "
-ab 13227,19830 2 51926
-a. 13227,19125 2 51927
-oe 13227,14355,330 0 51823
-OE 13227,19320,330 2 51791
-fo 13227,14115 0 51886
-fc 13227,14115 0 51887
-sq 13227,14106 0 51899
-/L 13227,18990 2 51944
-/l 13227,19545 2 51960
-a" 13227,20745 2 51933
-ho 13227,1026,5109 1 51934
-vZ 13227,25116 2 51802
-IJ 13227,18990,330 2 51942
diff --git a/contrib/groff/devlj4/LGI b/contrib/groff/devlj4/LGI
deleted file mode 100644
index ef8fae2..0000000
--- a/contrib/groff/devlj4/LGI
+++ /dev/null
@@ -1,351 +0,0 @@
-name LGI
-spacewidth 13227
-slant 12.000000
-pcltypeface 4102
-pclproportional 0
-pclweight 0
-pclstyle 1
-charset
-! 13227,18990,330,0,-2748 2 3617
-dq 13227,18990,0,372,-3960,372 2 3618
-" "
-sh 13227,21309,2451,1827,1062,790 2 3619
-# "
-Do 13227,19320,1074,762,288,762 2 3620
-$ "
-% 13227,19320,330,2535,882,790 2 3621
-& 13227,19320,330,54,699,54 2 3622
-cq 13227,19320,0,0,-5469 2 51751
-' "
-( 13227,19320,1935,318,-2952,318 2 3624
-) 13227,19320,1935,318,-2952,318 2 3625
-* 13227,18990,0,1995,-828,790 2 3626
-+ 13227,15075,0,960,-93,790 0 3627
-, 13227,1785,2250,0,-2769 0 3628
-char173 13227,7995,0,0,-2511 0 3629
-hy "
-- "
-. 13227,2100,330,0,-3873 0 3630
-sl 13227,19545,330,0,-1410 2 3631
-/ "
-0 13227,19320,330,564,-456,564 2 3632
-1 13227,19320,0,0,60 2 3633
-2 13227,19320,0,1578,1365,790 2 3634
-3 13227,19320,330,420,888,420 2 3635
-4 13227,19320,0,585,750,585 2 3636
-5 13227,18990,330,1215,153,790 2 3637
-6 13227,19320,330,1800,-93,790 2 3638
-7 13227,18990,0,2184,-963,790 2 3639
-8 13227,19320,330,996,423,790 2 3640
-9 13227,19320,330,741,90,741 2 3641
-: 13227,12492,330,0,-3039 0 3642
-; 13227,12492,2250,0,-2772 0 3643
-< 13227,15063,0,390,387,390 0 3644
-= 13227,11721,0,1065,-288,790 0 3645
-> 13227,15063,0,390,387,390 0 3646
-? 13227,19320,330,981,-2730,790 2 3647
-at 13227,19320,330,993,87,790 2 3648
-@ "
-A 13227,18990,0,0,2541 2 3649
-B 13227,18990,0,1095,831,790 2 3650
-C 13227,19320,330,1524,-12,790 2 3651
-D 13227,18990,0,1089,1263,790 2 3652
-E 13227,18990,0,1995,642,790 2 3653
-F 13227,18990,0,2535,594,790 2 3654
-G 13227,19320,330,1350,519,790 2 3655
-H 13227,18990,0,2316,1050,790 2 3656
-I 13227,18990,0,558,-663,558 2 3657
-J 13227,18990,330,2118,-39,790 2 3658
-K 13227,18990,0,1590,765,790 2 3659
-L 13227,18990,0,0,153 2 3660
-M 13227,18990,0,2853,1941,790 2 3661
-N 13227,18990,0,2097,882,790 2 3662
-O 13227,19320,330,1485,273,790 2 3663
-P 13227,18990,0,1152,771,790 2 3664
-Q 13227,19320,2778,1485,273,790 2 3665
-R 13227,18990,0,987,981,790 2 3666
-S 13227,19320,330,1608,1134,790 2 3667
-T 13227,18990,0,3171,-1431,790 2 3668
-U 13227,18990,330,2220,108,790 2 3669
-V 13227,18990,0,2217,-2733,790 2 3670
-W 13227,18990,0,3045,702,790 2 3671
-X 13227,18990,0,2355,1296,790 2 3672
-Y 13227,18990,0,2553,-2397,790 2 3673
-Z 13227,18990,0,1956,1203,790 2 3674
-lB 13227,18990,2940,1110,-33,790 2 3675
-[ "
-rs 13227,19545,330,0,-3072 2 3676
-\ "
-rB 13227,18990,2940,342,735,342 2 3677
-] "
-ha 13227,19758,0,9,9,9 2 51875
-_ 13227,191367,6588,1317,1317,790 3 3679
-oq 13227,19326,0,0,-6222 2 51808
-` "
-a 13227,14355,330,0,105 0 3681
-b 13227,19545,330,312,1671,312 2 3682
-c 13227,14355,330,810,261,790 0 3683
-d 13227,19545,330,2121,363,790 2 3684
-e 13227,14355,330,387,303,387 0 3685
-f 13227,19335,0,3231,-1785,790 2 3686
-g 13227,14355,4350,1545,1053,790 0 3687
-h 13227,19545,0,168,723,168 2 3688
-i 13227,18780,0,0,-2319 2 3689
-j 13227,18780,4350,906,936,790 2 3690
-k 13227,19545,0,495,504,495 2 3691
-l 13227,19545,0,0,-3603 2 3692
-m 13227,14355,0,1770,2205,790 0 3693
-n 13227,14355,0,267,774,267 0 3694
-o 13227,14355,330,372,252,372 0 3695
-p 13227,14355,5475,213,2205,213 1 3696
-q 13227,14355,5475,1668,318,790 1 3697
-r 13227,14355,0,684,-81,684 0 3698
-s 13227,14355,330,57,480,57 0 3699
-t 13227,18495,330,0,-933 2 3700
-u 13227,14025,330,714,249,714 0 3701
-v 13227,14025,0,1437,-1767,790 0 3702
-w 13227,14025,0,2574,279,790 0 3703
-x 13227,14025,0,1050,2112,790 0 3704
-y 13227,14025,4350,1986,3579,790 0 3705
-z 13227,14025,0,984,1395,790 0 3706
-lC 13227,20130,6075,1170,-2529,790 3 3707
-{ "
-ba 13227,19758,6588,0,-4623 3 3708
-| "
-rC 13227,20130,6075,0,975 3 3709
-} "
-ti 13227,10485,0,825,822,790 0 51876
-char192 13227,24630,0,0,2541 2 3776
-`A "
-char194 13227,24810,0,2133,2541,790 2 3778
-^A "
-char200 13227,24630,0,1995,642,790 2 3784
-`E "
-char202 13227,24810,0,2133,642,790 2 3786
-^E "
-char203 13227,23115,0,1995,642,790 2 3787
-:E "
-char206 13227,24810,0,2133,-663,790 2 3790
-^I "
-char207 13227,23115,0,1143,-663,790 2 3791
-:I "
-char180 13227,19725,0,753,-5706,753 2 3764
-aa "
-ga 13227,19725,0,0,-4728 2 3680
-a^ 13227,19905,0,1089,-3117,790 2 3678
-^ "
-char168 13227,18195,0,0,-4341 2 3752
-ad "
-a~ 13227,18873,0,1833,-2406,790 2 3710
-~ "
-char217 13227,24630,330,2220,108,790 2 3801
-`U "
-char219 13227,24810,330,2220,108,790 2 3803
-^U "
-char221 13227,24630,0,2553,-2397,790 2 3805
-'Y "
-char253 13227,19725,4350,1986,3579,790 2 3837
-'y "
-char176 13227,19320,0,0,-2637 2 3760
-de "
-char199 13227,19320,5325,1524,-12,790 3 3783
-,C "
-char231 13227,14355,5295,810,261,790 1 3815
-,c "
-char209 13227,23814,0,3201,882,790 2 3793
-~N "
-char241 13227,18873,0,1833,774,790 2 3825
-~n "
-char161 13227,14271,5049,0,-1647 1 3745
-r! "
-char191 13227,14214,5436,0,-126 1 3775
-r? "
-char164 13227,15684,0,1425,528,790 0 3748
-Cs "
-char163 13227,19320,330,2433,234,790 2 3747
-Po "
-char165 13227,18990,0,2712,-1056,790 2 3749
-Ye "
-char167 13227,19320,1344,66,-891,66 2 3751
-sc "
-Fn 13227,19335,3540,231,-492,231 2 51871
-char162 13227,19320,330,891,-780,790 2 3746
-ct "
-char226 13227,19905,330,1089,105,790 2 3810
-^a "
-char234 13227,19905,330,1089,303,790 2 3818
-^e "
-char244 13227,19905,330,1089,252,790 2 3828
-^o "
-char251 13227,19905,330,1089,249,790 2 3835
-^u "
-char225 13227,19725,330,753,105,753 2 3809
-'a "
-char233 13227,19725,330,753,303,753 2 3817
-'e "
-char243 13227,19725,330,753,252,753 2 3827
-'o "
-char250 13227,19725,330,753,249,753 2 3834
-'u "
-char224 13227,19725,330,0,105 2 3808
-`a "
-char232 13227,19725,330,387,303,387 2 3816
-`e "
-char242 13227,19725,330,372,252,372 2 3826
-`o "
-char249 13227,19725,330,714,249,714 2 3833
-`u "
-char228 13227,18195,330,0,105 2 3812
-:a "
-char235 13227,18195,330,387,303,387 2 3819
-:e "
-char246 13227,18195,330,372,252,372 2 3830
-:o "
-char252 13227,18195,330,714,249,714 2 3836
-:u "
-char197 13227,24810,0,0,2541 2 3781
-oA "
-char238 13227,19905,0,0,-1917 2 3822
-^i "
-char216 13227,19320,342,2895,1743,790 2 3800
-/O "
-char198 13227,18990,0,4059,2670,790 2 3782
-AE "
-char229 13227,19905,330,0,105 2 3813
-oa "
-char237 13227,19725,0,3,-2319,3 2 3821
-'i "
-char248 13227,14895,735,1119,1086,790 0 3832
-/o "
-char230 13227,14355,330,1530,1950,790 0 3814
-ae "
-char196 13227,23115,0,1143,2541,790 2 3780
-:A "
-char236 13227,19725,0,0,-2319 2 3820
-`i "
-char214 13227,23115,330,1485,273,790 2 3798
-:O "
-char220 13227,23115,330,2220,108,790 2 3804
-:U "
-char201 13227,24630,0,1995,642,790 2 3785
-'E "
-char239 13227,18195,0,0,-2319 2 3823
-:i "
-char223 13227,19335,330,570,270,570 2 3807
-ss "
-char212 13227,24810,330,2133,273,790 2 3796
-^O "
-char193 13227,24630,0,1389,2541,790 2 3777
-'A "
-char195 13227,23814,0,3201,2541,790 2 3779
-~A "
-char227 13227,18873,330,1833,105,790 2 3811
-~a "
-char208 13227,18990,0,1389,963,790 2 3792
--D "
-char240 13227,19545,330,192,237,192 2 3824
-Sd "
-char205 13227,24630,0,1389,-663,790 2 3789
-'I "
-char204 13227,24630,0,558,-663,558 2 3788
-`I "
-char211 13227,24630,330,1485,273,790 2 3795
-'O "
-char210 13227,24630,330,1485,273,790 2 3794
-`O "
-char213 13227,23814,330,3201,273,790 2 3797
-~O "
-char245 13227,18873,330,1833,252,790 2 3829
-~o "
-vS 13227,24810,330,2433,1134,790 2 51795
-vs 13227,19905,330,1539,480,790 2 51827
-char218 13227,24630,330,2220,108,790 2 3802
-'U "
-:Y 13227,23115,0,2553,-2397,790 2 51801
-char255 13227,18195,4350,1986,3579,790 2 3839
-:y "
-char222 13227,18990,0,378,771,378 2 3806
-TP "
-char254 13227,19545,5475,231,2223,231 3 3838
-Tp "
-char181 13227,14025,4350,765,1659,765 0 3765
-char182 13227,19635,4200,696,-408,696 2 3766
-ps "
-char190 13227,19110,3825,1413,627,790 2 3774
-34 "
-\- 13227,9945,0,1065,-288,790 0 51757
-char188 13227,19110,3825,918,873,790 2 3772
-14 "
-char189 13227,19110,3825,1269,1023,790 2 3773
-12 "
-char170 13227,19320,0,0,-3066 2 3754
-Of "
-char186 13227,19320,0,0,-3330 2 3770
-Om "
-char171 13227,13710,0,2418,1104,790 0 3755
-Fo "
-char187 13227,13710,0,1107,2415,790 0 3771
-Fc "
-char177 13227,15075,0,1110,-243,790 0 3761
-char166 13227,19083,5916,0,-4623 3 3750
-bb "
-char169 13227,19635,0,3927,-2190,790 2 3753
-co "
-char172 13227,12501,0,1065,-288,790 0 3756
-no "
-char174 13227,19635,0,3927,-2190,790 2 3758
-rg "
-char178 13227,19110,0,0,-2379 2 3762
-S2 "
-char179 13227,19110,0,0,-2073 2 3763
-S3 "
-char184 13227,0,5295,0,-1200 1 3768
-ac "
-char185 13227,19110,0,0,-2727 2 3769
-S1 "
-char215 13227,14814,0,897,-483,790 0 3799
-char247 13227,14655,0,1104,-252,790 0 3831
-char183 13227,11007,0,0,-4590 0 3767
-pc "
-fm 13227,18990,0,0,-3444 2 51873
-sd 13227,18990,0,0,-3444 2 51874
-dg 13227,18990,0,0,-2019 2 51755
-tm 13227,17850,0,4395,-2058,790 2 51796
-ah 13227,19905,0,1539,-3567,790 2 51935
-ao 13227,19905,0,0,-5466 2 51930
-f/ 13227,15675,777,0,-339 0 51759
-em 13227,7710,0,1317,1317,790 0 51789
-en 13227,7710,0,0,-1215 0 51790
-dd 13227,18990,0,0,-1713 2 51773
-.i 13227,14025,0,0,-2319 0 51957
-aq 13227,18990,0,0,-6060 2 3623
-bu 13227,12714,0,0,-519 0 51889
-'C 13227,24630,330,1524,-12,790 2 20166
-'c 13227,19725,330,810,261,790 2 20198
-lq 13227,19326,0,1812,-4197,790 2 51838
-rq 13227,19320,0,1512,-3897,790 2 51746
-Bq 13227,2214,2091,0,-897 0 51772
-vz 13227,19905,0,1539,1395,790 2 51834
-fi 13227,19335,0,1065,-339,790 2 51881
-fl 13227,19335,0,1065,-339,790 2 51882
-ff 13227,19335,0,5175,606,790 2 51883
-Fi 13227,19335,0,3579,1149,790 2 51884
-Fl 13227,19335,0,2703,1155,790 2 51885
-ij 13227,18780,4350,2355,645,790 2 51958
-bq 13227,2214,2091,0,-2922 0 51756
-%0 13227,19320,330,1920,4113,790 2 51901
-char175 13227,18051,0,1086,-3930,790 2 3759
-a- "
-ab 13227,19350,0,1683,-3297,790 2 51926
-a. 13227,18195,0,0,-6561 2 51927
-oe 13227,14355,330,1629,1671,790 0 51823
-OE 13227,19320,330,4059,783,790 2 51791
-fo 13227,13710,0,0,-1182 0 51886
-fc 13227,13710,0,0,-663 0 51887
-sq 13227,14106,0,876,876,790 0 51899
-/L 13227,18990,0,0,885 2 51944
-/l 13227,19545,0,0,-2769 2 51960
-a" 13227,19725,0,3210,-3906,790 2 51933
-ho 13227,735,4086,0,-4818 0 51934
-vZ 13227,24810,0,2433,1203,790 2 51802
-IJ 13227,18990,330,2259,3129,790 2 51942
diff --git a/contrib/groff/devlj4/LGR b/contrib/groff/devlj4/LGR
deleted file mode 100644
index 6e9c476..0000000
--- a/contrib/groff/devlj4/LGR
+++ /dev/null
@@ -1,350 +0,0 @@
-name LGR
-spacewidth 13227
-pcltypeface 4102
-pclproportional 0
-pclweight 0
-pclstyle 0
-charset
-! 13227,18990,330 2 3617
-dq 13227,18990 2 3618
-" "
-sh 13227,21309,2451 2 3619
-# "
-Do 13227,19320,372 2 3620
-$ "
-% 13227,19320,330 2 3621
-& 13227,19320,330 2 3622
-cq 13227,19320 2 51751
-' "
-( 13227,19320,1935 2 3624
-) 13227,19320,1935 2 3625
-* 13227,18990 2 3626
-+ 13227,15075 0 3627
-, 13227,2055,2235 0 3628
-char173 13227,7815 0 3629
-hy "
-- "
-. 13227,2055,330 0 3630
-sl 13227,19545,330 2 3631
-/ "
-0 13227,19320,330 2 3632
-1 13227,19320 2 3633
-2 13227,19320 2 3634
-3 13227,19320,330 2 3635
-4 13227,19320 2 3636
-5 13227,18990,330 2 3637
-6 13227,19320,330 2 3638
-7 13227,18990 2 3639
-8 13227,19320,330 2 3640
-9 13227,19320,330 2 3641
-: 13227,12414,330 0 3642
-; 13227,12414,2235 0 3643
-< 13227,15063 0 3644
-= 13227,11721 0 3645
-> 13227,15063 0 3646
-? 13227,19320,330 2 3647
-at 13227,19320,330 2 3648
-@ "
-A 13227,18990 2 3649
-B 13227,18990 2 3650
-C 13227,19320,330 2 3651
-D 13227,18990 2 3652
-E 13227,18990 2 3653
-F 13227,18990 2 3654
-G 13227,19320,330 2 3655
-H 13227,18990 2 3656
-I 13227,18990 2 3657
-J 13227,18990,330 2 3658
-K 13227,18990 2 3659
-L 13227,18990 2 3660
-M 13227,18990 2 3661
-N 13227,18990 2 3662
-O 13227,19320,330 2 3663
-P 13227,18990 2 3664
-Q 13227,19320,2712 2 3665
-R 13227,18990 2 3666
-S 13227,19320,330 2 3667
-T 13227,18990 2 3668
-U 13227,18990,330 2 3669
-V 13227,18990 2 3670
-W 13227,18990 2 3671
-X 13227,18990 2 3672
-Y 13227,18990 2 3673
-Z 13227,18990 2 3674
-lB 13227,18990,2940 2 3675
-[ "
-rs 13227,19545,330 2 3676
-\ "
-rB 13227,18990,2940 2 3677
-] "
-ha 13227,19758 2 51875
-_ 13227,191367,6588 3 3679
-oq 13227,19320 2 51808
-` "
-a 13227,14355,330 0 3681
-b 13227,19545,330 2 3682
-c 13227,14355,330 0 3683
-d 13227,19545,330 2 3684
-e 13227,14355,330 0 3685
-f 13227,19335 2 3686
-g 13227,14355,4350 0 3687
-h 13227,19545 2 3688
-i 13227,18780 2 3689
-j 13227,18780,4350 2 3690
-k 13227,19545 2 3691
-l 13227,19545 2 3692
-m 13227,14355 0 3693
-n 13227,14355 0 3694
-o 13227,14355,330 0 3695
-p 13227,14355,5475 1 3696
-q 13227,14355,5475 1 3697
-r 13227,14355 0 3698
-s 13227,14355,330 0 3699
-t 13227,18495,330 2 3700
-u 13227,14025,330 0 3701
-v 13227,14025 0 3702
-w 13227,14025 0 3703
-x 13227,14025 0 3704
-y 13227,14025,4350 0 3705
-z 13227,14025 0 3706
-lC 13227,20130,6075 3 3707
-{ "
-ba 13227,19758,6588 3 3708
-| "
-rC 13227,20130,6075 3 3709
-} "
-ti 13227,10485 0 51876
-char192 13227,24630 2 3776
-`A "
-char194 13227,24810 2 3778
-^A "
-char200 13227,24630 2 3784
-`E "
-char202 13227,24810 2 3786
-^E "
-char203 13227,23115 2 3787
-:E "
-char206 13227,24810 2 3790
-^I "
-char207 13227,23115 2 3791
-:I "
-char180 13227,19725 2 3764
-aa "
-ga 13227,19725 2 3680
-a^ 13227,19905 2 3678
-^ "
-char168 13227,18195 2 3752
-ad "
-a~ 13227,18867 2 3710
-~ "
-char217 13227,24630,330 2 3801
-`U "
-char219 13227,24810,330 2 3803
-^U "
-char221 13227,24630 2 3805
-'Y "
-char253 13227,19725,4350 2 3837
-'y "
-char176 13227,19320 2 3760
-de "
-char199 13227,19320,5430 3 3783
-,C "
-char231 13227,14355,5430 1 3815
-,c "
-char209 13227,23787 2 3793
-~N "
-char241 13227,18867 2 3825
-~n "
-char161 13227,14259,5061 1 3745
-r! "
-char191 13227,14265,5385 1 3775
-r? "
-char164 13227,15684 0 3748
-Cs "
-char163 13227,19320,330 2 3747
-Po "
-char165 13227,18990 2 3749
-Ye "
-char167 13227,19320,1344 2 3751
-sc "
-Fn 13227,19335,3540 2 51871
-char162 13227,19320,330 2 3746
-ct "
-char226 13227,19905,330 2 3810
-^a "
-char234 13227,19905,330 2 3818
-^e "
-char244 13227,19905,330 2 3828
-^o "
-char251 13227,19905,330 2 3835
-^u "
-char225 13227,19725,330 2 3809
-'a "
-char233 13227,19725,330 2 3817
-'e "
-char243 13227,19725,330 2 3827
-'o "
-char250 13227,19725,330 2 3834
-'u "
-char224 13227,19725,330 2 3808
-`a "
-char232 13227,19725,330 2 3816
-`e "
-char242 13227,19725,330 2 3826
-`o "
-char249 13227,19725,330 2 3833
-`u "
-char228 13227,18195,330 2 3812
-:a "
-char235 13227,18195,330 2 3819
-:e "
-char246 13227,18195,330 2 3830
-:o "
-char252 13227,18195,330 2 3836
-:u "
-char197 13227,24735 2 3781
-oA "
-char238 13227,19905 2 3822
-^i "
-char216 13227,19320,444 2 3800
-/O "
-char198 13227,18990 2 3782
-AE "
-char229 13227,19830,330 2 3813
-oa "
-char237 13227,19725 2 3821
-'i "
-char248 13227,14805,747 0 3832
-/o "
-char230 13227,14355,330 0 3814
-ae "
-char196 13227,23115 2 3780
-:A "
-char236 13227,19725 2 3820
-`i "
-char214 13227,23115,330 2 3798
-:O "
-char220 13227,23115,330 2 3804
-:U "
-char201 13227,24630 2 3785
-'E "
-char239 13227,18195 2 3823
-:i "
-char223 13227,19335,330 2 3807
-ss "
-char212 13227,24810,330 2 3796
-^O "
-char193 13227,24630 2 3777
-'A "
-char195 13227,23787 2 3779
-~A "
-char227 13227,18867,330 2 3811
-~a "
-char208 13227,18990 2 3792
--D "
-char240 13227,19545,330 2 3824
-Sd "
-char205 13227,24630 2 3789
-'I "
-char204 13227,24630 2 3788
-`I "
-char211 13227,24630,330 2 3795
-'O "
-char210 13227,24630,330 2 3794
-`O "
-char213 13227,23787,330 2 3797
-~O "
-char245 13227,18867,330 2 3829
-~o "
-vS 13227,24810,330 2 51795
-vs 13227,19905,330 2 51827
-char218 13227,24630,330 2 3802
-'U "
-:Y 13227,23115 2 51801
-char255 13227,18195,4350 2 3839
-:y "
-char222 13227,18990 2 3806
-TP "
-char254 13227,19545,5475 3 3838
-Tp "
-char181 13227,14025,4350 0 3765
-char182 13227,19635,4200 2 3766
-ps "
-char190 13227,19119,3825 2 3774
-34 "
-\- 13227,9945 0 51757
-char188 13227,19110,3825 2 3772
-14 "
-char189 13227,19110,3825 2 3773
-12 "
-char170 13227,19320 2 3754
-Of "
-char186 13227,19320 2 3770
-Om "
-char171 13227,13710 0 3755
-Fo "
-char187 13227,13710 0 3771
-Fc "
-char177 13227,15075 0 3761
-char166 13227,19083,5916 3 3750
-bb "
-char169 13227,19635 2 3753
-co "
-char172 13227,12501 0 3756
-no "
-char174 13227,19635 2 3758
-rg "
-char178 13227,19110 2 3762
-S2 "
-char179 13227,19119 2 3763
-S3 "
-char184 13227,0,5430 1 3768
-ac "
-char185 13227,19110 2 3769
-S1 "
-char215 13227,14814 0 3799
-char247 13227,14655 0 3831
-char183 13227,11025 0 3767
-pc "
-fm 13227,18990 2 51873
-sd 13227,18990 2 51874
-dg 13227,18990 2 51755
-tm 13227,17850 2 51796
-ah 13227,19905 2 51935
-ao 13227,19830 2 51930
-f/ 13227,15675,858 0 51759
-em 13227,7710 0 51789
-en 13227,7710 0 51790
-dd 13227,18990 2 51773
-.i 13227,14025 0 51957
-aq 13227,18990 2 3623
-bu 13227,12714 0 51889
-'C 13227,24630,330 2 20166
-'c 13227,19725,330 2 20198
-lq 13227,19320 2 51838
-rq 13227,19320 2 51746
-Bq 13227,2136,2154 0 51772
-vz 13227,19905 2 51834
-fi 13227,19335 2 51881
-fl 13227,19335 2 51882
-ff 13227,19335 2 51883
-Fi 13227,19335 2 51884
-Fl 13227,19335 2 51885
-ij 13227,18780,4350 2 51958
-bq 13227,2136,2154 0 51756
-%0 13227,19320,330 2 51901
-char175 13227,18078 2 3759
-a- "
-ab 13227,19350 2 51926
-a. 13227,18195 2 51927
-oe 13227,14355,330 0 51823
-OE 13227,19320,330 2 51791
-fo 13227,13710 0 51886
-fc 13227,13710 0 51887
-sq 13227,14106 0 51899
-/L 13227,18990 2 51944
-/l 13227,19545 2 51960
-a" 13227,19725 2 51933
-ho 13227,750,4137 0 51934
-vZ 13227,24810 2 51802
-IJ 13227,18990,330 2 51942
diff --git a/contrib/groff/devlj4/MARIGOLD b/contrib/groff/devlj4/MARIGOLD
deleted file mode 100644
index cc0921b..0000000
--- a/contrib/groff/devlj4/MARIGOLD
+++ /dev/null
@@ -1,351 +0,0 @@
-name MARIGOLD
-spacewidth 5856
-pcltypeface 4297
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-charset
-! 7806,12570,330 0 3617
-dq 6342,11790 0 3618
-" "
-sh 9759,11610 0 3619
-# "
-Do 9759,14325,3315 0 3620
-$ "
-% 17076,11940,330 0 3621
-& 12684,12120,330 0 3622
-cq 3903,11790 0 51751
-' "
-( 6831,16770,2235 2 3624
-) 6831,16770,2235 2 3625
-* 9759,11940 0 3626
-+ 11709,8445,360 0 3627
-, 5856,1650,4590 0 3628
-char173 6831,6345 0 3629
-hy "
-- "
-. 5856,2535,330 0 3630
-sl 8781,16770,3240 2 3631
-/ "
-0 9759,11940,330 0 3632
-1 9759,11940,60 0 3633
-2 9759,11940,450 0 3634
-3 9759,11940,330 0 3635
-4 9759,11940,1080 0 3636
-5 9759,12060,330 0 3637
-6 9759,12660,330 0 3638
-7 9759,12480,30 0 3639
-8 9759,11940,330 0 3640
-9 9759,11940,1050 0 3641
-: 5856,8475,330 0 3642
-; 5856,8475,4590 0 3643
-< 26346,16068 2 3644
-= 11709,6510 0 3645
-> 26346,16068 2 3646
-? 8295,12120,330 0 3647
-at 18051,12354,3126 0 3648
-@ "
-A 12198,12120,225 0 3649
-B 10734,12120,60 0 3650
-C 10734,12120,330 0 3651
-D 12684,12015,225 0 3652
-E 10245,11910,225 0 3653
-F 9759,12120,60 0 3654
-G 12198,12120,330 0 3655
-H 12198,12015,60 0 3656
-I 6342,11850,60 0 3657
-J 6342,11850,4128 0 3658
-K 12198,11850,60 0 3659
-L 8781,11850,225 0 3660
-M 16101,12120,225 0 3661
-N 13173,12120,330 0 3662
-O 11709,12120,330 0 3663
-P 9759,12120,60 0 3664
-Q 11709,12120,3744 0 3665
-R 11709,12120,330 0 3666
-S 9759,12120,330 0 3667
-T 10245,12120,60 0 3668
-U 12684,11910,330 0 3669
-V 12198,12120,330 0 3670
-W 16101,12120,330 0 3671
-X 12198,11910,120 0 3672
-Y 10734,12120,60 0 3673
-Z 10734,12345,330 0 3674
-lB 6342,16860,1260 2 3675
-[ "
-rs 8781,16770,3240 2 3676
-\ "
-rB 6342,16860,1260 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 2 3679
-oq 3903,11790 0 51808
-` "
-a 8295,10350,330 0 3681
-b 6831,17430,330 2 3682
-c 6342,10350,330 0 3683
-d 7806,17430,330 2 3684
-e 6342,10350,330 0 3685
-f 3903,17430,7950 3 3686
-g 7806,10350,7950 1 3687
-h 8295,17433,330 2 3688
-i 4878,13635,330 0 3689
-j 3903,13635,7950 1 3690
-k 6831,17430,330 2 3691
-l 3903,17430,330 2 3692
-m 11220,10350,330 0 3693
-n 7806,10350,330 0 3694
-o 6831,10350,330 0 3695
-p 7806,10350,7950 1 3696
-q 7317,10575,7950 1 3697
-r 6342,10350 0 3698
-s 5367,10350,330 0 3699
-t 5367,14325,330 0 3700
-u 7806,10350,330 0 3701
-v 7317,10350,330 0 3702
-w 9759,10350,330 0 3703
-x 7317,13590,330 0 3704
-y 7317,10350,7950 1 3705
-z 7317,10350,330 0 3706
-lC 8295,16380,2670 2 3707
-{ "
-ba 13173,19758,6588 2 3708
-| "
-rC 8295,16380,2670 2 3709
-} "
-ti 26346,8952 0 51876
-char192 12198,17040,225 2 3776
-`A "
-char194 12198,17520,225 2 3778
-^A "
-char200 10245,17040,225 2 3784
-`E "
-char202 10245,17520,225 2 3786
-^E "
-char203 10245,16320,225 2 3787
-:E "
-char206 6342,17520,60 2 3790
-^I "
-char207 6342,16320,60 2 3791
-:I "
-char180 11709,15030 0 3764
-aa "
-ga 11709,15030 0 3680
-a^ 11709,15300 0 3678
-^ "
-char168 11709,14580 0 3752
-ad "
-a~ 11709,13782 0 3710
-~ "
-char217 12684,17040,330 2 3801
-`U "
-char219 12684,17520,330 2 3803
-^U "
-char221 10734,17040,60 2 3805
-'Y "
-char253 7317,15030,7950 1 3837
-'y "
-char176 7806,11940 0 3760
-de "
-char199 10734,12120,4140 0 3783
-,C "
-char231 6342,10350,4320 0 3815
-,c "
-char209 13173,15828,330 2 3793
-~N "
-char241 7806,13782,330 0 3825
-~n "
-char161 7806,8313,4587 0 3745
-r! "
-char191 8295,8202,4248 0 3775
-r? "
-char164 9759,10668 0 3748
-Cs "
-char163 9759,11940,225 0 3747
-Po "
-char165 9759,12165,60 0 3749
-Ye "
-char167 9759,12120,4596 0 3751
-sc "
-Fn 9759,17430,7950 3 51871
-char162 9759,12516,2580 0 3746
-ct "
-char226 8295,15300,330 0 3810
-^a "
-char234 6342,15300,330 0 3818
-^e "
-char244 6831,15300,330 0 3828
-^o "
-char251 7806,15300,330 0 3835
-^u "
-char225 8295,15030,330 0 3809
-'a "
-char233 6342,15030,330 0 3817
-'e "
-char243 6831,15030,330 0 3827
-'o "
-char250 7806,15030,330 0 3834
-'u "
-char224 8295,15030,330 0 3808
-`a "
-char232 6342,15030,330 0 3816
-`e "
-char242 6831,15030,330 0 3826
-`o "
-char249 7806,15030,330 0 3833
-`u "
-char228 8295,14580,330 0 3812
-:a "
-char235 6342,14580,330 0 3819
-:e "
-char246 6831,14580,330 0 3830
-:o "
-char252 7806,14580,330 0 3836
-:u "
-char197 12198,16815,225 2 3781
-oA "
-char238 4878,15300,330 0 3822
-^i "
-char216 11709,12849,984 0 3800
-/O "
-char198 17565,11910,225 0 3782
-AE "
-char229 8295,14685,330 0 3813
-oa "
-char237 4878,15030,330 0 3821
-'i "
-char248 6831,11724,1635 0 3832
-/o "
-char230 10734,10350,330 0 3814
-ae "
-char196 12198,16320,225 2 3780
-:A "
-char236 4878,15030,330 0 3820
-`i "
-char214 11709,16320,330 2 3798
-:O "
-char220 12684,16320,330 2 3804
-:U "
-char201 10245,17040,225 2 3785
-'E "
-char239 4878,14580,330 0 3823
-:i "
-char223 9270,18135,7350 3 3807
-ss "
-char212 11709,17520,330 2 3796
-^O "
-char193 12198,17040,225 2 3777
-'A "
-char195 12198,15828,225 2 3779
-~A "
-char227 8295,13782,330 0 3811
-~a "
-char208 12684,12015,225 0 3792
--D "
-char240 7317,17430,330 2 3824
-Sd "
-char205 6342,17040,60 2 3789
-'I "
-char204 6342,17040,60 2 3788
-`I "
-char211 11709,17040,330 2 3795
-'O "
-char210 11709,17040,330 2 3794
-`O "
-char213 11709,15828,330 2 3797
-~O "
-char245 6831,13782,330 0 3829
-~o "
-vS 9759,17520,330 2 51795
-vs 5367,15330,330 0 51827
-char218 12684,17040,330 2 3802
-'U "
-:Y 10734,16320,60 2 51801
-char255 7317,14580,7950 1 3839
-:y "
-char222 9759,11850,60 0 3806
-TP "
-char254 7806,17430,7950 3 3838
-Tp "
-char181 14637,10800,5595 0 3765
-char182 11709,12450,4455 0 3766
-ps "
-char190 17076,11940,840 0 3774
-34 "
-\- 11709,4770 0 51757
-char188 17076,11940,840 0 3772
-14 "
-char189 17076,11940,330 0 3773
-12 "
-char170 6342,11940 0 3754
-Of "
-char186 6342,11940 0 3770
-Om "
-char171 9270,8535 0 3755
-Fo "
-char187 9270,8535 0 3771
-Fc "
-char177 11709,8445,2595 0 3761
-char166 13173,19083,5916 2 3750
-bb "
-char169 7806,15960 2 3753
-co "
-char172 11709,6780 0 3756
-no "
-char174 7806,15960 2 3758
-rg "
-char178 7317,11850 0 3762
-S2 "
-char179 7317,11850 0 3763
-S3 "
-char184 11709,0,4320 0 3768
-ac "
-char185 7317,11850 0 3769
-S1 "
-char215 11709,7815 0 3799
-char247 11709,8700,360 0 3831
-char183 5856,7662 0 3767
-pc "
-fm 4878,11610 0 51873
-sd 7806,11610 0 51874
-dg 9759,12315,3795 0 51755
-tm 9759,14445 0 51796
-ah 11709,15330 0 51935
-ao 11709,14685 0 51930
-f/ 1953,11940,330 0 51759
-em 18051,6345 0 51789
-en 11709,6345 0 51790
-dd 9759,12315,3795 0 51773
-.i 4878,10350,330 0 51957
-aq 3903,11790 0 3623
-bu 13173,14226 0 51889
-'C 10734,17040,330 2 20166
-'c 6342,15030,330 0 20198
-lq 6342,11790 0 51838
-rq 6342,11790 0 51746
-Bq 6342,1650,2550 0 51772
-vz 7317,15330,330 0 51834
-fi 7806,17430,7950 3 51881
-fl 7806,17430,7950 3 51882
-ff 7806,17430,7950 3 51883
-Fi 11709,17430,7950 3 51884
-Fl 11709,17430,7950 3 51885
-ij 8781,13635,7950 1 51958
-bq 3903,1650,2550 0 51756
-%0 22932,11940,330 0 51901
-char175 11709,13674 0 3759
-a- "
-ab 11709,14700 0 51926
-a. 11709,14580 0 51927
-oe 10734,10350,330 0 51823
-OE 16587,12120,330 0 51791
-fo 5856,8535 0 51886
-fc 5856,8535 0 51887
-sq 19029,15624 0 51899
-/L 8781,11850,225 0 51944
-/l 4878,17430,330 2 51960
-a" 11709,15030 0 51933
-ho 11709,1341,4410 0 51934
-vZ 10734,17520,330 2 51802
-IJ 12684,11850,4128 0 51942
diff --git a/contrib/groff/devlj4/Makefile.sub b/contrib/groff/devlj4/Makefile.sub
deleted file mode 100644
index dd49b63..0000000
--- a/contrib/groff/devlj4/Makefile.sub
+++ /dev/null
@@ -1,33 +0,0 @@
-DEV=lj4
-LJ4RES=600
-LJ4PRINT=$(PSPRINT)
-DEVFILES=DESC \
- ALBB ALBR \
- AOB AOI AOR \
- CB CBI CI CR \
- GB GBI GI GR \
- LGB LGI LGR \
- OB OBI OI OR \
- TB TBI TI TR \
- UB UBI UI UR \
- UCB UCBI UCI UCR \
- CLARENDON CORONET MARIGOLD S \
- generate/Makefile generate/text.map generate/special.map
-
-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/devlj4/OB b/contrib/groff/devlj4/OB
deleted file mode 100644
index 8ea8f29..0000000
--- a/contrib/groff/devlj4/OB
+++ /dev/null
@@ -1,817 +0,0 @@
-name OB
-spacewidth 7317
-pcltypeface 4113
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2925
-P . -3903
-P , -3903
-V A -3903
-A V -3903
-T o -2925
-T r -1950
-T c -2925
-T e -2925
-T d -2925
-T s -2439
-T y -2925
-T a -2925
-T w -2925
-T u -2925
-L T -1950
-L Y -2925
-Y o -3903
-Y e -3903
-Y a -3903
-A W -3414
-W A -3414
-T A -1950
-V o -2925
-V e -2925
-V a -2925
-Y A -3903
-F A -2925
-F . -3903
-F , -3903
-A T -1950
-A Y -3903
-v . -2439
-v , -2439
-y . -2439
-y , -2439
-T . -1950
-T , -1950
-L W -2925
-P A -2925
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -2439
-W e -2439
-W a -2439
-W . -3414
-W , -3414
-r . -2439
-r , -2439
-w . -2439
-w , -2439
-Y u -2439
-A v -2439
-A y -2439
-A w -1461
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -1461
-b , -1461
-O T -1461
-O V -1461
-O Y -1461
-O . -1461
-O , -1461
-L y -2439
-L O -1461
-L G -1950
-L C -1950
-L Q -1950
-V y -1461
-V u -1461
-V O -1461
-V G -1461
-V C -1461
-V Q -1461
-D T -1950
-D V -1461
-D Y -1950
-D . -1950
-D , -1950
-Y O -1461
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -1461
-F e -1461
-F a -1461
-c . -486
-c , -486
-O A -1461
-O W -975
-L U -1950
-R T -975
-R V -975
-R Y -975
-R W -975
-G T -975
-P o -1461
-P g -975
-P e -1461
-P a -1461
-C A -486
-C . -486
-C , -486
-D A -1461
-D W -975
-B T -975
-B Y -975
-B . -975
-B , -975
-A O -1461
-A G -1461
-A C -1461
-A U -1461
-A Q -1461
-W r -975
-W y -975
-W u -975
-W O -975
-W G -975
-W C -975
-W Q -975
-J A -975
-J . -975
-J , -975
-U A -1461
-U . -1950
-U , -1950
-Q A -1461
-Q W -975
-f . -486
-f , -486
-T O -1461
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -1461
-L e -1461
-L q -1461
-G V -975
-G Y -975
-G W -975
-G . -486
-G , -486
-C T -486
-C V -486
-C Y -486
-D X -1461
-B V -975
-B X -975
-B A -975
-B W -975
-S . -975
-S , -975
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -1461
-Q X -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -975
-o x -975
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -486
-g . -486
-g , -486
-p v -975
-p y -975
-p x -975
-c v -486
-c y -486
-v o -975
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -975
-e y -975
-b v -975
-b y -975
-s . -975
-s , -975
-y o -975
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-f g -486
-x o -975
-x g -975
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -975
-a y -975
-T i -975
-T S -975
-L a -975
-L S -486
-G X -486
-G A -486
-P s -975
-C X -486
-C W -486
-V i -975
-V S -975
-S T -486
-S V -486
-S Y -486
-S X -486
-S A -975
-S W -486
-Y i -975
-Y S -975
-X a -975
-X u -975
-X S -486
-A t -975
-A g -975
-A c -1461
-A d -1461
-A a -975
-A u -975
-A q -1461
-A S -486
-W i -975
-W S -975
-K c -1461
-K u -975
-K S -486
-t g -486
-o f -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-p f -486
-c f -486
-c x -486
-v e -975
-v s -975
-e f -486
-e x -975
-b f -486
-s v -486
-s y -486
-s f -486
-s x -486
-y e -975
-y s -975
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-k o -486
-k g -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -486
-k w -486
-k q -486
-O Z -486
-L J -1461
-G Z -486
-P M -486
-C Z -486
-Z o -486
-Z e -486
-Z d -486
-Z s -486
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-A s -486
-A J -1461
-J o -486
-J e -486
-J a -486
-J M -486
-K a -975
-K J -486
-t o -486
-t c -486
-t e -486
-t d -486
-t s -486
-t a -486
-t q -486
-o z -486
-h f -486
-n f -486
-m f -486
-r s -486
-p z -486
-c z -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z s -486
-z a -486
-z q -486
-b z -486
-s z -486
-a f -486
-k t -486
-k s -486
-k f -486
-k u -486
-F M -486
-A f -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -2925
-L ' -2925
-T char173 -2925
-T hy -2925
-T - -2925
-T en -2925
-T em -2925
-A cq -3414
-A ' -3414
-char173 T -2925
-hy T -2925
-- T -2925
-en T -2925
-em T -2925
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -1461
-p ' -1461
-c cq -486
-c ' -486
-e cq -975
-e ' -975
-b cq -1461
-b ' -1461
-a cq -975
-a ' -975
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-W char173 -975
-W hy -975
-W - -975
-W en -975
-W em -975
-cq d -1461
-' d -1461
-s cq -486
-s ' -486
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-K cq -486
-K ' -486
-t g -486
-b f -486
-k cq -486
-k ' -486
-M cq -486
-M ' -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-cq M -486
-' M -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-charset
-! 7317,18000,375 2 3617
-dq 12198,18375 2 3618
-" "
-sh 14637,18069,444 2 3619
-# "
-Do 14637,19755,2988 2 3620
-$ "
-% 23418,17769,444 2 3621
-& 19029,17997,375 2 3622
-cq 7317,18375 2 51751
-' "
-( 7317,18375,3165 2 3624
-) 7317,18375,3165 2 3625
-* 14637,18150 2 3626
-+ 23418,13164,534 0 3627
-, 7317,4068,4902 0 3628
-char173 7317,8307 0 3629
-hy "
-- "
-. 7317,3975,375 0 3630
-sl 7317,19650,525 2 3631
-/ "
-0 14637,17700,375 0 3632
-1 14637,17700,69 0 3633
-2 14637,17700,201 0 3634
-3 14637,17700,375 0 3635
-4 14637,17394,69 0 3636
-5 14637,17526,375 0 3637
-6 14637,17700,375 0 3638
-7 14637,17526,69 0 3639
-8 14637,17700,375 0 3640
-9 14637,17700,375 0 3641
-: 7317,12057,375 0 3642
-; 7317,12057,4902 0 3643
-< 26346,16068 0 3644
-= 23418,9639 0 3645
-> 26346,16068 0 3646
-? 11709,18000,375 2 3647
-at 23418,16950,4131 0 3648
-@ "
-A 17565,18069,69 2 3649
-B 16101,18069,69 2 3650
-C 17565,18375,375 2 3651
-D 20490,18201,201 2 3652
-E 13173,18201,201 2 3653
-F 13173,18201,69 2 3654
-G 20490,18375,375 2 3655
-H 20490,18069,69 2 3656
-I 8781,18069,69 2 3657
-J 8781,18069,4218 2 3658
-K 16587,18069,69 2 3659
-L 13173,18069,201 2 3660
-M 23418,18069,69 2 3661
-N 20490,18069,69 2 3662
-O 21954,18375,375 2 3663
-P 15126,18069,69 2 3664
-Q 21954,18375,5223 3 3665
-R 16101,18069,69 2 3666
-S 13173,18375,375 2 3667
-T 14637,18201,69 2 3668
-U 20490,18069,375 2 3669
-V 17565,18069,69 2 3670
-W 26346,18069,69 2 3671
-X 16101,18069,69 2 3672
-Y 16101,18069,69 2 3673
-Z 16101,18201,201 2 3674
-lB 7317,18201,4701 2 3675
-[ "
-rs 7317,19650,525 2 3676
-\ "
-rB 7317,18201,4701 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 7317,18375 2 51808
-` "
-a 13173,12840,375 0 3681
-b 14637,19569,375 2 3682
-c 13173,12840,375 0 3683
-d 14637,19569,375 2 3684
-e 13173,12840,375 0 3685
-f 8781,19710,69 2 3686
-g 13173,12840,5400 1 3687
-h 14637,19569,69 2 3688
-i 7317,19332,69 2 3689
-j 7317,19332,5400 3 3690
-k 13173,19569,69 2 3691
-l 7317,19569,69 2 3692
-m 21954,12900,69 0 3693
-n 14637,12840,69 0 3694
-o 14637,12840,375 0 3695
-p 14637,12840,5469 1 3696
-q 14637,12840,5469 1 3697
-r 10245,12780,69 0 3698
-s 10245,12840,375 0 3699
-t 8781,17100,375 0 3700
-u 14637,12534,375 0 3701
-v 13173,12534,69 0 3702
-w 20490,12534,69 0 3703
-x 13173,12534,69 0 3704
-y 13173,12534,5439 1 3705
-z 13173,12666,201 0 3706
-lC 13173,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,19935,6210 3 3709
-} "
-ti 26346,9435 0 51876
-char192 17565,24537,69 2 3776
-`A "
-char194 17565,24273,69 2 3778
-^A "
-char200 13173,24537,201 2 3784
-`E "
-char202 13173,24273,201 2 3786
-^E "
-char203 13173,23301,201 2 3787
-:E "
-char206 8781,24273,69 2 3790
-^I "
-char207 8781,23301,69 2 3791
-:I "
-char180 14637,18843 2 3764
-aa "
-ga 14637,18843 2 3680
-a^ 14637,18738 2 3678
-^ "
-char168 14637,17694 0 3752
-ad "
-a~ 14637,17694 0 3710
-~ "
-char217 20490,24537,375 2 3801
-`U "
-char219 20490,24273,375 2 3803
-^U "
-char221 16101,24537,69 2 3805
-'Y "
-char253 13173,18843,5439 3 3837
-'y "
-char176 14637,17700 0 3760
-de "
-char199 17565,18375,6663 3 3783
-,C "
-char231 13173,12840,5469 1 3815
-,c "
-char209 20490,23031,69 2 3793
-~N "
-char241 14637,17694,69 0 3825
-~n "
-char161 7317,12906,5469 1 3745
-r! "
-char191 11709,12906,5469 1 3775
-r? "
-char164 14637,15834 0 3748
-Cs "
-char163 14637,17700,201 0 3747
-Po "
-char165 14637,17769,69 2 3749
-Ye "
-char167 14637,18000,1383 2 3751
-sc "
-Fn 14637,19710,69 2 51871
-char162 14637,19788,135 2 3746
-ct "
-char226 13173,18738,375 2 3810
-^a "
-char234 13173,18738,375 2 3818
-^e "
-char244 14637,18738,375 2 3828
-^o "
-char251 14637,18738,375 2 3835
-^u "
-char225 13173,18843,375 2 3809
-'a "
-char233 13173,18843,375 2 3817
-'e "
-char243 14637,18843,375 2 3827
-'o "
-char250 14637,18843,375 2 3834
-'u "
-char224 13173,18843,375 2 3808
-`a "
-char232 13173,18843,375 2 3816
-`e "
-char242 14637,18843,375 2 3826
-`o "
-char249 14637,18843,375 2 3833
-`u "
-char228 13173,17694,375 0 3812
-:a "
-char235 13173,17694,375 0 3819
-:e "
-char246 14637,17694,375 0 3830
-:o "
-char252 14637,17694,375 0 3836
-:u "
-char197 17565,25002,69 2 3781
-oA "
-char238 7317,18738,69 2 3822
-^i "
-char216 21954,18375,375 2 3800
-/O "
-char198 22932,18201,201 2 3782
-AE "
-char229 13173,18684,375 2 3813
-oa "
-char237 7317,18843,69 2 3821
-'i "
-char248 14637,12849,402 0 3832
-/o "
-char230 20004,12840,375 0 3814
-ae "
-char196 17565,23301,69 2 3780
-:A "
-char236 7317,18843,69 2 3820
-`i "
-char214 21954,23301,375 2 3798
-:O "
-char220 20490,23301,375 2 3804
-:U "
-char201 13173,24537,201 2 3785
-'E "
-char239 7317,17694,69 0 3823
-:i "
-char223 14637,19710,375 2 3807
-ss "
-char212 21954,24273,375 2 3796
-^O "
-char193 17565,24537,69 2 3777
-'A "
-char195 17565,23031,69 2 3779
-~A "
-char227 13173,17694,375 0 3811
-~a "
-char208 20490,18201,201 2 3792
--D "
-char240 14637,19503,375 2 3824
-Sd "
-char205 8781,24537,69 2 3789
-'I "
-char204 8781,24537,69 2 3788
-`I "
-char211 21954,24537,375 2 3795
-'O "
-char210 21954,24537,375 2 3794
-`O "
-char213 21954,23031,375 2 3797
-~O "
-char245 14637,17694,375 0 3829
-~o "
-vS 13173,24273,375 2 51795
-vs 10245,18738,375 2 51827
-char218 20490,24537,375 2 3802
-'U "
-:Y 16101,23301,69 2 51801
-char255 13173,17694,5439 1 3839
-:y "
-char222 15126,18069,69 2 3806
-TP "
-char254 14637,19569,5469 3 3838
-Tp "
-char181 15612,12630,4680 0 3765
-char182 14637,19635,4200 2 3766
-ps "
-char190 23418,17700,444 0 3774
-34 "
-\- 23418,7455 0 51757
-char188 23418,18099,444 2 3772
-14 "
-char189 23418,18099,444 2 3773
-12 "
-char170 9759,17700 0 3754
-Of "
-char186 9759,17700 0 3770
-Om "
-char171 11709,11028 0 3755
-Fo "
-char187 11709,11028 0 3771
-Fc "
-char177 23418,13164,4314 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 23418,10770 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 9759,17700 0 3762
-S2 "
-char179 9759,17700 0 3763
-S3 "
-char184 14637,196476,5469 3 3768
-ac "
-char185 9759,18099 2 3769
-S1 "
-char215 23418,13107,567 0 3799
-char247 23418,13017,387 0 3831
-char183 7317,11274 0 3767
-pc "
-fm 7317,18096 2 51873
-sd 14637,18096 2 51874
-dg 14637,18201,426 2 51755
-tm 16101,17850 2 51796
-ah 14637,18738 2 51935
-ao 14637,18684 2 51930
-f/ 2928,17544,444 0 51759
-em 23418,8085 0 51789
-en 14637,8085 0 51790
-dd 14637,18201,426 2 51773
-.i 7317,12534,69 0 51957
-aq 7317,18375 2 3623
-bu 13173,14226 0 51889
-'C 17565,24537,375 2 20166
-'c 13173,18843,375 2 20198
-lq 12198,18330 2 51838
-rq 12198,18375 2 51746
-Bq 12198,4095,4371 0 51772
-vz 13173,18738,201 2 51834
-fi 15126,19710,69 2 51881
-fl 15126,19710,69 2 51882
-ff 16587,19710,69 2 51883
-Fi 22932,19710,69 2 51884
-Fl 22932,19710,69 2 51885
-ij 14637,19332,5400 3 51958
-bq 7317,4095,4371 0 51756
-%0 33177,17769,444 2 51901
-char175 14637,16722 0 3759
-a- "
-ab 14637,18525 2 51926
-a. 14637,18792 2 51927
-oe 22443,12840,375 0 51823
-OE 24882,18375,375 2 51791
-fo 7317,11028 0 51886
-fc 7317,11028 0 51887
-sq 19029,15624 0 51899
-/L 13173,18069,201 2 51944
-/l 7317,19569,69 2 51960
-a" 14637,18843 2 51933
-ho 14637,654,3774 0 51934
-vZ 16101,24273,201 2 51802
-IJ 17565,18069,4218 2 51942
diff --git a/contrib/groff/devlj4/OBI b/contrib/groff/devlj4/OBI
deleted file mode 100644
index e17fe3f..0000000
--- a/contrib/groff/devlj4/OBI
+++ /dev/null
@@ -1,810 +0,0 @@
-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 -2439
-P . -3903
-P , -3903
-V A -3903
-A V -4389
-T o -2439
-T r -2439
-T c -2439
-T e -2439
-T d -2439
-T s -2439
-T y -2439
-T a -2439
-T w -2439
-T u -2439
-L T -2439
-L Y -2439
-Y o -3903
-Y e -3414
-Y a -3903
-A W -3903
-W A -3414
-T A -2439
-V o -2925
-V e -2439
-V a -2925
-Y A -3903
-F A -1461
-F . -3903
-F , -3903
-A T -2925
-A Y -4389
-v . -2925
-v , -2925
-y . -2925
-y , -2925
-T . -2439
-T , -2439
-L W -2439
-P A -1950
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -2439
-W e -1950
-W a -2439
-W . -3414
-W , -3414
-r . -2439
-r , -2439
-w . -2925
-w , -2925
-Y u -2439
-A v -2925
-A y -2925
-A w -2925
-o . -975
-o , -975
-p . -975
-p , -975
-e . -486
-e , -486
-b . -975
-b , -975
-O T -2439
-O V -1950
-O Y -2439
-O . -1950
-O , -1950
-L y -2439
-L O -2439
-L G -2439
-L C -2439
-L Q -2439
-V y -1461
-V u -1461
-V O -1461
-V G -1461
-V C -1461
-V Q -1461
-D T -2439
-D V -1950
-D Y -2439
-D . -1950
-D , -1950
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -486
-F e -486
-F a -486
-c . -486
-c , -486
-O A -975
-O W -1461
-L U -2439
-R T -486
-R V -486
-R Y -486
-R W -486
-G T -975
-P o -975
-P g -975
-P e -975
-P a -975
-C A -486
-C . -486
-C , -486
-D A -975
-D W -1461
-B T -1950
-B Y -1950
-B . -1461
-B , -1461
-A O -1950
-A G -1950
-A C -1950
-A U -1950
-A Q -1950
-W r -975
-W y -975
-W u -975
-W O -975
-W G -975
-W C -975
-W Q -975
-J A -975
-J . -975
-J , -975
-U A -975
-U . -1950
-U , -1950
-Q W -1461
-f . -486
-f , -486
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -1950
-L e -1461
-L q -1950
-G V -975
-G Y -975
-G W -975
-G . -486
-G , -486
-P T -975
-P V -975
-P Y -975
-C T -486
-C V -486
-C Y -486
-D X -1461
-B V -1950
-B X -1461
-B A -975
-B W -1461
-S . -486
-S , -486
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1950
-A e -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -975
-o x -486
-o w -975
-h v -975
-h y -975
-n v -975
-n y -975
-p v -486
-p y -486
-p x -486
-c v -486
-c y -486
-c w -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -975
-e y -975
-b v -975
-b y -975
-b w -975
-s . -486
-s , -486
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -486
-x g -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-a v -975
-a y -975
-a w -975
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T i -486
-T S -486
-L a -975
-L S -975
-R o -975
-R y -486
-R O -486
-R G -486
-R C -486
-R U -486
-R Q -486
-G X -486
-G A -486
-P s -975
-P Z -975
-P X -975
-P W -975
-C X -486
-C W -486
-V i -486
-V S -486
-S T -975
-S V -975
-S Y -975
-S X -486
-S A -486
-S W -975
-Y i -486
-Y S -486
-X a -975
-X u -975
-X S -486
-A t -975
-A g -975
-A c -1461
-A d -1950
-A a -975
-A u -975
-A q -1950
-A S -975
-W i -486
-W S -486
-K c -1461
-K u -975
-K S -975
-o f -486
-h w -975
-n w -975
-p f -486
-p w -486
-c f -486
-c x -486
-v e -486
-v s -486
-e f -486
-e x -486
-e w -975
-b f -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-w e -486
-w s -486
-k o -486
-k g -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -486
-k w -486
-k q -486
-O Z -486
-R e -975
-R a -975
-R u -486
-R S -486
-G Z -486
-C Z -486
-Z o -975
-Z e -975
-Z d -975
-Z y -486
-Z a -975
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-J o -486
-J e -486
-J a -486
-K a -975
-o z -486
-h f -486
-n f -486
-p z -486
-c z -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z a -486
-z q -486
-b z -486
-a f -486
-k t -486
-k f -486
-k u -486
-A f -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -2439
-L ' -2439
-T char173 -2439
-T hy -2439
-T - -2439
-T en -2439
-T em -2439
-A cq -3414
-A ' -3414
-char173 T -2925
-hy T -2925
-- T -2925
-en T -2925
-em T -2925
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -486
-p ' -486
-c cq -486
-c ' -486
-e cq -1461
-e ' -1461
-b cq -1950
-b ' -1950
-a cq -975
-a ' -975
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -1461
-h ' -1461
-n cq -1461
-n ' -1461
-R cq -486
-R ' -486
-W char173 -975
-W hy -975
-W - -975
-W en -975
-W em -975
-cq d -1461
-' d -1461
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-R char173 -486
-R hy -486
-R - -486
-R en -486
-R em -486
-K cq -486
-K ' -486
-b f -486
-k cq -486
-k ' -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-charset
-! 7317,18000,375,1944,753,737 2 3617
-dq 12198,18375,0,1623,-2622,737 2 3618
-" "
-sh 14637,18069,444,1440,228,737 2 3619
-# "
-Do 14637,19839,3099,1341,702,737 2 3620
-$ "
-% 23418,17769,264,0,-2067 0 3621
-& 19029,18000,375,237,198,237 2 3622
-cq 7317,18375,0,2511,-531,737 2 51751
-' "
-( 7317,18375,3165,3450,135,737 2 3624
-) 7317,18375,3165,1164,2421,737 2 3625
-* 14637,18150,0,63,-2364,63 2 3626
-+ 23418,13164,534,0,-3528 0 3627
-, 7317,3966,5040,0,3423 1 3628
-char173 7317,8715,0,1497,1071,737 0 3629
-hy "
-- "
-. 7317,3849,375,0,627 0 3630
-sl 7317,19575,450,4377,2736,737 2 3631
-/ "
-0 14637,17700,375,933,-159,737 0 3632
-1 14637,17700,69,0,-2430 0 3633
-2 14637,17700,201,921,858,737 0 3634
-3 14637,17700,375,372,819,372 0 3635
-4 14637,17394,69,1008,684,737 0 3636
-5 14637,17526,375,1362,669,737 0 3637
-6 14637,17700,375,399,-582,399 0 3638
-7 14637,17526,69,2931,-123,737 0 3639
-8 14637,17700,375,1155,174,737 0 3640
-9 14637,17700,375,843,-405,737 0 3641
-: 7317,11754,375,759,627,737 0 3642
-; 7317,11754,5040,759,3423,737 1 3643
-< 26346,16068,0,0,-3981 0 3644
-= 23418,9624,0,0,-4068 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 11709,18000,375,900,-1323,737 2 3647
-at 23418,16950,4131,966,348,737 0 3648
-@ "
-A 17565,18069,69,0,2586 2 3649
-B 16101,18069,69,864,306,737 2 3650
-C 17565,18375,375,2640,-600,737 2 3651
-D 20490,18069,69,720,279,720 2 3652
-E 13173,18201,201,2835,738,737 2 3653
-F 13173,18201,69,3051,612,737 2 3654
-G 20490,18375,375,1230,-798,737 2 3655
-H 20490,18069,69,1671,417,737 2 3656
-I 8781,18069,69,1779,441,737 2 3657
-J 8781,18069,4242,1551,2634,737 2 3658
-K 16101,18069,69,3528,366,737 2 3659
-L 13173,18069,201,201,168,201 2 3660
-M 23418,18069,414,1542,768,737 2 3661
-N 20490,18069,69,1383,192,737 2 3662
-O 21954,18375,375,942,-447,737 2 3663
-P 14637,18069,69,2064,519,737 2 3664
-Q 21954,18375,4200,1008,-396,737 2 3665
-R 16101,18069,69,900,387,737 2 3666
-S 13173,18375,375,1626,879,737 2 3667
-T 14637,18201,69,3006,-1071,737 2 3668
-U 20490,18069,375,1671,-1071,737 2 3669
-V 17565,18069,69,3372,-1446,737 2 3670
-W 24882,18069,69,3120,-1605,737 2 3671
-X 16101,18069,69,2451,1470,737 2 3672
-Y 16101,18069,69,3747,-1419,737 2 3673
-Z 16101,18201,201,2589,2115,737 2 3674
-lB 7317,18249,4749,3699,2235,737 2 3675
-[ "
-rs 7317,19575,450,0,-1611 2 3676
-\ "
-rB 7317,18249,4749,3696,2238,737 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,737 3 3679
-oq 7317,18375,0,2508,-528,737 2 51808
-` "
-a 13173,12840,375,189,954,189 0 3681
-b 14637,19779,375,666,1191,666 2 3682
-c 12684,12840,375,2118,171,737 0 3683
-d 14637,19569,375,2727,594,737 2 3684
-e 13173,12840,375,750,480,737 0 3685
-f 8781,19710,69,3357,996,737 2 3686
-g 13173,12840,5400,1836,1659,737 1 3687
-h 14637,19569,69,423,1242,423 2 3688
-i 7317,19308,69,1794,1131,737 2 3689
-j 7317,19308,5400,1797,3720,737 3 3690
-k 13173,19569,69,2670,1353,737 2 3691
-l 7317,19569,69,2586,1086,737 2 3692
-m 21954,12840,69,375,1272,375 0 3693
-n 14637,12840,69,438,1206,438 0 3694
-o 14637,12840,375,708,618,708 0 3695
-p 14637,12840,5469,663,2349,663 1 3696
-q 14637,12840,5469,1281,558,737 1 3697
-r 10245,12840,69,1326,1107,737 0 3698
-s 10245,12840,375,1188,1230,737 0 3699
-t 8781,17055,375,2148,-189,737 0 3700
-u 14637,12534,375,1230,417,737 0 3701
-v 13173,12534,69,2223,-768,737 0 3702
-w 20490,12534,69,2229,-954,737 0 3703
-x 13173,12534,69,1647,2190,737 0 3704
-y 13173,12534,5469,2040,1176,737 1 3705
-z 13173,12666,201,1464,1689,737 0 3706
-lC 13173,19935,6210,3339,-972,737 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 13173,19935,6210,63,2304,63 3 3709
-} "
-ti 26346,9435,0,0,-4029 0 51876
-char192 17565,24342,69,0,2586 2 3776
-`A "
-char194 17565,24321,69,0,2586 2 3778
-^A "
-char200 13173,24342,201,2835,738,737 2 3784
-`E "
-char202 13173,24321,201,2835,738,737 2 3786
-^E "
-char203 13173,23610,201,3084,738,737 2 3787
-:E "
-char206 8781,24321,69,4296,441,737 2 3790
-^I "
-char207 8781,23610,69,5280,441,737 2 3791
-:I "
-char180 14637,18801,0,297,-5763,297 2 3764
-aa "
-ga 14637,18801,0,0,-4419 2 3680
-a^ 14637,18780,0,0,-3456 2 3678
-^ "
-char168 14637,18090,0,429,-4023,429 2 3752
-ad "
-a~ 14637,17847,0,1308,-3438,737 2 3710
-~ "
-char217 20490,24342,375,1671,-1071,737 2 3801
-`U "
-char219 20490,24321,375,1671,-1071,737 2 3803
-^U "
-char221 16101,24342,69,3747,-1419,737 2 3805
-'Y "
-char253 13173,18801,5469,2040,1176,737 3 3837
-'y "
-char176 14637,17700,0,0,-2586 0 3760
-de "
-char199 17565,18375,5988,2640,-600,737 3 3783
-,C "
-char231 12684,12840,5733,2118,171,737 1 3815
-,c "
-char209 20490,23382,69,1383,192,737 2 3793
-~N "
-char241 14637,17847,69,1308,1206,737 2 3825
-~n "
-char161 7317,12906,5469,861,1836,737 1 3745
-r! "
-char191 11709,12906,5469,0,90 1 3775
-r? "
-char164 14637,15834,0,1452,477,737 0 3748
-Cs "
-char163 14637,17700,201,1260,1419,737 0 3747
-Po "
-char165 14637,18069,69,4212,-132,737 2 3749
-Ye "
-char167 14637,18375,1383,0,-933 2 3751
-sc "
-Fn 14637,19710,69,366,-1863,366 2 51871
-char162 14637,19812,342,2082,-1152,737 2 3746
-ct "
-char226 13173,18780,375,711,954,711 2 3810
-^a "
-char234 13173,18780,375,750,480,737 2 3818
-^e "
-char244 14637,18780,375,708,618,708 2 3828
-^o "
-char251 14637,18780,375,1230,417,737 2 3835
-^u "
-char225 13173,18801,375,1029,954,737 2 3809
-'a "
-char233 13173,18801,375,1029,480,737 2 3817
-'e "
-char243 14637,18801,375,708,618,708 2 3827
-'o "
-char250 14637,18801,375,1230,417,737 2 3834
-'u "
-char224 13173,18801,375,189,954,189 2 3808
-`a "
-char232 13173,18801,375,750,480,737 2 3816
-`e "
-char242 14637,18801,375,708,618,708 2 3826
-`o "
-char249 14637,18801,375,1230,417,737 2 3833
-`u "
-char228 13173,18090,375,1161,954,737 2 3812
-:a "
-char235 13173,18090,375,1161,480,737 2 3819
-:e "
-char246 14637,18090,375,708,618,708 2 3830
-:o "
-char252 14637,18090,375,1230,417,737 2 3836
-:u "
-char197 17565,25035,69,0,2586 2 3781
-oA "
-char238 7317,18780,69,3639,1134,737 2 3822
-^i "
-char216 21954,18375,1017,1311,-312,737 2 3800
-/O "
-char198 22932,18201,201,2844,2589,737 2 3782
-AE "
-char229 13173,18678,375,189,954,189 2 3813
-oa "
-char237 7317,18801,69,3957,1134,737 2 3821
-'i "
-char248 14637,13446,843,1227,1224,737 0 3832
-/o "
-char230 20004,12840,375,744,945,737 0 3814
-ae "
-char196 17565,23610,69,888,2586,737 2 3780
-:A "
-char236 7317,18801,69,1116,1134,737 2 3820
-`i "
-char214 21954,23610,375,942,-447,737 2 3798
-:O "
-char220 20490,23610,375,1671,-1071,737 2 3804
-:U "
-char201 13173,24342,201,3348,738,737 2 3785
-'E "
-char239 7317,18090,69,4089,1134,737 2 3823
-:i "
-char223 14637,19500,375,396,1206,396 2 3807
-ss "
-char212 21954,24321,375,942,-447,737 2 3796
-^O "
-char193 17565,24342,69,1152,2586,737 2 3777
-'A "
-char195 17565,23382,69,1752,2586,737 2 3779
-~A "
-char227 13173,17847,375,2040,954,737 2 3811
-~a "
-char208 20490,18069,69,720,318,720 2 3792
--D "
-char240 14637,19674,375,831,618,737 2 3824
-Sd "
-char205 8781,24342,69,5544,441,737 2 3789
-'I "
-char204 8781,24342,69,1779,441,737 2 3788
-`I "
-char211 21954,24342,375,942,-447,737 2 3795
-'O "
-char210 21954,24342,375,942,-447,737 2 3794
-`O "
-char213 21954,23382,375,942,-447,737 2 3797
-~O "
-char245 14637,17847,375,1308,618,737 2 3829
-~o "
-vS 13173,24321,375,3120,879,737 2 51795
-vs 10245,18780,375,3117,1230,737 2 51827
-char218 20490,24342,375,1671,-1071,737 2 3802
-'U "
-:Y 16101,23610,69,3747,-1419,737 2 51801
-char255 13173,18090,5469,2040,1176,737 3 3839
-:y "
-char222 14637,18069,69,1347,384,737 2 3806
-TP "
-char254 14637,19779,5469,672,2361,672 3 3838
-Tp "
-char181 15612,12630,4680,1422,2907,737 0 3765
-char182 14637,19635,4200,18,-1140,18 2 3766
-ps "
-char190 23418,17769,444,0,-870 0 3774
-34 "
-\- 23418,7455,0,0,-3528 0 51757
-char188 23418,17865,444,0,-2133 2 3772
-14 "
-char189 23418,17865,444,0,-1794 2 3773
-12 "
-char170 9759,17700,0,765,-258,737 0 3754
-Of "
-char186 9759,17700,0,1815,-81,737 0 3770
-Om "
-char171 11220,10851,0,1272,132,737 0 3755
-Fo "
-char187 11220,10851,0,588,816,588 0 3771
-Fc "
-char177 23418,13080,4230,0,-3522 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,3885,-2094,737 2 3753
-co "
-char172 23418,10770,0,0,-3105 0 3756
-no "
-char174 13173,19635,0,3885,-2094,737 2 3758
-rg "
-char178 9270,17700,0,2130,-162,737 0 3762
-S2 "
-char179 9270,17700,0,1656,-123,737 0 3763
-S3 "
-char184 14637,393,5733,0,-1119 1 3768
-ac "
-char185 9270,17865,0,708,-1470,708 2 3769
-S1 "
-char215 23418,13107,567,0,-4626 0 3799
-char247 23418,12999,369,0,-3531 0 3831
-char183 7317,10899,0,282,-741,282 0 3767
-pc "
-fm 7317,18096,0,1629,-2067,737 2 51873
-sd 14637,18096,0,0,-2067 2 51874
-dg 14637,18201,426,666,-762,666 2 51755
-tm 16101,17850,0,1425,-1962,737 2 51796
-ah 14637,18780,0,921,-4398,737 2 51935
-ao 14637,18678,0,0,-5652 2 51930
-f/ 2439,17769,444,7344,7137,737 0 51759
-em 23418,8070,0,759,219,737 0 51789
-en 14637,8070,0,681,459,681 0 51790
-dd 14637,18201,426,630,-726,630 2 51773
-.i 7317,12534,69,1116,1134,737 0 51957
-aq 7317,18375,0,1659,-2622,737 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 17565,24342,375,2640,-600,737 2 20166
-'c 12684,18801,375,2415,171,737 2 20198
-lq 11709,18375,0,2910,-387,737 2 51838
-rq 11709,18375,0,2895,-372,737 2 51746
-Bq 12198,3972,4527,0,2505 0 51772
-vz 13173,18780,201,1653,1689,737 2 51834
-fi 15612,19710,69,1506,900,737 2 51881
-fl 15612,19710,69,2385,816,737 2 51882
-ff 16587,19710,69,3507,816,737 2 51883
-Fi 23418,19710,69,1683,684,737 2 51884
-Fl 23418,19710,69,2499,666,737 2 51885
-ij 14637,19308,5400,1794,1131,737 3 51958
-bq 7317,3972,4527,0,2502 0 51756
-%0 33663,17769,264,0,-2289 0 51901
-char175 14637,17490,0,843,-3735,737 0 3759
-a- "
-ab 14637,18528,0,396,-3984,396 2 51926
-a. 14637,18786,0,0,-6408 2 51927
-oe 22443,12840,375,720,618,720 0 51823
-OE 24882,18375,375,2916,-513,737 2 51791
-fo 6831,10851,0,1296,132,737 0 51886
-fc 6831,10851,0,609,819,609 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 13173,18069,201,198,1188,198 2 51944
-/l 7317,19569,69,3264,1563,737 2 51960
-a" 14637,18801,0,3432,-3054,737 2 51933
-ho 14637,636,4140,0,-4476 0 51934
-vZ 16101,24321,201,2589,2115,737 2 51802
-IJ 17565,18069,4242,1548,441,737 2 51942
diff --git a/contrib/groff/devlj4/OI b/contrib/groff/devlj4/OI
deleted file mode 100644
index bbe9b44..0000000
--- a/contrib/groff/devlj4/OI
+++ /dev/null
@@ -1,923 +0,0 @@
-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 -2439
-P . -3903
-P , -3903
-V A -3903
-A V -4389
-T o -3414
-T r -3414
-T c -3414
-T e -3414
-T d -3414
-T s -3414
-T y -3414
-T a -3903
-T w -3414
-T u -3414
-L T -2439
-L Y -2439
-Y o -2925
-Y e -2925
-Y a -3414
-A W -3903
-W A -2925
-T A -3414
-V o -2925
-V e -2925
-V a -3414
-Y A -2925
-F A -3903
-F . -3903
-F , -3903
-A T -4389
-A Y -4389
-v . -2925
-v , -2925
-y . -2925
-y , -2925
-T . -3414
-T , -3414
-L W -2439
-P A -3414
-V . -3903
-V , -3903
-Y . -2925
-Y , -2925
-W o -1950
-W e -1950
-W a -2439
-W . -2925
-W , -2925
-r . -2925
-r , -2925
-w . -2925
-w , -2925
-Y u -1461
-A v -2439
-A y -2925
-A w -2439
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -486
-e , -486
-b . -1950
-b , -1950
-O T -2925
-O V -1461
-O Y -1461
-O . -2439
-O , -2439
-L y -2439
-L O -2439
-L G -2439
-L C -2439
-L Q -2439
-V y -1461
-V u -1461
-V O -1461
-V G -1461
-V C -1461
-V Q -1461
-D T -2925
-D V -1461
-D Y -1461
-D . -2439
-D , -2439
-Y O -1461
-Y G -1461
-Y C -1461
-Y Q -1461
-F o -1950
-F e -1950
-F a -2439
-c . -486
-c , -486
-O A -1950
-O W -975
-L U -1950
-R T -1461
-R V -1461
-R Y -1461
-R W -1461
-G T -975
-P o -1461
-P g -975
-P e -1461
-P a -1950
-C A -975
-C . -975
-C , -975
-D A -1950
-D W -975
-B T -1950
-B Y -1461
-B . -1461
-B , -1461
-A O -1950
-A G -1950
-A C -1950
-A U -2439
-A Q -1950
-W r -975
-W y -975
-W u -975
-W O -975
-W G -975
-W C -975
-W Q -975
-J A -975
-J . -975
-J , -975
-U A -2439
-U . -2439
-U , -2439
-Q W -975
-f . -486
-f , -486
-T O -2439
-T G -2439
-T C -2439
-T Q -2439
-O X -1461
-L o -1950
-L e -1950
-L q -1950
-G V -975
-G Y -975
-G W -975
-G . -486
-G , -486
-P T -975
-P V -975
-P Y -975
-C T -975
-C V -975
-C Y -975
-D X -1461
-B V -1461
-B X -1461
-B A -1461
-B W -975
-S . -1461
-S , -1461
-F r -486
-F y -486
-F u -486
-F O -486
-F G -486
-F C -486
-F Q -486
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1950
-A e -1950
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -486
-o y -1461
-o x -975
-o w -486
-h v -486
-h y -1461
-n v -486
-n y -1461
-r g -486
-g . -486
-g , -486
-p v -486
-p y -1461
-p x -975
-c v -486
-c y -486
-c w -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -975
-v q -486
-e v -486
-e y -975
-b v -486
-b y -1461
-b w -486
-s . -975
-s , -975
-y o -486
-y g -486
-y c -486
-y d -486
-y a -975
-y q -486
-f g -486
-x o -975
-x g -975
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -486
-a y -1461
-a w -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -975
-w q -486
-T i -486
-T S -1461
-L a -975
-L S -486
-R o -975
-R y -975
-R O -975
-R G -975
-R C -975
-R U -1461
-R Q -975
-G X -486
-G A -486
-P s -975
-P Z -975
-P X -975
-P W -975
-C X -975
-C W -975
-V i -486
-V S -1461
-S T -486
-S V -486
-S Y -486
-S X -486
-S A -1461
-S W -486
-Y i -486
-Y S -1461
-X a -975
-X u -1461
-X S -486
-A t -1461
-A g -1461
-A c -1950
-A d -1950
-A a -1461
-A u -1950
-A q -1950
-A S -975
-W i -486
-W S -975
-K c -1461
-K u -1461
-K S -486
-t g -486
-o f -486
-h w -486
-n w -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -975
-r q -486
-p f -486
-p w -486
-c f -486
-c x -486
-v e -486
-v s -486
-e f -486
-e x -486
-e w -486
-b f -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -975
-f q -486
-w e -486
-w s -486
-k o -486
-k g -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -975
-k w -486
-k q -486
-O Z -975
-L J -1461
-R e -975
-R a -975
-R u -975
-R S -486
-G Z -486
-P U -486
-C Z -975
-E a -486
-Z o -975
-Z e -975
-Z d -975
-Z y -975
-Z a -975
-Z w -975
-Z u -975
-Z O -975
-Z G -975
-Z C -975
-Z S -486
-Z Q -975
-D Z -975
-B Z -975
-S Z -486
-F i -486
-F j -486
-F S -486
-A s -486
-A J -1950
-A . -486
-A , -486
-J o -486
-J e -486
-J a -975
-J U -486
-U g -486
-U J -486
-K a -975
-K J -486
-t o -486
-t c -486
-t e -486
-t d -486
-t a -975
-t q -486
-o z -486
-h f -486
-n f -486
-r s -486
-g a -486
-p z -486
-c z -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z a -975
-z q -486
-b z -486
-a f -486
-k t -486
-k f -486
-k u -486
-T U -486
-R J -975
-C a -486
-C U -486
-V U -486
-E U -486
-B a -486
-B U -486
-Y U -486
-F U -486
-X U -486
-A b -486
-A f -975
-W U -486
-U t -486
-U o -486
-U h -486
-U n -486
-U m -486
-U l -486
-U r -486
-U i -486
-U p -486
-U c -486
-U v -486
-U e -486
-U z -486
-U d -486
-U b -486
-U s -486
-U y -486
-U f -486
-U x -486
-U a -975
-U w -486
-U j -486
-U q -486
-U k -486
-U T -486
-U O -486
-U H -486
-U N -486
-U M -486
-U L -486
-U R -486
-U G -486
-U I -486
-U P -486
-U C -486
-U V -486
-U E -486
-U Z -486
-U D -486
-U B -486
-U S -486
-U Y -486
-U F -486
-U X -486
-U W -486
-U U -975
-U Q -486
-U K -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -975
-L cq -2439
-L ' -2439
-T char173 -3414
-T hy -3414
-T - -3414
-T en -3414
-T em -3414
-A cq -3903
-A ' -3903
-char173 T -3903
-hy T -3903
-- T -3903
-en T -3903
-em T -3903
-Y char173 -1461
-Y hy -1461
-Y - -1461
-Y en -1461
-Y em -1461
-p cq -1950
-p ' -1950
-c cq -486
-c ' -486
-e cq -975
-e ' -975
-b cq -1461
-b ' -1461
-a cq -1950
-a ' -1950
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -1461
-h ' -1461
-n cq -1461
-n ' -1461
-R cq -975
-R ' -975
-W char173 -975
-W hy -975
-W - -975
-W en -975
-W em -975
-cq d -1461
-' d -1461
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-F char173 -486
-F hy -486
-F - -486
-F en -486
-F em -486
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1950
-hy A -1950
-- A -1950
-en X -1461
-en A -1950
-em X -1461
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-K cq -486
-K ' -486
-t g -486
-b f -486
-k cq -486
-k ' -486
-Z char173 -975
-Z hy -975
-Z - -975
-Z en -975
-Z em -975
-U cq -486
-U ' -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-U char173 -486
-U hy -486
-U - -486
-U en -486
-U em -486
-charset
-! 7317,18000,330,723,-177,586 2 3617
-dq 10734,18375,0,678,-2778,586 2 3618
-" "
-sh 14637,17769,444,1371,570,586 0 3619
-# "
-Do 14637,19515,3105,0,6 2 3620
-$ "
-% 23418,17769,444,0,-2766 0 3621
-& 17565,18000,375,264,174,264 2 3622
-cq 7317,18375,0,1704,-1407,586 2 51751
-' "
-( 7317,18375,3165,2625,-300,586 2 3624
-) 7317,18375,3165,54,2271,54 2 3625
-* 14637,18150,0,0,-2148 2 3626
-+ 23418,13260,393,0,-3789 0 3627
-, 7317,2700,4611,0,1776 0 3628
-char173 7317,7170,0,1245,1176,586 0 3629
-hy "
-- "
-. 7317,2622,330,0,-237 0 3630
-sl 7317,19650,480,2448,1203,586 2 3631
-/ "
-0 14637,17700,375,723,-180,586 0 3632
-1 14637,17700,69,0,-3339 0 3633
-2 14637,17700,201,0,-123 0 3634
-3 14637,17700,375,0,60 0 3635
-4 14637,17769,69,396,285,396 0 3636
-5 14637,17526,375,297,-102,297 0 3637
-6 14637,17700,375,0,-459 0 3638
-7 14637,17526,69,1713,-885,586 0 3639
-8 14637,17700,375,12,-147,12 0 3640
-9 14637,17700,375,267,-963,267 0 3641
-: 7317,11652,330,0,-237 0 3642
-; 7317,11652,4611,0,1776 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 23418,8622,0,0,-3732 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 10245,18000,330,1083,-1299,586 2 3647
-at 23418,16980,3654,435,87,435 0 3648
-@ "
-A 17565,18000,69,0,1896 2 3649
-B 16101,18069,69,0,-342 2 3650
-C 17565,18375,375,1455,-411,586 2 3651
-D 20490,18069,69,288,-363,288 2 3652
-E 13173,18201,201,1095,-102,586 2 3653
-F 13173,18201,69,1098,-126,586 2 3654
-G 19515,18375,375,1158,-669,586 2 3655
-H 20490,18069,69,627,-234,586 2 3656
-I 7806,18069,69,609,-249,586 2 3657
-J 7317,18069,3657,1026,2235,586 2 3658
-K 16101,18069,69,2220,-321,586 2 3659
-L 12198,18069,201,414,-222,414 2 3660
-M 23418,18069,69,543,-111,543 2 3661
-N 20490,18069,375,525,-246,525 2 3662
-O 21954,18375,375,555,-372,555 2 3663
-P 14637,18069,69,1464,-360,586 2 3664
-Q 21954,18375,4200,507,-348,507 2 3665
-R 16587,18069,69,498,-159,498 2 3666
-S 13173,18375,375,882,855,586 2 3667
-T 14637,18201,69,2493,-1080,586 2 3668
-U 20490,18069,375,669,-1455,586 2 3669
-V 16101,18069,69,2763,-747,586 2 3670
-W 24882,18069,69,2835,-918,586 2 3671
-X 14637,18069,69,2148,1377,586 2 3672
-Y 14637,18069,69,3225,-543,586 2 3673
-Z 16101,18201,201,1014,921,586 2 3674
-lB 7317,18201,4956,3090,1014,586 3 3675
-[ "
-rs 7317,19650,480,294,-1518,294 2 3676
-\ "
-rB 7317,18201,4956,1338,2766,586 3 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,586 3 3679
-oq 7317,18375,0,1704,-1407,586 2 51808
-` "
-a 13173,12795,330,168,582,168 0 3681
-b 14637,19779,330,279,651,279 2 3682
-c 12684,12795,330,1245,282,586 0 3683
-d 14637,19779,330,2097,-27,586 2 3684
-e 13173,12795,330,588,327,586 0 3685
-f 7317,19710,69,3714,57,586 2 3686
-g 13173,12996,5400,1656,876,586 1 3687
-h 14637,19779,69,0,348 2 3688
-i 7317,18336,69,885,-288,586 2 3689
-j 7317,18336,5400,876,1554,586 3 3690
-k 13173,19779,69,1581,249,586 2 3691
-l 7317,19779,69,1068,-111,586 2 3692
-m 21954,12534,69,0,414 0 3693
-n 14637,12795,69,0,282 0 3694
-o 14637,12795,330,453,351,453 0 3695
-p 14637,12795,5469,216,1740,216 1 3696
-q 14637,12795,5469,828,-51,586 1 3697
-r 8781,12795,69,1512,279,586 0 3698
-s 10245,12795,330,411,960,411 0 3699
-t 7806,15654,330,1212,258,586 0 3700
-u 14637,12534,330,372,-348,372 0 3701
-v 13173,12534,69,1632,-207,586 0 3702
-w 20490,12534,69,1974,-183,586 0 3703
-x 11709,12534,69,1191,1662,586 0 3704
-y 13173,12534,5469,1659,-57,586 1 3705
-z 13173,12666,201,795,714,586 0 3706
-lC 11709,19935,6210,2910,-1242,586 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 11709,19935,6210,0,2682 3 3709
-} "
-ti 26346,8952,0,0,-4029 0 51876
-char192 17565,24042,69,0,1896 2 3776
-`A "
-char194 17565,23745,69,0,1896 2 3778
-^A "
-char200 13173,24042,201,1095,-102,586 2 3784
-`E "
-char202 13173,23745,201,1095,-102,586 2 3786
-^E "
-char203 13173,22896,201,1455,-102,586 2 3787
-:E "
-char206 7806,23745,69,3768,-249,586 2 3790
-^I "
-char207 7806,22896,69,4140,-249,586 2 3791
-:I "
-char180 14637,18375,0,0,-6180 2 3764
-aa "
-ga 14637,18378,0,0,-4620 2 3680
-a^ 14637,18225,0,0,-3891 2 3678
-^ "
-char168 14637,17223,0,0,-3717 0 3752
-ad "
-a~ 14637,17166,0,0,-3717 0 3710
-~ "
-char217 20490,24042,375,669,-1455,586 2 3801
-`U "
-char219 20490,23745,375,669,-1455,586 2 3803
-^U "
-char221 14637,24048,69,3225,-543,586 2 3805
-'Y "
-char253 13173,18375,5469,1659,-57,586 3 3837
-'y "
-char176 14637,17700,0,0,-2664 0 3760
-de "
-char199 17565,18375,5736,1455,-411,586 3 3783
-,C "
-char231 12684,12795,5193,1245,282,586 1 3815
-,c "
-char209 20490,22812,375,525,-246,525 2 3793
-~N "
-char241 14637,17166,69,0,282 0 3825
-~n "
-char161 7317,12696,5634,0,639 1 3745
-r! "
-char191 10245,12696,5634,0,795 1 3775
-r? "
-char164 14637,15684,0,660,-117,586 0 3748
-Cs "
-char163 14637,17700,201,1269,1179,586 0 3747
-Po "
-char165 14637,18069,69,2862,-180,586 2 3749
-Ye "
-char167 14637,17865,3633,0,-960 2 3751
-sc "
-Fn 14637,19710,69,0,-3318 2 51871
-char162 14637,19782,0,393,-999,393 2 3746
-ct "
-char226 13173,18225,330,168,582,168 2 3810
-^a "
-char234 13173,18225,330,588,327,586 2 3818
-^e "
-char244 14637,18225,330,453,351,453 2 3828
-^o "
-char251 14637,18225,330,372,-348,372 2 3835
-^u "
-char225 13173,18375,330,168,582,168 2 3809
-'a "
-char233 13173,18375,330,588,327,586 2 3817
-'e "
-char243 14637,18375,330,453,351,453 2 3827
-'o "
-char250 14637,18375,330,372,-348,372 2 3834
-'u "
-char224 13173,18378,330,168,582,168 2 3808
-`a "
-char232 13173,18378,330,588,327,586 2 3816
-`e "
-char242 14637,18378,330,453,351,453 2 3826
-`o "
-char249 14637,18378,330,372,-348,372 2 3833
-`u "
-char228 13173,17223,330,285,582,285 0 3812
-:a "
-char235 13173,17223,330,588,327,586 0 3819
-:e "
-char246 14637,17223,330,453,351,453 0 3830
-:o "
-char252 14637,17223,330,372,-348,372 0 3836
-:u "
-char197 17565,23979,69,0,1896 2 3781
-oA "
-char238 7317,18225,69,2628,-231,586 2 3822
-^i "
-char216 21954,18375,375,1341,588,586 2 3800
-/O "
-char198 20979,18201,201,1296,3312,586 2 3782
-AE "
-char229 13173,17973,330,168,582,168 2 3813
-oa "
-char237 7317,18375,69,2973,-279,586 2 3821
-'i "
-char248 14637,12795,399,1320,1203,586 0 3832
-/o "
-char230 20490,12795,330,906,678,586 0 3814
-ae "
-char196 17565,22896,69,0,1896 2 3780
-:A "
-char236 7317,18378,69,174,-279,174 2 3820
-`i "
-char214 21954,22896,375,555,-372,555 2 3798
-:O "
-char220 20490,22896,375,669,-1455,586 2 3804
-:U "
-char201 13173,24048,201,1239,-102,586 2 3785
-'E "
-char239 7317,17223,69,3213,-57,586 0 3823
-:i "
-char223 14148,19710,330,147,516,147 2 3807
-ss "
-char212 21954,23745,375,555,-372,555 2 3796
-^O "
-char193 17565,24048,69,0,1896 2 3777
-'A "
-char195 17565,22812,69,0,1896 2 3779
-~A "
-char227 13173,17166,330,168,582,168 0 3811
-~a "
-char208 20490,18069,69,288,936,288 2 3792
--D "
-char240 14637,19590,330,453,351,453 2 3824
-Sd "
-char205 7806,24048,69,3924,-249,586 2 3789
-'I "
-char204 7806,24042,69,909,-249,586 2 3788
-`I "
-char211 21954,24048,375,555,-372,555 2 3795
-'O "
-char210 21954,24042,375,555,-372,555 2 3794
-`O "
-char213 21954,22812,375,555,-372,555 2 3797
-~O "
-char245 14637,17166,330,453,351,453 0 3829
-~o "
-vS 13173,23745,375,1725,855,586 2 51795
-vs 10245,18225,330,1680,960,586 2 51827
-char218 20490,24048,375,669,-1455,586 2 3802
-'U "
-:Y 14637,22896,69,3225,-543,586 2 51801
-char255 13173,17223,5469,1659,-57,586 1 3839
-:y "
-char222 14637,18069,69,834,-351,586 2 3806
-TP "
-char254 14637,19779,5469,225,1752,225 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,586 0 3765
-char182 14637,19635,4200,135,-1257,135 2 3766
-ps "
-char190 23418,17850,525,0,-1326 2 3774
-34 "
-\- 23418,7122,0,0,-3801 0 51757
-char188 23418,17850,525,0,-2268 2 3772
-14 "
-char189 23418,17850,525,0,-2139 2 3773
-12 "
-char170 12198,17700,0,18,-1692,18 0 3754
-Of "
-char186 12198,17700,0,1029,-1608,586 0 3770
-Om "
-char171 9759,10920,0,849,306,586 0 3755
-Fo "
-char187 9759,10920,0,120,1035,120 0 3771
-Fc "
-char177 23418,13260,3132,0,-3333 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,3384,-1593,586 2 3753
-co "
-char172 23418,10671,0,0,-3015 0 3756
-no "
-char174 13173,19635,0,3384,-1593,586 2 3758
-rg "
-char178 10245,17700,0,705,-774,586 0 3762
-S2 "
-char179 10245,17700,0,525,-807,525 0 3763
-S3 "
-char184 14637,300,5193,0,-1905 1 3768
-ac "
-char185 10245,17700,0,0,-2472 0 3769
-S1 "
-char215 23418,13137,585,0,-3780 0 3799
-char247 23418,11139,0,0,-3900 0 3831
-char183 7317,10905,0,0,-1392 0 3767
-pc "
-fm 7317,17700,0,1092,-1740,586 0 51873
-sd 14637,17700,0,0,-1740 0 51874
-dg 14637,18213,846,0,-1323 2 51755
-tm 16101,17850,0,924,-1461,586 2 51796
-ah 14637,18225,0,0,-4407 2 51935
-ao 14637,17973,0,0,-5853 2 51930
-f/ 3414,17850,525,7596,6609,586 2 51759
-em 23418,6885,0,390,537,390 0 51789
-en 14637,6885,0,507,537,507 0 51790
-dd 14637,18213,846,0,-1335 2 51773
-.i 7317,12534,69,174,-279,174 0 51957
-aq 7317,18375,0,705,-2778,586 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 17565,24048,375,1455,-411,586 2 20166
-'c 12684,18375,330,1245,282,586 2 20198
-lq 11220,18375,0,1620,-1311,586 2 51838
-rq 11220,18375,0,1527,-1218,586 2 51746
-Bq 11220,2535,4482,0,1782 0 51772
-vz 13173,18225,201,795,714,586 2 51834
-fi 14637,19710,69,876,45,586 2 51881
-fl 14637,19710,69,1137,117,586 2 51882
-ff 14637,19710,69,3714,57,586 2 51883
-Fi 21954,19710,69,876,48,586 2 51884
-Fl 21954,19710,69,1137,120,586 2 51885
-ij 14148,18336,5400,873,-288,586 3 51958
-bq 7317,2535,4482,0,1593 0 51756
-%0 32202,17769,444,0,-2811 0 51901
-char175 14637,16521,0,0,-3732 0 3759
-a- "
-ab 14637,18165,0,0,-3657 2 51926
-a. 14637,17400,0,0,-6228 0 51927
-oe 23418,12795,330,696,354,586 0 51823
-OE 24396,18375,375,1089,-372,586 2 51791
-fo 6342,10920,0,624,243,586 0 51886
-fc 6342,10920,0,0,972 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 12198,18069,201,405,1215,405 2 51944
-/l 7317,19779,69,2694,1233,586 2 51960
-a" 14637,18375,0,1413,-3645,586 2 51933
-ho 14637,600,3876,0,-6093 0 51934
-vZ 16101,23745,201,1014,921,586 2 51802
-IJ 15126,18069,3657,1026,-249,586 2 51942
diff --git a/contrib/groff/devlj4/OR b/contrib/groff/devlj4/OR
deleted file mode 100644
index edea52a..0000000
--- a/contrib/groff/devlj4/OR
+++ /dev/null
@@ -1,899 +0,0 @@
-name OR
-spacewidth 7317
-pcltypeface 4113
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3414
-P . -3903
-P , -3903
-V A -4389
-A V -4389
-T o -3903
-T r -3414
-T c -3903
-T e -3903
-T d -3903
-T s -3903
-T y -3903
-T a -3903
-T w -3903
-T u -3903
-L T -3414
-L Y -3414
-Y o -3903
-Y e -3903
-Y a -3903
-A W -3903
-W A -3903
-T A -3414
-V o -3414
-V e -3414
-V a -3414
-Y A -4389
-F A -3414
-F . -3414
-F , -3414
-A T -3414
-A Y -4389
-v . -2925
-v , -2925
-y . -2925
-y , -2925
-T . -3414
-T , -3414
-L W -3414
-P A -2925
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -2925
-W e -2925
-W a -2925
-W . -3903
-W , -3903
-r . -2925
-r , -2925
-w . -1950
-w , -1950
-Y u -2439
-A v -1950
-A y -1950
-A w -1461
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -1461
-b , -1461
-O T -2439
-O V -2439
-O Y -2439
-O . -2439
-O , -2439
-L y -2925
-L O -2439
-L G -2439
-L C -975
-L Q -2439
-V y -2439
-V u -2439
-V O -2439
-V G -2439
-V C -1461
-V Q -2439
-D T -1950
-D V -1950
-D Y -1950
-D . -1950
-D , -1950
-Y O -2439
-Y G -2439
-Y C -1461
-Y Q -2439
-F o -1461
-F e -1461
-F a -1461
-c . -486
-c , -486
-O A -1461
-O W -1461
-L U -1461
-R T -975
-R V -975
-R Y -975
-R W -975
-G T -1461
-P o -1461
-P g -975
-P e -1461
-P a -1461
-C A -486
-C . -486
-C , -486
-D A -1461
-D W -1461
-B T -1461
-B Y -1461
-B . -1461
-B , -1461
-A O -1461
-A G -1461
-A C -975
-A U -1461
-A Q -1461
-W r -1461
-W y -1461
-W u -1461
-W O -1461
-W G -1461
-W C -1461
-W Q -1461
-J A -975
-J . -975
-J , -975
-U A -1461
-U . -1461
-U , -1461
-Q A -1461
-Q W -1461
-f . -486
-f , -486
-T O -2439
-T G -2439
-T C -1461
-T Q -2439
-O X -1461
-L o -1461
-L e -1461
-L q -1461
-G V -1461
-G Y -1461
-G W -1461
-G . -486
-G , -486
-P T -486
-P V -486
-P Y -486
-D X -1461
-B V -1461
-B X -1461
-B A -1461
-B W -1461
-S . -975
-S , -975
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -975
-X Q -1461
-A o -1461
-A e -1461
-Q X -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -975
-K Q -1461
-o v -486
-o y -486
-o x -975
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-g . -486
-g , -486
-p v -486
-p y -486
-p x -975
-c v -486
-c y -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -486
-b y -486
-s . -975
-s , -975
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -975
-x g -975
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -486
-a y -486
-T i -486
-T S -975
-L a -975
-L S -975
-R o -975
-R y -975
-R O -975
-R G -975
-R C -975
-R U -1461
-R Q -975
-G X -486
-G A -486
-P s -975
-P Z -486
-P X -486
-P W -486
-V i -486
-V S -975
-S T -975
-S V -975
-S Y -975
-S X -975
-S A -975
-S W -975
-Y i -486
-Y S -975
-X a -975
-X u -1461
-X S -975
-A t -1461
-A g -975
-A c -1461
-A d -1461
-A a -975
-A u -1461
-A q -1461
-A S -975
-W i -486
-W S -975
-K c -1461
-K u -1461
-K S -975
-c x -486
-v e -486
-v s -486
-e x -975
-s v -486
-s y -486
-s x -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-k o -486
-k g -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -486
-k w -486
-k q -486
-O Z -975
-R e -975
-R a -975
-R u -975
-R S -975
-G Z -486
-P M -486
-P U -486
-Z o -975
-Z e -975
-Z d -975
-Z s -486
-Z y -975
-Z a -975
-Z w -975
-Z u -975
-Z O -975
-Z G -975
-Z C -975
-Z S -975
-Z Q -975
-D Z -975
-B Z -1461
-B J -486
-S Z -975
-A s -486
-J U -486
-U g -486
-U J -486
-K a -975
-o z -486
-p z -486
-c z -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z s -486
-z a -486
-z q -486
-b z -486
-s z -486
-k t -486
-k s -486
-k f -486
-k u -486
-T U -486
-G J -486
-C U -486
-V U -486
-E U -486
-B o -486
-B h -486
-B l -486
-B r -486
-B i -486
-B e -486
-B y -486
-B a -486
-B u -486
-B O -486
-B H -486
-B N -486
-B M -486
-B L -486
-B R -486
-B G -486
-B I -486
-B P -486
-B C -486
-B E -486
-B D -486
-B B -486
-B S -486
-B F -486
-B U -975
-B Q -486
-B K -486
-Y U -486
-F M -486
-F U -486
-X U -486
-A f -486
-W U -486
-U t -486
-U o -486
-U h -486
-U n -486
-U m -486
-U l -486
-U r -486
-U i -486
-U p -486
-U c -486
-U v -486
-U e -486
-U z -486
-U d -486
-U b -486
-U s -486
-U y -486
-U f -486
-U x -486
-U a -486
-U w -486
-U j -486
-U q -486
-U k -486
-U T -486
-U O -486
-U H -486
-U N -486
-U M -486
-U L -486
-U R -486
-U G -486
-U I -486
-U P -486
-U C -486
-U V -486
-U E -486
-U Z -486
-U D -486
-U B -486
-U S -486
-U Y -486
-U F -486
-U X -486
-U W -486
-U U -975
-U Q -486
-U K -486
-K U -486
-L cq -3414
-L ' -3414
-T char173 -3903
-T hy -3903
-T - -3903
-T en -3903
-T em -3903
-A cq -3903
-A ' -3903
-char173 T -3903
-hy T -3903
-- T -3903
-en T -3903
-em T -3903
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -1461
-p ' -1461
-c cq -486
-c ' -486
-e cq -975
-e ' -975
-b cq -1461
-b ' -1461
-a cq -1461
-a ' -1461
-V char173 -2439
-V hy -2439
-V - -2439
-V en -2439
-V em -2439
-h cq -1461
-h ' -1461
-n cq -1461
-n ' -1461
-m cq -1461
-m ' -1461
-R cq -975
-R ' -975
-W char173 -1461
-W hy -1461
-W - -1461
-W en -1461
-W em -1461
-cq d -1461
-' d -1461
-s cq -486
-s ' -486
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-k cq -486
-k ' -486
-M cq -486
-M ' -486
-G cq -486
-G ' -486
-Z char173 -975
-Z hy -975
-Z - -975
-Z en -975
-Z em -975
-B cq -486
-B ' -486
-U cq -486
-U ' -486
-cq M -486
-' M -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-B char173 -486
-B hy -486
-B - -486
-B en -486
-B em -486
-U char173 -486
-U hy -486
-U - -486
-U en -486
-U em -486
-charset
-! 7317,18000,330 2 3617
-dq 10734,18375 2 3618
-" "
-sh 14637,17994,405 2 3619
-# "
-Do 14637,19554,2919 2 3620
-$ "
-% 23418,17961,510 2 3621
-& 19029,17667,375 0 3622
-cq 7317,18375 2 51751
-' "
-( 7317,18375,3165 2 3624
-) 7317,18375,3165 2 3625
-* 14637,18066 2 3626
-+ 23418,13260,393 0 3627
-, 7317,2718,4923 1 3628
-char173 7317,7275 0 3629
-hy "
-- "
-. 7317,2715,330 0 3630
-sl 7317,19566,396 2 3631
-/ "
-0 14637,17700,375 0 3632
-1 14637,17700,69 0 3633
-2 14637,17700,201 0 3634
-3 14637,17700,375 0 3635
-4 14637,17394,69 0 3636
-5 14637,17526,375 0 3637
-6 14637,17700,375 0 3638
-7 14637,17526,69 0 3639
-8 14637,17700,375 0 3640
-9 14637,17700,375 0 3641
-: 7317,11805,330 0 3642
-; 7317,11805,4923 1 3643
-< 26346,16068 0 3644
-= 23418,8634 0 3645
-> 26346,16068 0 3646
-? 10245,18000,330 2 3647
-at 23418,16980,3654 0 3648
-@ "
-A 17565,18000,69 2 3649
-B 16101,18069,69 2 3650
-C 17565,18375,375 2 3651
-D 20490,18069,69 2 3652
-E 13173,18201,201 2 3653
-F 13173,18201,69 2 3654
-G 20490,18375,375 2 3655
-H 20490,18069,69 2 3656
-I 7317,18069,69 2 3657
-J 7317,18069,3855 2 3658
-K 16101,18069,69 2 3659
-L 13173,18069,201 2 3660
-M 23418,18000,69 2 3661
-N 20490,18069,375 2 3662
-O 21954,18375,375 2 3663
-P 14637,18069,69 2 3664
-Q 21954,18375,5400 3 3665
-R 16101,18069,69 2 3666
-S 13173,18375,375 2 3667
-T 14637,18201,69 2 3668
-U 20490,18069,375 2 3669
-V 17565,18069,69 2 3670
-W 26346,18069,69 2 3671
-X 16101,18069,69 2 3672
-Y 16101,18069,69 2 3673
-Z 16101,18201,201 2 3674
-lB 7317,18204,4179 2 3675
-[ "
-rs 7317,19566,396 2 3676
-\ "
-rB 7317,18204,4179 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 7317,18375 2 51808
-` "
-a 12684,12795,330 0 3681
-b 14637,19569,330 2 3682
-c 12684,12795,330 0 3683
-d 14637,19569,330 2 3684
-e 13173,12795,330 0 3685
-f 7317,19710,69 2 3686
-g 13173,12882,5400 1 3687
-h 14637,19569,69 2 3688
-i 7317,18399,69 2 3689
-j 7317,18399,5400 3 3690
-k 13173,19569,69 2 3691
-l 7317,19569,69 2 3692
-m 21954,12795,69 0 3693
-n 14637,12795,69 0 3694
-o 14637,12795,330 0 3695
-p 14637,12795,5469 1 3696
-q 14637,12795,5469 1 3697
-r 8781,12795,69 0 3698
-s 10245,12795,330 0 3699
-t 7317,16185,330 0 3700
-u 14637,12534,330 0 3701
-v 13173,12534,69 0 3702
-w 20490,12534,69 0 3703
-x 13173,12534,69 0 3704
-y 13173,12534,5469 1 3705
-z 13173,12666,201 0 3706
-lC 11709,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11709,19935,6210 3 3709
-} "
-ti 26346,8952 0 51876
-char192 17565,23730,69 2 3776
-`A "
-char194 17565,23760,69 2 3778
-^A "
-char200 13173,23730,201 2 3784
-`E "
-char202 13173,23760,201 2 3786
-^E "
-char203 13173,22902,201 2 3787
-:E "
-char206 7317,23760,69 2 3790
-^I "
-char207 7317,22902,69 2 3791
-:I "
-char180 14637,18189 2 3764
-aa "
-ga 14637,18189 2 3680
-a^ 14637,18000 2 3678
-^ "
-char168 14637,17223 0 3752
-ad "
-a~ 14637,16980 0 3710
-~ "
-char217 20490,23730,375 2 3801
-`U "
-char219 20490,23760,375 2 3803
-^U "
-char221 16101,23730,69 2 3805
-'Y "
-char253 13173,18189,5469 3 3837
-'y "
-char176 14637,17700 0 3760
-de "
-char199 17565,18375,5988 3 3783
-,C "
-char231 12684,12795,5673 1 3815
-,c "
-char209 20490,22707,375 2 3793
-~N "
-char241 14637,16980,69 0 3825
-~n "
-char161 7317,12696,5634 1 3745
-r! "
-char191 10245,12696,5634 1 3775
-r? "
-char164 14637,15684 0 3748
-Cs "
-char163 14637,17700,201 0 3747
-Po "
-char165 14637,17769,69 2 3749
-Ye "
-char167 14637,18000,3633 2 3751
-sc "
-Fn 14637,19710,69 2 51871
-char162 14637,19155,93 2 3746
-ct "
-char226 12684,18000,330 2 3810
-^a "
-char234 13173,18000,330 2 3818
-^e "
-char244 14637,18000,330 2 3828
-^o "
-char251 14637,18000,330 2 3835
-^u "
-char225 12684,18189,330 2 3809
-'a "
-char233 13173,18189,330 2 3817
-'e "
-char243 14637,18189,330 2 3827
-'o "
-char250 14637,18189,330 2 3834
-'u "
-char224 12684,18189,330 2 3808
-`a "
-char232 13173,18189,330 2 3816
-`e "
-char242 14637,18189,330 2 3826
-`o "
-char249 14637,18189,330 2 3833
-`u "
-char228 12684,17223,330 0 3812
-:a "
-char235 13173,17223,330 0 3819
-:e "
-char246 14637,17223,330 0 3830
-:o "
-char252 14637,17223,330 0 3836
-:u "
-char197 17565,23964,69 2 3781
-oA "
-char238 7317,18000,69 2 3822
-^i "
-char216 21954,18375,375 2 3800
-/O "
-char198 21468,18201,201 2 3782
-AE "
-char229 12684,18045,330 2 3813
-oa "
-char237 7317,18189,69 2 3821
-'i "
-char248 14637,12876,330 0 3832
-/o "
-char230 20490,12795,330 0 3814
-ae "
-char196 17565,22902,69 2 3780
-:A "
-char236 7317,18189,69 2 3820
-`i "
-char214 21954,22902,375 2 3798
-:O "
-char220 20490,22902,375 2 3804
-:U "
-char201 13173,23730,201 2 3785
-'E "
-char239 7317,17223,69 0 3823
-:i "
-char223 14637,19710,330 2 3807
-ss "
-char212 21954,23760,375 2 3796
-^O "
-char193 17565,23730,69 2 3777
-'A "
-char195 17565,22707,69 2 3779
-~A "
-char227 12684,16980,330 0 3811
-~a "
-char208 20490,18069,69 2 3792
--D "
-char240 14637,19500,330 2 3824
-Sd "
-char205 7317,23730,69 2 3789
-'I "
-char204 7317,23730,69 2 3788
-`I "
-char211 21954,23730,375 2 3795
-'O "
-char210 21954,23730,375 2 3794
-`O "
-char213 21954,22707,375 2 3797
-~O "
-char245 14637,16980,330 0 3829
-~o "
-vS 13173,23760,375 2 51795
-vs 10245,18183,330 2 51827
-char218 20490,23730,375 2 3802
-'U "
-:Y 16101,22902,69 2 51801
-char255 13173,17223,5469 1 3839
-:y "
-char222 14637,18069,69 2 3806
-TP "
-char254 14637,19569,5469 3 3838
-Tp "
-char181 14637,12630,4350 0 3765
-char182 14637,19635,4200 2 3766
-ps "
-char190 23418,17700,519 0 3774
-34 "
-\- 23418,7122 0 51757
-char188 23418,17700,519 0 3772
-14 "
-char189 23418,17700,519 0 3773
-12 "
-char170 10734,17700 0 3754
-Of "
-char186 10734,17700 0 3770
-Om "
-char171 9759,10809 0 3755
-Fo "
-char187 9759,10809 0 3771
-Fc "
-char177 23418,13260,3132 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 23418,10671 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 9759,17700 0 3762
-S2 "
-char179 9759,17700 0 3763
-S3 "
-char184 14637,0,5673 1 3768
-ac "
-char185 9759,17700 0 3769
-S1 "
-char215 23418,13137,585 0 3799
-char247 23418,11139 0 3831
-char183 7317,10407 0 3767
-pc "
-fm 7317,17700 0 51873
-sd 14637,17700 0 51874
-dg 14637,18213,846 2 51755
-tm 16101,17850 2 51796
-ah 14637,18183 2 51935
-ao 14637,18045 2 51930
-f/ 2439,17637,519 0 51759
-em 23418,6867 0 51789
-en 14637,6867 0 51790
-dd 14637,18213,846 2 51773
-.i 7317,12534,69 0 51957
-aq 7317,18375 2 3623
-bu 13173,14226 0 51889
-'C 17565,23730,375 2 20166
-'c 12684,18189,330 2 20198
-lq 11220,18375 2 51838
-rq 11220,18375 2 51746
-Bq 11220,2718,4509 0 51772
-vz 13173,18183,201 2 51834
-fi 14148,19710,69 2 51881
-fl 14148,19779,69 2 51882
-ff 14637,19710,69 2 51883
-Fi 21468,19710,69 2 51884
-Fl 21468,19779,69 2 51885
-ij 14148,18399,5400 3 51958
-bq 7317,2718,4509 0 51756
-%0 32202,17769,444 2 51901
-char175 14637,16662 0 3759
-a- "
-ab 14637,18111 2 51926
-a. 14637,17223 0 51927
-oe 23418,12795,330 0 51823
-OE 24396,18375,375 2 51791
-fo 5856,10809 0 51886
-fc 5856,10809 0 51887
-sq 19029,15624 0 51899
-/L 13173,18069,201 2 51944
-/l 7317,19569,69 2 51960
-a" 14637,18189 2 51933
-ho 14637,1059,3885 0 51934
-vZ 16101,23760,201 2 51802
-IJ 14637,18069,3855 2 51942
diff --git a/contrib/groff/devlj4/S b/contrib/groff/devlj4/S
deleted file mode 100644
index 599867f..0000000
--- a/contrib/groff/devlj4/S
+++ /dev/null
@@ -1,195 +0,0 @@
-name S
-special
-spacewidth 7806
-pcltypeface 4101
-pclproportional 1
-pclweight 0
-pclstyle 0
-kernpairs
-*T *A -2925
-*A *T -2925
-*R *A -3903
-*O *T -1950
-*O *A -2439
-*B *T -1950
-*A *O -2439
-*T *O -1950
-*O *X -1461
-*B *X -1461
-*B *A -1950
-*X *O -1461
-*K *O -1461
-*O *Z -486
-*Z *O -486
-*B *Z -486
-*N *A -486
-*K *T -486
-charset
-pl 23418,15750 0 68907
-eq 23418,10875 0 68925
-*A 19029,18225 2 68929
-*B 16587,17895 2 68930
-*E 16587,17895 2 68933
-*Y 19515,17895 2 68935
-*I 8781,17895 2 68937
-*K 18540,17895 2 68938
-*M 23907,17895 2 68940
-*N 19515,17895,330 2 68941
-*O 19029,18225,330 2 68943
-*R 15126,17895 2 68945
-*T 16587,17895 2 68947
-*X 19029,17895 2 68950
-*Z 17076,17895 2 68934
-or 13173,19758,6588 3 44412
-ap 26346,8952 0 44414
-mi 23418,8610 0 68909
-+- 23418,15750,2625 0 69118
-no 23418,12165 0 69064
-mu 23418,15117 0 68906
-di 23418,14010 0 68901
-HE 26346,19500 2 44457
-DI 26346,19500,840 2 44456
-CL 26346,18951 2 44455
-SP 26346,19851 2 44458
-va 19029,17670 2 69033
-ua 19029,17670 2 69025
-da 19029,17670 2 69027
--> 19029,12231 0 69026
-<- 19029,12231 0 69028
-<> 19029,12453 0 69034
-if 26346,12846 0 68900
-ca 26346,16650 0 69046
-== 26346,11634 0 68989
->= 26346,15960 0 68958
-<= 26346,15960 0 68956
-~~ 26346,11172 0 68927
-md 8781,10407 0 69066
-sr 19029,23322 2 68897
-pt 26346,12723 0 68902
-+e 11709,12705,555 0 68923
-tf 26346,16545 0 68928
-3d "
-*G 16101,18045 2 68931
-*D 17565,18045 2 68932
-*H 19029,18450,405 2 68936
-*L 17565,18045 2 68939
-*C 17565,19335,1752 2 68942
-*P 19029,18045 2 68944
-*S 16101,18045 2 68946
-*U 16101,18450 2 68948
-*F 17565,18045 2 68949
-*Q 20490,18045 2 68951
-*W 16101,18450 2 68952
-gr 17565,18045 2 68953
-pd 13173,18450,405 2 68954
-ts 13173,12600,4734 0 68955
-!= 26346,15396,1197 0 68957
-*a 16101,11205,405 0 68961
-*b 14637,18450,4260 2 68962
-*g 14637,11205,5595 1 68963
-*d 11709,18450,405 2 68964
-*e 10245,11205,405 0 68965
-*z 11709,17508,4920 2 68966
-*y 13173,11205,5283 1 68967
-*h 11709,18450,405 2 68968
-*i 7317,10800,405 0 68969
-*k 11709,11205,405 0 68970
-*l 14637,18450,405 2 68971
-*m 14637,10800,5595 1 68972
-*n 11709,11205,405 0 68973
-*c 13173,18450,4647 2 68974
-*o 11709,11205,405 0 68975
-*p 16101,11295,405 0 68976
-*r 13173,11205,4527 0 68977
-*s 13173,11544,405 0 68978
-*t 11709,11295,405 0 68979
-*u 11709,11205,405 0 68980
-*f 16101,17304,4314 2 68981
-*x 14637,11205,4734 0 68982
-*q 16101,18450,4734 2 68983
-*w 16101,11205,405 0 68984
-+h 16101,18450,405 2 68985
-+f 16101,11205,4608 0 68986
-+p 16101,11442,405 0 68987
-~= 26346,11436 0 68988
-ne 26346,15300,966 0 68990
-uA 19029,17553,1536 2 69029
-arrowverttp "
-rh 19029,13407 0 69030
-rA "
-dA 19029,17553,1536 2 69031
-arrowvertbt "
-lh 19029,13407 0 69032
-lA "
-vA 19029,17553,1812 2 69035
-hA 19029,14346 0 69036
-radicalex 19029,23322 2 69040
-fa 15612,15153 0 69041
-te 11220,15165 0 69042
-pp 26346,16560 0 69044
-cu 26346,16650 0 69045
-mo 26346,17925 2 69047
-nm 26346,20625,2700 2 69049
-sb 26346,16290 0 69050
-sp 26346,16290 0 69051
-nb 26346,18165,1875 2 69052
-nc 26346,18165,1875 2 69053
-ib 26346,16641 0 69054
-ip 26346,16641 0 69055
-c+ 26346,18900 2 69056
-c* 26346,18900 2 69058
-AN 26346,15240 0 69061
-OR 26346,15240 0 69062
-ci 26346,18900 2 69069
-is 26346,20268,5997 3 69077
-/_ 26346,19365 2 69079
-es 26346,18465,435 2 69080
-Ah 13173,13980 0 69081
-Im 19029,18255,1890 2 69085
-Re 20490,18255,1890 2 69086
-lc 19029,23322,5124 3 69088
-bracketlefttp "
-lf 19029,23322,5124 3 69089
-bracketleftbt "
-lt 19029,19758,6588 3 69090
-parenlefttp "
-bracelefttp "
-lk 19029,19758,6588 3 69091
-braceleftmid "
-lb 19029,19758,6588 3 69092
-parenleftbt "
-braceleftbt "
-arrowvertex 19029,23322,6588 3 69097
-rc 19029,23322,5124 3 69104
-bracketrighttp "
-rf 19029,23322,5124 3 69105
-bracketrightbt "
-rt 19029,19758,6588 3 69106
-parenrighttp "
-bracerighttp "
-rk 19029,19758,6588 3 69107
-bracerightmid "
-rb 19029,19758,6588 3 69108
-parenrightbt "
-bracerightbt "
-bv 19029,23322,6588 3 69109
-bracerightex "
-braceleftex "
-parenrightex 19029,23322,6588 3 69110
-parenleftex "
-bracketrightex "
-bracketleftex "
-barex "
--+ 26346,18366 2 69117
-la 8781,21000,4950 2 44513
-ra 8781,21000,4950 2 44529
-=~ 26346,14187 0 69103
-<< 26346,15294,1086 0 128316
->> 26346,15294,1086 0 128318
--h 15126,18564,486 2 128328
-wp 17076,13026,4218 0 44483
-lz 26346,17844,294 2 44512
-st 12198,12846,396 0 69076
-** 26346,13275 0 69102
-an 19029,8676 0 69100
-CR 26346,12165 0 44479
diff --git a/contrib/groff/devlj4/TB b/contrib/groff/devlj4/TB
deleted file mode 100644
index 644425a..0000000
--- a/contrib/groff/devlj4/TB
+++ /dev/null
@@ -1,991 +0,0 @@
-name TB
-spacewidth 7806
-pcltypeface 4101
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3414
-P . -4389
-P , -4389
-V A -4878
-A V -4878
-T o -2925
-T r -1461
-T c -2439
-T e -2925
-T d -2925
-T s -2439
-T y -1461
-T a -2925
-T w -1461
-T u -1461
-T J -1461
-L T -2439
-L Y -3414
-Y o -4878
-Y e -4878
-Y a -4878
-Y J -1461
-A W -4389
-W A -4389
-T A -2439
-V o -3903
-V e -3903
-V a -3903
-Y A -3903
-F A -3903
-F . -3903
-F , -3903
-A T -2439
-A Y -3903
-v . -3414
-v , -3414
-y . -3414
-y , -3414
-T . -2439
-T , -2439
-L W -3414
-P A -3414
-V J -1461
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -3414
-W e -3414
-W a -3414
-W . -3903
-W , -3903
-r . -3414
-r , -3414
-w . -3414
-w , -3414
-Y u -3414
-A v -3414
-A y -3414
-A w -3414
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -486
-b , -486
-O T -1461
-O V -2439
-O Y -2925
-O . -2925
-O , -2925
-L y -1950
-L O -975
-L G -975
-L C -975
-L Q -975
-P J -975
-V y -2439
-V u -2439
-V O -2439
-V G -2439
-V C -2439
-V Q -2439
-D T -1461
-D V -2439
-D Y -2925
-D . -2925
-D , -2925
-Y O -2925
-Y G -2925
-Y C -2925
-Y Q -2925
-F o -1950
-F e -1950
-F a -1950
-c . -975
-c , -975
-O A -2439
-O W -1950
-L U -1461
-R T -1950
-R V -1950
-R Y -1950
-R W -1950
-G T -1461
-P o -975
-P g -975
-P e -975
-P a -975
-C A -2439
-C . -2439
-C , -2439
-D A -2439
-D W -1950
-B T -1461
-B Y -1461
-B . -1461
-B , -1461
-F J -1461
-A O -2439
-A G -2439
-A C -2439
-A U -2439
-A Q -2439
-W r -1950
-W y -1950
-W u -1950
-W O -1950
-W G -1950
-W C -1950
-W J -1461
-W Q -1950
-J A -1461
-J . -1461
-J , -1461
-U A -2439
-U . -2439
-U , -2439
-Q A -2439
-Q W -1950
-T O -1461
-T G -1461
-T C -1461
-T Q -1461
-O X -1950
-L o -975
-L e -975
-L q -975
-G V -1461
-G Y -1461
-G W -1461
-G . -1461
-G , -1461
-P T -486
-P V -486
-P Y -486
-C T -975
-C V -975
-C Y -975
-D X -1950
-B V -1461
-B X -1461
-B A -1461
-B W -1461
-S . -1461
-S , -1461
-F r -486
-F y -486
-F u -486
-F O -486
-F G -486
-F C -486
-F Q -486
-X o -1461
-X e -1461
-X y -1950
-X O -1950
-X G -1950
-X C -1950
-X Q -1950
-A o -1461
-A e -1461
-Q X -1950
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -975
-o x -975
-o w -975
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -486
-g . -1461
-g , -1461
-c v -975
-c y -975
-c w -975
-v o -975
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -975
-e y -975
-b v -486
-b y -486
-b w -486
-s . -975
-s , -975
-y o -975
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-f g -486
-x o -975
-x g -486
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -975
-a y -975
-a w -975
-w o -975
-w g -975
-w c -975
-w d -975
-w a -975
-w q -975
-T i -975
-T S -1461
-L a -975
-L S -486
-R o -975
-R y -975
-R O -975
-R G -975
-R C -975
-R U -1461
-R Q -975
-G X -1461
-G A -1461
-P s -975
-P Z -486
-P X -486
-P W -486
-C X -975
-C W -975
-C J -486
-V i -975
-V S -1461
-S T -486
-S V -486
-S Y -486
-S X -486
-S A -1461
-S W -486
-Y i -975
-Y S -1461
-X a -975
-X u -975
-X S -486
-A t -975
-A g -486
-A c -975
-A d -1461
-A a -975
-A u -975
-A q -1461
-A S -486
-W i -975
-W S -1461
-K c -975
-K u -975
-K S -486
-t g -486
-t . -486
-t , -486
-o f -486
-h w -975
-n w -975
-m w -975
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-c f -486
-c x -975
-v e -975
-v s -975
-e f -486
-e x -975
-e w -975
-b f -486
-s v -486
-s y -486
-s f -486
-s x -486
-s w -486
-y e -975
-y s -975
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-w e -975
-w s -975
-k o -486
-k g -486
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -486
-k w -486
-k q -486
-O Z -486
-N . -486
-N , -486
-R e -975
-R a -975
-R u -975
-R S -486
-G Z -486
-P U -486
-C Z -975
-E t -486
-E o -486
-E g -486
-E c -486
-E v -486
-E e -486
-E d -486
-E y -486
-E f -486
-E a -486
-E w -486
-E u -486
-E q -486
-E O -486
-E G -486
-E C -486
-E S -486
-E J -486
-E Q -486
-E . -486
-E , -486
-Z o -486
-Z e -486
-Z d -486
-Z s -486
-Z y -975
-Z a -486
-Z w -975
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-F i -486
-F j -975
-F S -486
-A s -486
-U g -486
-U J -486
-K a -975
-t o -486
-t c -486
-t e -486
-t d -486
-t s -486
-t a -486
-t j -486
-t q -486
-o z -486
-r s -486
-r j -486
-c z -486
-v j -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z s -486
-z a -486
-z q -486
-b z -486
-s z -486
-y j -486
-w j -486
-k t -486
-k s -486
-k u -486
-N A -486
-C t -486
-C o -486
-C h -486
-C l -486
-C r -486
-C i -486
-C e -486
-C y -486
-C a -486
-C u -486
-C O -486
-C H -486
-C N -486
-C M -486
-C L -486
-C R -486
-C G -486
-C I -486
-C P -486
-C C -486
-C E -486
-C D -486
-C B -486
-C S -486
-C F -486
-C U -975
-C Q -486
-C K -486
-E n -486
-E m -486
-E l -486
-E r -486
-E i -486
-E p -486
-E z -486
-E b -486
-E s -486
-E x -486
-E j -486
-E k -486
-E T -486
-E H -486
-E N -486
-E M -486
-E L -486
-E R -486
-E I -486
-E P -486
-E V -486
-E E -486
-E Z -486
-E D -486
-E B -486
-E Y -486
-E F -486
-E X -486
-E A -486
-E W -486
-E U -486
-E K -486
-B U -486
-U t -486
-U o -486
-U n -486
-U m -486
-U r -486
-U i -486
-U p -486
-U c -486
-U v -486
-U e -486
-U z -486
-U d -486
-U s -486
-U y -486
-U f -486
-U x -486
-U a -486
-U w -486
-U j -486
-U q -486
-U O -486
-U G -486
-U C -486
-U S -486
-U Q -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -3414
-L ' -3414
-T char173 -1461
-T hy -1461
-T - -1461
-T en -1461
-T em -1461
-A cq -3414
-A ' -3414
-char173 T -1461
-hy T -1461
-- T -1461
-en T -1461
-em T -1461
-Y char173 -3414
-Y hy -3414
-Y - -3414
-Y en -3414
-Y em -3414
-c cq -975
-c ' -975
-e cq -975
-e ' -975
-b cq -486
-b ' -486
-a cq -1461
-a ' -1461
-V char173 -2439
-V hy -2439
-V - -2439
-V en -2439
-V em -2439
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-R cq -975
-R ' -975
-W char173 -1950
-W hy -1950
-W - -1950
-W en -1950
-W em -1950
-cq d -1461
-' d -1461
-s cq -486
-s ' -486
-L char173 -975
-L hy -975
-L - -975
-L en -975
-L em -975
-F char173 -486
-F hy -486
-F - -486
-F en -486
-F em -486
-X char173 -1950
-X hy -1950
-X - -1950
-X en -1950
-X em -1950
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1950
-hy X -1950
-- X -1950
-char173 A -1950
-hy A -1950
-- A -1950
-en X -1950
-en A -1950
-em X -1950
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-K cq -486
-K ' -486
-t g -486
-b f -486
-k cq -486
-k ' -486
-C cq -486
-C ' -486
-E cq -486
-E ' -486
-E char173 -486
-E hy -486
-E - -486
-E en -486
-E em -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-k char173 -486
-k hy -486
-k - -486
-k en -486
-k em -486
-C char173 -486
-C hy -486
-C - -486
-C en -486
-C em -486
-U char173 -486
-U hy -486
-U - -486
-U en -486
-U em -486
-charset
-! 8781,18045,405 2 3617
-dq 12198,18450 2 3618
-" "
-sh 13173,18450,405 2 3619
-# "
-Do 13173,19755,2610 2 3620
-$ "
-% 23418,18237,405 2 3621
-& 21954,18045,405 2 3622
-cq 8781,18450 2 51751
-' "
-( 8781,18450,4305 2 3624
-) 8781,18450,4305 2 3625
-* 13173,18450 2 3626
-+ 23418,15975 0 3627
-, 8781,4380,4560 0 3628
-char173 8781,7740 0 3629
-hy "
-- "
-. 8781,4125,405 0 3630
-sl 8781,18450,405 2 3631
-/ "
-0 13173,18450,405 2 3632
-1 13173,18450 2 3633
-2 13173,18450 2 3634
-3 13173,18450,405 2 3635
-4 13173,18450 2 3636
-5 13173,18045,405 2 3637
-6 13173,18450,405 2 3638
-7 13173,18045 2 3639
-8 13173,18450,405 2 3640
-9 13173,18450,405 2 3641
-: 8781,12549,405 0 3642
-; 8781,12549,4560 0 3643
-< 26346,16068 0 3644
-= 23418,11370 0 3645
-> 26346,16068 0 3646
-? 13173,18045,405 2 3647
-at 23418,16950,4131 2 3648
-@ "
-A 19029,18450 2 3649
-B 17565,18045 2 3650
-C 19029,18450,405 2 3651
-D 19029,18045 2 3652
-E 17565,18045 2 3653
-F 16101,18045 2 3654
-G 20490,18519,405 2 3655
-H 20490,18045 2 3656
-I 10245,18045 2 3657
-J 12684,18045,405 2 3658
-K 20490,18045 2 3659
-L 17565,18045 2 3660
-M 24882,18045 2 3661
-N 19029,18045,405 2 3662
-O 20490,18450,405 2 3663
-P 16101,18045 2 3664
-Q 20490,18450,4515 2 3665
-R 19029,18045 2 3666
-S 14637,18450,462 2 3667
-T 17565,18045 2 3668
-U 19029,18045,405 2 3669
-V 19029,18045,405 2 3670
-W 26346,18045,405 2 3671
-X 19029,18045 2 3672
-Y 19029,18045 2 3673
-Z 17565,18045 2 3674
-lB 8781,18045,4305 2 3675
-[ "
-rs 8781,18450,405 2 3676
-\ "
-rB 8781,18045,4305 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 8781,18450 2 51808
-` "
-a 13173,12735,405 0 3681
-b 14637,18090,405 2 3682
-c 11709,12735,405 0 3683
-d 14637,18090,405 2 3684
-e 11709,12735,405 0 3685
-f 9270,18540 2 3686
-g 13173,12735,5484 1 3687
-h 14637,18090 2 3688
-i 7317,18450 2 3689
-j 8781,18450,5490 3 3690
-k 14637,18090 2 3691
-l 7317,18090 2 3692
-m 21954,12735 0 3693
-n 14637,12735 0 3694
-o 13173,12735,405 0 3695
-p 14637,12735,5490 1 3696
-q 14637,12828,5490 1 3697
-r 11709,12735 0 3698
-s 10245,12735,411 0 3699
-t 8781,16773,405 2 3700
-u 14637,12330,405 0 3701
-v 13173,12330,405 0 3702
-w 19029,12330,405 0 3703
-x 13173,12330 0 3704
-y 13173,12330,5490 1 3705
-z 11709,12330 0 3706
-lC 13173,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,19935,6210 3 3709
-} "
-ti 26346,9435 0 51876
-char192 19029,24795 2 3776
-`A "
-char194 19029,24795 2 3778
-^A "
-char200 17565,24795 2 3784
-`E "
-char202 17565,24795 2 3786
-^E "
-char203 17565,23955 2 3787
-:E "
-char206 10245,24795 2 3790
-^I "
-char207 10245,23955 2 3791
-:I "
-char180 13173,19065 2 3764
-aa "
-ga 13173,19065 2 3680
-a^ 13173,19065 2 3678
-^ "
-char168 13173,17820 2 3752
-ad "
-a~ 13173,17772 2 3710
-~ "
-char217 19029,24795,405 2 3801
-`U "
-char219 19029,24795,405 2 3803
-^U "
-char221 19029,24795 2 3805
-'Y "
-char253 13173,19065,5490 3 3837
-'y "
-char176 13173,18450 2 3760
-de "
-char199 19029,18450,5532 3 3783
-,C "
-char231 11709,12735,5661 1 3815
-,c "
-char209 19029,23892,405 2 3793
-~N "
-char241 14637,17772 2 3825
-~n "
-char161 8781,12672,5778 1 3745
-r! "
-char191 13173,12846,5604 1 3775
-r? "
-char164 13173,16089 0 3748
-Cs "
-char163 13173,18450,429 2 3747
-Po "
-char165 13173,18045 2 3749
-Ye "
-char167 13173,18450,3225 2 3751
-sc "
-Fn 13173,18540,5490 3 51871
-char162 13173,17682 2 3746
-ct "
-char226 13173,19065,405 2 3810
-^a "
-char234 11709,19065,405 2 3818
-^e "
-char244 13173,19065,405 2 3828
-^o "
-char251 14637,19065,405 2 3835
-^u "
-char225 13173,19065,405 2 3809
-'a "
-char233 11709,19065,405 2 3817
-'e "
-char243 13173,19065,405 2 3827
-'o "
-char250 14637,19065,405 2 3834
-'u "
-char224 13173,19065,405 2 3808
-`a "
-char232 11709,19065,405 2 3816
-`e "
-char242 13173,19065,405 2 3826
-`o "
-char249 14637,19065,405 2 3833
-`u "
-char228 13173,17820,405 2 3812
-:a "
-char235 11709,17820,405 2 3819
-:e "
-char246 13173,17820,405 2 3830
-:o "
-char252 14637,17820,405 2 3836
-:u "
-char197 19029,24750 2 3781
-oA "
-char238 7317,19065 2 3822
-^i "
-char216 20490,18450,405 2 3800
-/O "
-char198 27321,18045 2 3782
-AE "
-char229 13173,19020,405 2 3813
-oa "
-char237 7317,19065 2 3821
-'i "
-char248 13173,12750,405 0 3832
-/o "
-char230 19029,12735,405 0 3814
-ae "
-char196 19029,23955 2 3780
-:A "
-char236 7317,19065 2 3820
-`i "
-char214 20490,23955,405 2 3798
-:O "
-char220 19029,23955,405 2 3804
-:U "
-char201 17565,24795 2 3785
-'E "
-char239 7317,17820 2 3823
-:i "
-char223 14637,18492,405 2 3807
-ss "
-char212 20490,24795,405 2 3796
-^O "
-char193 19029,24795 2 3777
-'A "
-char195 19029,23892 2 3779
-~A "
-char227 13173,17772,405 2 3811
-~a "
-char208 19029,18045 2 3792
--D "
-char240 13173,18090,405 2 3824
-Sd "
-char205 10245,24795 2 3789
-'I "
-char204 10245,24795 2 3788
-`I "
-char211 20490,24795,405 2 3795
-'O "
-char210 20490,24795,405 2 3794
-`O "
-char213 20490,23892,405 2 3797
-~O "
-char245 13173,17772,405 2 3829
-~o "
-vS 14637,24795,462 2 51795
-vs 10245,19065,411 2 51827
-char218 19029,24795,405 2 3802
-'U "
-:Y 19029,23955 2 51801
-char255 13173,17820,5490 3 3839
-:y "
-char222 16101,18045 2 3806
-TP "
-char254 14637,18090,5490 3 3838
-Tp "
-char181 14637,10800,5193 1 3765
-char182 13173,19635,4200 2 3766
-ps "
-char190 23418,18450,405 2 3774
-34 "
-\- 23418,9000 0 51757
-char188 23418,18450,405 2 3772
-14 "
-char189 23418,18450,405 2 3773
-12 "
-char170 13173,18450 2 3754
-Of "
-char186 13173,18450 2 3770
-Om "
-char171 11220,9861 0 3755
-Fo "
-char187 11220,9861 0 3771
-Fc "
-char177 23418,15975,2880 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 23418,12210 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 9270,18285 2 3762
-S2 "
-char179 9270,18285 2 3763
-S3 "
-char184 13173,0,5661 1 3768
-ac "
-char185 9270,18285 2 3769
-S1 "
-char215 23418,15033 0 3799
-char247 23418,14505 0 3831
-char183 8781,11274 0 3767
-pc "
-fm 8781,18450 2 51873
-sd 13173,18450 2 51874
-dg 13173,18450,3075 2 51755
-tm 16101,17550 2 51796
-ah 13173,19065 2 51935
-ao 13173,19020 2 51930
-f/ 3417,18450,405 2 51759
-em 23418,7200 0 51789
-en 13173,7200 0 51790
-dd 13173,18450,3075 2 51773
-.i 7317,12330 0 51957
-aq 8781,18450 2 3623
-bu 13173,14226 0 51889
-'C 19029,24795,405 2 20166
-'c 11709,19065,405 2 20198
-lq 15126,18450 2 51838
-rq 15126,18450 2 51746
-Bq 15126,4134,4806 0 51772
-vz 11709,19065 2 51834
-fi 14637,18540 2 51881
-fl 14637,19116 2 51882
-ff 16587,18540 2 51883
-Fi 21954,18540 2 51884
-Fl 21954,19116 2 51885
-ij 15075,18450,5490 3 51958
-bq 8781,4134,4806 0 51756
-%0 30738,18237,405 2 51901
-char175 13173,17259 2 3759
-a- "
-ab 13173,18285 2 51926
-a. 13173,17820 2 51927
-oe 19515,12735,405 0 51823
-OE 29760,18450,405 2 51791
-fo 6831,9861 0 51886
-fc 6831,9861 0 51887
-sq 19029,15624 0 51899
-/L 17565,18045 2 51944
-/l 7317,18090 2 51960
-a" 13173,19065 2 51933
-ho 13173,513,4413 0 51934
-vZ 17565,24795 2 51802
-IJ 23904,18045,405 2 51942
diff --git a/contrib/groff/devlj4/TBI b/contrib/groff/devlj4/TBI
deleted file mode 100644
index e1a30a8..0000000
--- a/contrib/groff/devlj4/TBI
+++ /dev/null
@@ -1,1045 +0,0 @@
-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 -2925
-P . -4389
-P , -4389
-V A -3903
-A V -4389
-T o -2439
-T r -975
-T c -2439
-T e -2439
-T d -1950
-T s -1461
-T y -975
-T a -2439
-T w -975
-T u -975
-T J -1950
-L T -2439
-L Y -2925
-Y o -3903
-Y e -3903
-Y a -3414
-Y J -1950
-A W -3903
-W A -3414
-T A -2439
-V o -3414
-V e -3414
-V a -3414
-Y A -2925
-F A -2439
-F . -3903
-F , -3903
-A T -2439
-A Y -3414
-v . -2439
-v , -2439
-y . -2439
-y , -2439
-T . -2439
-T , -2439
-L W -2925
-P A -2925
-V J -1950
-V . -3903
-V , -3903
-Y . -2925
-Y , -2925
-W o -2925
-W e -2925
-W a -2925
-W . -3414
-W , -3414
-r . -3414
-r , -3414
-w . -2439
-w , -2439
-Y u -2439
-A v -2439
-A y -2925
-A w -2439
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -1461
-b , -1461
-O T -1461
-O V -1950
-O Y -1950
-O . -2439
-O , -2439
-L y -975
-P J -2925
-V y -1950
-V u -1950
-V O -1950
-V G -1950
-V C -1950
-V Q -1950
-D T -1461
-D V -1950
-D Y -1950
-D . -2439
-D , -2439
-Y O -2439
-Y G -2439
-Y C -2439
-Y Q -2439
-F o -1461
-F e -1461
-F a -1461
-c . -975
-c , -975
-O A -975
-O W -1950
-R T -1461
-R V -1461
-R Y -1461
-R W -1461
-G T -1461
-P o -1461
-P g -1461
-P e -1461
-P a -1461
-C A -1461
-C . -2439
-C , -2439
-D A -975
-D W -1950
-B T -1461
-B Y -1950
-B . -1461
-B , -1461
-F J -1950
-A O -1950
-A G -1950
-A C -1950
-A U -1950
-A Q -1950
-W r -1950
-W y -1950
-W u -1950
-W O -1950
-W G -1950
-W C -1950
-W J -1950
-W Q -1950
-J A -975
-J . -975
-J , -975
-U A -975
-U . -1950
-U , -1950
-Q A -975
-Q W -1950
-f . -975
-f , -975
-T O -975
-T G -975
-T C -975
-T Q -975
-O X -1461
-G V -1461
-G Y -1461
-G W -1461
-G . -486
-G , -486
-P T -1461
-P V -1461
-P Y -1461
-C T -975
-C V -975
-C Y -975
-D X -1461
-B V -1950
-B X -1461
-B A -975
-B W -1950
-S . -975
-S , -975
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1950
-A e -1950
-Q X -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -975
-o x -486
-o w -975
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -975
-g . -975
-g , -975
-p v -975
-p y -975
-p x -486
-c v -975
-c y -975
-c w -975
-v o -486
-v g -975
-v c -486
-v d -486
-v a -486
-v q -486
-e v -975
-e y -975
-b v -975
-b y -975
-b w -975
-s . -486
-s , -486
-y o -486
-y g -975
-y c -486
-y d -486
-y a -486
-y q -486
-f g -1461
-x o -486
-x g -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-w o -486
-w g -975
-w c -486
-w d -486
-w a -486
-w q -486
-T i -975
-T S -975
-R o -486
-R y -486
-R O -486
-R G -486
-R C -486
-R U -486
-R Q -486
-G X -486
-G A -486
-P s -486
-P Z -486
-P X -1461
-P W -1461
-C X -975
-C W -975
-C J -1461
-V i -975
-V S -975
-S T -1461
-S V -1461
-S Y -1461
-S X -975
-S A -975
-S W -1461
-Y i -975
-Y S -975
-X a -486
-X u -975
-X S -486
-A t -486
-A g -486
-A c -1950
-A d -1461
-A a -486
-A u -975
-A q -975
-A S -486
-W i -975
-W S -975
-J y -1461
-K c -1461
-K u -975
-K S -486
-t g -486
-o f -975
-h w -975
-n w -975
-m w -975
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-g g -975
-p f -975
-p w -975
-c f -975
-c x -486
-v e -486
-v s -486
-e f -975
-e x -486
-e w -975
-b f -975
-y e -486
-y s -486
-f o -975
-f c -975
-f e -975
-f d -975
-f s -486
-f a -975
-f q -975
-w e -486
-w s -486
-k o -486
-k g -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-O Z -486
-O J -975
-R e -486
-R a -486
-R u -486
-R S -486
-G Z -486
-C Z -975
-E t -486
-E o -486
-E g -975
-E c -486
-E v -486
-E e -486
-E d -486
-E y -486
-E f -486
-E a -486
-E w -486
-E u -486
-E q -486
-E O -486
-E G -486
-E C -486
-E S -486
-E J -486
-E Q -486
-E . -486
-E , -486
-Z o -486
-Z e -486
-Z d -486
-Z y -975
-Z a -486
-Z w -975
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z Q -486
-D Z -486
-D J -975
-B Z -486
-B J -975
-S Z -486
-S J -975
-J o -975
-J i -975
-J e -975
-J a -975
-J u -975
-J T -975
-J O -975
-J H -975
-J N -975
-J M -975
-J L -975
-J R -975
-J G -975
-J I -975
-J P -975
-J C -975
-J V -975
-J E -975
-J Z -975
-J D -975
-J B -975
-J S -975
-J Y -975
-J F -975
-J X -975
-J W -975
-J J -975
-J U -975
-J Q -975
-J K -975
-U g -486
-U J -975
-K a -486
-o g -486
-o z -486
-h g -486
-h f -486
-n g -486
-n f -486
-m g -486
-m f -486
-l g -486
-r s -486
-g o -486
-g c -486
-g e -486
-g d -486
-g s -486
-g a -486
-g q -486
-i g -486
-p g -486
-p z -486
-c g -486
-c z -486
-v t -486
-v h -486
-v n -486
-v m -486
-v r -486
-v i -486
-v p -486
-v z -486
-v b -486
-v y -486
-v f -486
-v x -486
-v w -486
-v j -486
-v u -486
-v k -486
-e g -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z a -486
-z q -486
-d g -486
-b g -486
-b z -486
-s g -486
-y t -486
-y h -486
-y n -486
-y m -486
-y l -486
-y r -486
-y i -486
-y p -486
-y v -486
-y z -486
-y b -486
-y y -486
-y f -486
-y x -486
-y w -486
-y j -486
-y u -486
-y k -486
-a g -486
-w t -486
-w h -486
-w n -486
-w m -486
-w l -486
-w r -486
-w i -486
-w p -486
-w v -486
-w z -486
-w b -486
-w y -486
-w f -486
-w x -486
-w w -486
-w j -486
-w u -486
-w k -486
-j g -486
-u g -486
-q g -486
-O g -486
-M g -486
-G J -486
-I g -486
-C t -486
-C o -486
-C h -486
-C l -486
-C r -486
-C i -486
-C e -486
-C y -486
-C a -486
-C u -486
-C O -486
-C H -486
-C N -486
-C M -486
-C L -486
-C R -486
-C G -486
-C I -486
-C P -486
-C C -486
-C E -486
-C D -486
-C B -486
-C S -486
-C F -486
-C U -486
-C Q -486
-C K -486
-E n -486
-E m -486
-E l -486
-E r -486
-E i -486
-E p -486
-E z -486
-E b -486
-E s -486
-E x -486
-E j -486
-E k -486
-E T -486
-E H -486
-E N -486
-E M -486
-E L -486
-E R -486
-E I -486
-E P -486
-E V -486
-E E -486
-E Z -486
-E D -486
-E B -486
-E Y -486
-E F -486
-E X -486
-E A -486
-E W -486
-E U -486
-E K -486
-A f -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -2925
-L ' -2925
-T char173 -975
-T hy -975
-T - -975
-T en -975
-T em -975
-A cq -3414
-A ' -3414
-char173 T -1461
-hy T -1461
-- T -1461
-en T -1461
-em T -1461
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -1950
-p ' -1950
-c cq -1461
-c ' -1461
-e cq -1950
-e ' -1950
-b cq -1950
-b ' -1950
-V char173 -1950
-V hy -1950
-V - -1950
-V en -1950
-V em -1950
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-R cq -486
-R ' -486
-W char173 -1950
-W hy -1950
-W - -1950
-W en -1950
-W em -1950
-cq d -975
-' d -975
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -486
-' s -486
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-R char173 -486
-R hy -486
-R - -486
-R en -486
-R em -486
-K cq -486
-K ' -486
-t g -486
-v cq -486
-v ' -486
-b f -975
-y cq -486
-y ' -486
-w cq -486
-w ' -486
-C cq -486
-C ' -486
-E cq -486
-E ' -486
-E char173 -486
-E hy -486
-E - -486
-E en -486
-E em -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-J cq -975
-J ' -975
-J char173 -975
-J hy -975
-J - -975
-J en -975
-J em -975
-v char173 -486
-v hy -486
-v - -486
-v en -486
-v em -486
-y char173 -486
-y hy -486
-y - -486
-y en -486
-y em -486
-w char173 -486
-w hy -486
-w - -486
-w en -486
-w em -486
-C char173 -486
-C hy -486
-C - -486
-C en -486
-C em -486
-char173 g -486
-hy g -486
-- g -486
-en g -486
-em g -486
-charset
-! 10245,18450,405,963,-453,913 2 3617
-dq 13662,18450,0,1380,-3414,913 2 3618
-" "
-sh 13173,18450,405,1902,270,913 2 3619
-# "
-Do 13173,19770,2295,1998,1053,913 2 3620
-$ "
-% 23418,18237,405,288,-1509,288 2 3621
-& 20490,18045,405,234,87,234 2 3622
-cq 8781,18450,0,2001,-2790,913 2 51751
-' "
-( 8781,18450,4761,3096,-318,913 2 3624
-) 8781,18450,4761,846,1932,846 2 3625
-* 13173,18450,0,1518,-1812,913 2 3626
-+ 23418,15975,0,0,-3105 0 3627
-, 8781,3612,4728,0,1515 0 3628
-char173 8781,7740,0,660,426,660 0 3629
-hy "
-- "
-. 8781,3645,405,0,129 0 3630
-sl 8781,18450,405,3012,1209,913 2 3631
-/ "
-0 13173,18450,405,1722,72,913 2 3632
-1 13173,18450,0,0,765 2 3633
-2 13173,18450,0,657,1419,657 2 3634
-3 13173,18450,405,702,1116,702 2 3635
-4 13173,18450,0,1953,1386,913 2 3636
-5 13173,18045,405,1845,855,913 2 3637
-6 13173,18450,405,2286,-9,913 2 3638
-7 13173,18045,0,2997,-969,913 2 3639
-8 13173,18450,405,1548,240,913 2 3640
-9 13173,18450,405,1572,705,913 2 3641
-: 8781,12360,405,0,408 0 3642
-; 8781,12360,4728,0,1515 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 23418,11370,0,0,-3300 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 13173,18450,405,1725,-1932,913 2 3647
-at 23418,16950,4131,1095,219,913 2 3648
-@ "
-A 17565,18450,0,546,2412,546 2 3649
-B 17565,18045,0,1257,1167,913 2 3650
-C 17565,18594,405,2331,-393,913 2 3651
-D 19029,18045,0,1707,1611,913 2 3652
-E 17565,18045,0,1974,1428,913 2 3653
-F 16101,18045,0,3384,1536,913 2 3654
-G 19029,18450,405,1863,-12,913 2 3655
-H 20490,18045,0,3006,1266,913 2 3656
-I 10245,18045,0,2997,1338,913 2 3657
-J 13173,18045,405,2652,1491,913 2 3658
-K 17565,18045,0,3312,1326,913 2 3659
-L 16101,18045,0,1188,1815,913 2 3660
-M 23418,18045,0,3132,1362,913 2 3661
-N 19029,18045,405,3270,1227,913 2 3662
-O 19029,18450,405,1503,-183,913 2 3663
-P 16101,18045,0,2490,1233,913 2 3664
-Q 18540,18450,5550,1902,-177,913 3 3665
-R 17565,18045,0,1260,1188,913 2 3666
-S 14637,18525,510,1452,543,913 2 3667
-T 16101,18045,0,3513,-963,913 2 3668
-U 19029,18045,405,3249,-1455,913 2 3669
-V 17565,18045,405,3771,-1356,913 2 3670
-W 23418,18045,405,3891,-1311,913 2 3671
-X 17565,18045,0,2883,1578,913 2 3672
-Y 16101,18045,0,3630,-1254,913 2 3673
-Z 16101,18045,0,1923,876,913 2 3674
-lB 8781,18045,4095,4575,2064,913 2 3675
-[ "
-rs 8781,18450,405,0,-2226 2 3676
-\ "
-rB 8781,18045,4095,2826,3813,913 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,913 3 3679
-oq 8781,18450,0,2001,-2790,913 2 51808
-` "
-a 13173,12735,405,1059,1059,913 0 3681
-b 13173,18540,405,876,948,876 2 3682
-c 11709,12735,405,900,435,900 0 3683
-d 13173,18540,405,2541,1068,913 2 3684
-e 11709,12735,405,687,390,687 0 3685
-f 9270,18540,5490,4809,4866,913 3 3686
-g 13173,12735,5490,1500,1977,913 1 3687
-h 14637,18540,405,345,1146,345 2 3688
-i 7317,18585,405,1734,783,913 2 3689
-j 7317,18585,5490,2319,5745,913 3 3690
-k 13173,18540,405,1923,1194,913 2 3691
-l 7317,18540,405,2166,843,913 2 3692
-m 20490,12735,405,630,1101,630 0 3693
-n 14637,12735,405,321,954,321 0 3694
-o 13173,12735,405,675,714,675 0 3695
-p 13173,12735,5490,843,3888,843 1 3696
-q 13173,12735,5490,1317,672,913 1 3697
-r 10245,12783,0,2421,1005,913 0 3698
-s 10245,12735,405,885,891,885 0 3699
-t 7317,15870,405,2289,1056,913 0 3700
-u 14637,12735,405,426,279,426 0 3701
-v 11709,12735,405,1068,153,913 0 3702
-w 17565,12735,405,822,75,822 0 3703
-x 13173,12735,405,1137,1836,913 0 3704
-y 11709,12735,5490,543,3189,543 1 3705
-z 10245,12330,1935,1404,1839,913 0 3706
-lC 13173,19935,6210,3339,-972,913 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 13173,19935,6210,63,2304,63 3 3709
-} "
-ti 26346,9435,0,0,-4029 0 51876
-char192 17565,24795,0,546,2412,546 2 3776
-`A "
-char194 17565,24795,0,546,2412,546 2 3778
-^A "
-char200 17565,24795,0,1974,1428,913 2 3784
-`E "
-char202 17565,24795,0,1974,1428,913 2 3786
-^E "
-char203 17565,23955,0,1974,1428,913 2 3787
-:E "
-char206 10245,24795,0,3930,1338,913 2 3790
-^I "
-char207 10245,23955,0,4875,1338,913 2 3791
-:I "
-char180 13173,19065,0,786,-5055,786 2 3764
-aa "
-ga 13173,19065,0,0,-3540 2 3680
-a^ 13173,19065,0,417,-2931,417 2 3678
-^ "
-char168 13173,17820,0,1179,-2964,913 2 3752
-ad "
-a~ 13173,17703,0,1884,-3213,913 2 3710
-~ "
-char217 19029,24795,405,3249,-1455,913 2 3801
-`U "
-char219 19029,24795,405,3249,-1455,913 2 3803
-^U "
-char221 16101,24795,0,3630,-1254,913 2 3805
-'Y "
-char253 11709,19065,5490,1518,3189,913 3 3837
-'y "
-char176 13173,18450,0,111,-2970,111 2 3760
-de "
-char199 17565,18594,5718,2331,-393,913 3 3783
-,C "
-char231 11709,12735,5655,900,1278,900 1 3815
-,c "
-char209 19029,23733,405,3270,1227,913 2 3793
-~N "
-char241 14637,17703,405,1152,954,913 2 3825
-~n "
-char161 10245,13050,5805,0,855 1 3745
-r! "
-char191 13173,13050,5805,0,1680 1 3775
-r? "
-char164 13173,15834,0,2598,795,913 0 3748
-Cs "
-char163 13173,18450,429,2508,1473,913 2 3747
-Po "
-char165 13173,18045,0,5067,834,913 2 3749
-Ye "
-char167 13173,18450,3225,0,-597 2 3751
-sc "
-Fn 13173,18540,5490,2607,3165,913 3 51871
-char162 13173,16914,0,1431,-684,913 2 3746
-ct "
-char226 13173,19065,405,1059,1059,913 2 3810
-^a "
-char234 11709,19065,405,1149,390,913 2 3818
-^e "
-char244 13173,19065,405,675,714,675 2 3828
-^o "
-char251 14637,19065,405,426,279,426 2 3835
-^u "
-char225 13173,19065,405,1059,1059,913 2 3809
-'a "
-char233 11709,19065,405,1518,390,913 2 3817
-'e "
-char243 13173,19065,405,786,714,786 2 3827
-'o "
-char250 14637,19065,405,426,279,426 2 3834
-'u "
-char224 13173,19065,405,1059,1059,913 2 3808
-`a "
-char232 11709,19065,405,687,390,687 2 3816
-`e "
-char242 13173,19065,405,675,714,675 2 3826
-`o "
-char249 14637,19065,405,426,279,426 2 3833
-`u "
-char228 13173,17820,405,1179,1059,913 2 3812
-:a "
-char235 11709,17820,405,1911,390,913 2 3819
-:e "
-char246 13173,17820,405,1179,714,913 2 3830
-:o "
-char252 14637,17820,405,447,279,447 2 3836
-:u "
-char197 17565,24750,0,546,2412,546 2 3781
-oA "
-char238 7317,19065,405,3345,723,913 2 3822
-^i "
-char216 19029,18450,405,3702,2070,913 2 3800
-/O "
-char198 24396,18045,0,2730,2331,913 2 3782
-AE "
-char229 13173,19020,405,1059,1059,913 2 3813
-oa "
-char237 7317,19065,405,3714,723,913 2 3821
-'i "
-char248 13173,12735,405,2199,2256,913 0 3832
-/o "
-char230 18540,12735,405,876,1074,876 0 3814
-ae "
-char196 17565,23955,0,765,2412,765 2 3780
-:A "
-char236 7317,19065,405,1749,723,913 2 3820
-`i "
-char214 19029,23955,405,1503,-183,913 2 3798
-:O "
-char220 19029,23955,405,3249,-1455,913 2 3804
-:U "
-char201 17565,24795,0,1974,1428,913 2 3785
-'E "
-char239 7317,17820,405,4107,723,913 2 3823
-:i "
-char223 13173,18540,5490,1572,5862,913 3 3807
-ss "
-char212 19029,24795,405,1503,-183,913 2 3796
-^O "
-char193 17565,24795,0,567,2412,567 2 3777
-'A "
-char195 17565,23733,0,966,2412,913 2 3779
-~A "
-char227 13173,17703,405,1884,1059,913 2 3811
-~a "
-char208 19029,18045,0,1707,1611,913 2 3792
--D "
-char240 13173,18540,405,2235,708,913 2 3824
-Sd "
-char205 10245,24795,0,4227,1338,913 2 3789
-'I "
-char204 10245,24795,0,2997,1338,913 2 3788
-`I "
-char211 19029,24795,405,1503,-183,913 2 3795
-'O "
-char210 19029,24795,405,1503,-183,913 2 3794
-`O "
-char213 19029,23733,405,1503,-183,913 2 3797
-~O "
-char245 13173,17703,405,1884,714,913 2 3829
-~o "
-vS 14637,24798,510,2061,543,913 2 51795
-vs 10245,19065,405,2856,891,913 2 51827
-char218 19029,24795,405,3249,-1455,913 2 3802
-'U "
-:Y 16101,23955,0,3630,-1254,913 2 51801
-char255 11709,17820,5490,1311,3189,913 3 3839
-:y "
-char222 16101,18045,0,1203,1227,913 2 3806
-TP "
-char254 13173,18540,5490,843,3888,843 3 3838
-Tp "
-char181 14637,10800,5193,582,756,582 1 3765
-char182 13173,19635,4200,1350,-1008,913 2 3766
-ps "
-char190 23418,18450,405,0,-1899 2 3774
-34 "
-\- 23418,9000,0,0,-3315 0 51757
-char188 23418,18450,405,0,-1572 2 3772
-14 "
-char189 23418,18450,405,0,-1311 2 3773
-12 "
-char170 13173,18450,0,1368,-2397,913 2 3754
-Of "
-char186 13173,18450,0,744,-2295,744 2 3770
-Om "
-char171 11709,10200,0,1158,567,913 0 3755
-Fo "
-char187 11709,10200,0,615,1110,615 0 3771
-Fc "
-char177 23418,15975,2880,0,-2883 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19725,0,4398,-2574,913 2 3753
-co "
-char172 23418,12225,0,0,-4023 0 3756
-no "
-char174 13173,19725,0,4398,-2574,913 2 3758
-rg "
-char178 8781,18285,0,1911,-213,913 2 3762
-S2 "
-char179 8781,18285,0,1980,-552,913 2 3763
-S3 "
-char184 13173,0,5655,0,546 1 3768
-ac "
-char185 8781,18285,0,1173,-471,913 2 3769
-S1 "
-char215 23418,15033,0,0,-3690 0 3799
-char247 23418,14505,0,0,-3327 0 3831
-char183 8781,11121,0,0,-1899 0 3767
-pc "
-fm 8781,18450,0,930,-3342,913 2 51873
-sd 13173,18450,0,873,-3342,873 2 51874
-dg 13173,18450,3075,1344,-1188,913 2 51755
-tm 16101,17550,0,4884,-2535,913 2 51796
-ah 13173,19065,0,1392,-3906,913 2 51935
-ao 13173,19020,0,0,-4269 2 51930
-f/ 3402,18450,405,8832,6945,913 2 51759
-em 23418,7200,0,609,459,609 0 51789
-en 13173,7200,0,624,459,624 0 51790
-dd 13173,18450,3075,939,-783,913 2 51773
-.i 7317,12735,405,825,723,825 0 51957
-aq 8781,18450,0,1065,-3147,913 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 17565,24795,405,2331,-393,913 2 20166
-'c 11709,19065,405,1518,435,913 2 20198
-lq 14148,18450,0,1974,-2790,913 2 51838
-rq 14148,18450,0,1974,-2790,913 2 51746
-Bq 14148,3651,4689,0,1425 0 51772
-vz 10245,19065,1935,2856,1839,913 2 51834
-fi 15126,18540,5490,726,5055,726 3 51881
-fl 15126,18540,5490,2328,5034,913 3 51882
-ff 15126,18540,5490,5574,5268,913 3 51883
-Fi 21954,18540,5490,738,5223,738 3 51884
-Fl 21954,18540,5490,1959,5583,913 3 51885
-ij 14148,18585,5490,2271,783,913 3 51958
-bq 8781,3651,4689,0,510 0 51756
-%0 32202,18237,405,612,-1122,612 2 51901
-char175 13173,16860,0,1341,-2904,913 2 3759
-a- "
-ab 13173,18570,0,1281,-3690,913 2 51926
-a. 13173,17820,0,0,-5589 2 51927
-oe 19515,12735,405,462,462,462 0 51823
-OE 28299,18450,405,1695,-156,913 2 51791
-fo 7317,10200,0,1035,567,913 0 51886
-fc 7317,10200,0,618,984,618 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 16101,18045,0,1188,1815,913 2 51944
-/l 7317,18540,405,2622,1539,913 2 51960
-a" 13173,19065,0,4053,-3627,913 2 51933
-ho 13173,681,3249,420,-4389,420 0 51934
-vZ 16101,24798,0,1923,876,913 2 51802
-IJ 23418,18045,405,2652,1338,913 2 51942
diff --git a/contrib/groff/devlj4/TI b/contrib/groff/devlj4/TI
deleted file mode 100644
index 6b4a3ec..0000000
--- a/contrib/groff/devlj4/TI
+++ /dev/null
@@ -1,1131 +0,0 @@
-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 -1950
-P . -4389
-P , -4389
-V A -2925
-A V -2925
-T o -1950
-T r -486
-T c -1461
-T e -1950
-T d -1950
-T s -975
-T y -486
-T a -1950
-T w -486
-T u -486
-T J -1461
-L T -1950
-L Y -1950
-Y o -3414
-Y e -3414
-Y a -3414
-Y J -1461
-A W -2925
-W A -3414
-T A -2439
-V o -1950
-V e -1950
-V a -1950
-Y A -2439
-F A -3903
-F . -3903
-F , -3903
-A T -2439
-A Y -2439
-v . -2439
-v , -2439
-y . -2439
-y , -2439
-T . -2439
-T , -2439
-L W -1950
-P A -3414
-V J -1461
-V . -3903
-V , -3903
-Y . -2439
-Y , -2439
-W o -2439
-W e -2439
-W a -2439
-W . -3903
-W , -3903
-r . -2439
-r , -2439
-w . -2439
-w , -2439
-Y u -1950
-A v -2439
-A y -2439
-A w -2439
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -1461
-b , -1461
-O T -486
-O V -1461
-O Y -1950
-O . -2439
-O , -2439
-L y -975
-P J -1950
-V y -1950
-V u -1950
-V O -1950
-V G -1950
-V C -1950
-V Q -1950
-D T -486
-D V -1461
-D Y -1950
-D . -2439
-D , -2439
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -2925
-F e -2925
-F a -2925
-c . -975
-c , -975
-O A -975
-O W -1461
-L U -486
-R T -1461
-R V -1461
-R Y -1461
-R W -1461
-G T -486
-P o -2439
-P g -2439
-P e -2439
-P a -2439
-C A -975
-C . -975
-C , -975
-D A -975
-D W -1461
-B T -975
-B Y -2439
-B . -1950
-B , -1950
-F J -1461
-A O -1461
-A G -1461
-A C -1461
-A U -1950
-A Q -1461
-W r -2439
-W y -2439
-W u -2439
-W O -2439
-W G -2439
-W C -2439
-W J -1461
-W Q -2439
-J A -1461
-J . -1461
-J , -1461
-U A -1461
-U . -2439
-U , -2439
-Q A -975
-Q W -1461
-f . -486
-f , -486
-T O -486
-T G -486
-T C -486
-T Q -486
-O X -1461
-G V -1461
-G Y -1950
-G W -1461
-G . -975
-G , -975
-P T -486
-P V -486
-P Y -486
-C T -486
-C V -486
-C Y -486
-D X -1461
-B V -1950
-B X -1950
-B A -1461
-B W -1950
-S . -486
-S , -486
-F r -1950
-F y -1950
-F u -1950
-F O -1950
-F G -1950
-F C -1950
-F Q -1950
-X o -1950
-X e -1950
-X y -1950
-X O -1950
-X G -1950
-X C -1950
-X Q -1950
-A o -1461
-A e -1461
-Q X -1461
-K o -1950
-K e -1950
-K y -1950
-K w -1950
-K O -1950
-K G -1950
-K C -1950
-K Q -1950
-o v -975
-o y -975
-o x -486
-o w -975
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -1461
-g . -486
-g , -486
-p v -975
-p y -975
-p x -486
-c v -975
-c y -975
-c w -975
-v o -486
-v g -975
-v c -486
-v d -486
-v a -486
-v q -486
-e v -975
-e y -975
-b v -975
-b y -975
-b w -975
-s . -486
-s , -486
-y o -486
-y g -975
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -486
-x g -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-w o -486
-w g -975
-w c -486
-w d -486
-w a -486
-w q -486
-T i -486
-T S -486
-R o -975
-R y -1461
-R O -975
-R G -975
-R C -975
-R U -1461
-R Q -975
-G X -975
-G A -975
-P s -1461
-P Z -486
-P X -486
-P W -486
-C X -486
-C W -486
-V i -486
-V S -486
-S T -486
-S V -1461
-S Y -1461
-S X -486
-S A -486
-S W -1461
-Y i -486
-Y S -486
-X a -975
-X u -975
-X S -486
-A t -975
-A g -486
-A c -1461
-A d -1461
-A a -975
-A u -975
-A q -1461
-A S -1461
-W i -486
-W S -486
-J y -486
-K c -1461
-K u -975
-K S -975
-t g -975
-t . -486
-t , -486
-o f -486
-h w -975
-n w -975
-m w -975
-r o -975
-r c -975
-r e -975
-r d -975
-r a -975
-r q -975
-g g -975
-p f -486
-p w -975
-c f -486
-c x -486
-v e -486
-v s -486
-e f -486
-e x -486
-e w -975
-b f -486
-y e -486
-y s -486
-w e -486
-w s -486
-k g -486
-k v -975
-k y -975
-k w -975
-R e -975
-R a -975
-R u -975
-R S -975
-P t -975
-P h -486
-P n -975
-P l -486
-P r -975
-P i -975
-P y -975
-P u -975
-P O -975
-P H -486
-P N -486
-P M -486
-P L -486
-P R -486
-P G -975
-P I -486
-P P -486
-P C -975
-P E -486
-P D -486
-P B -486
-P S -975
-P F -486
-P U -975
-P Q -975
-P K -486
-E t -975
-E o -975
-E g -975
-E c -975
-E v -975
-E e -975
-E d -975
-E y -975
-E f -975
-E a -975
-E w -975
-E u -975
-E q -975
-E O -975
-E G -975
-E C -975
-E S -975
-E J -486
-E Q -975
-E . -486
-E , -486
-B Z -486
-B J -486
-F i -486
-F j -486
-F S -486
-J o -486
-J i -486
-J e -486
-J a -486
-J u -486
-J T -486
-J O -486
-J H -486
-J N -486
-J M -486
-J L -486
-J R -486
-J G -486
-J I -486
-J P -486
-J C -486
-J V -486
-J E -486
-J Z -486
-J D -486
-J B -486
-J S -486
-J Y -486
-J F -486
-J X -486
-J W -486
-J J -486
-J U -975
-J Q -486
-J K -486
-U g -975
-U J -486
-K a -975
-t o -486
-t c -486
-t e -486
-t d -486
-t s -486
-t a -486
-t q -486
-o g -486
-o z -486
-h g -486
-h f -486
-n g -486
-n f -486
-m g -486
-m f -486
-l g -486
-r s -486
-g o -486
-g c -486
-g e -486
-g d -486
-g s -486
-g a -486
-g q -486
-i g -486
-p g -486
-p z -486
-c g -486
-c z -486
-v t -486
-v h -486
-v n -486
-v m -486
-v r -486
-v i -486
-v p -486
-v z -486
-v b -486
-v y -486
-v f -486
-v x -486
-v w -486
-v j -486
-v u -486
-v k -486
-e g -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z a -486
-z q -486
-d g -486
-b g -486
-b z -486
-s g -486
-y t -486
-y h -486
-y n -486
-y m -486
-y l -486
-y r -486
-y i -486
-y p -486
-y v -486
-y z -486
-y b -486
-y y -486
-y f -486
-y x -486
-y w -486
-y j -486
-y u -486
-y k -486
-a g -486
-w t -486
-w h -486
-w n -486
-w m -486
-w l -486
-w r -486
-w i -486
-w p -486
-w v -486
-w z -486
-w b -486
-w y -486
-w f -486
-w x -486
-w w -486
-w j -486
-w u -486
-w k -486
-j g -486
-u g -486
-q g -486
-k f -486
-T U -486
-O g -486
-M g -486
-I g -486
-C U -486
-V U -486
-E n -486
-E m -486
-E l -486
-E r -486
-E i -486
-E p -486
-E z -486
-E b -486
-E s -486
-E x -486
-E j -486
-E k -486
-E T -486
-E H -486
-E N -486
-E M -486
-E L -486
-E R -486
-E I -486
-E P -486
-E V -486
-E E -486
-E Z -486
-E D -486
-E B -486
-E Y -486
-E F -486
-E X -486
-E A -486
-E W -486
-E U -975
-E K -486
-B o -486
-B h -486
-B l -486
-B r -486
-B i -486
-B e -486
-B y -486
-B a -486
-B u -486
-B O -486
-B H -486
-B N -486
-B M -486
-B L -486
-B R -486
-B G -486
-B I -486
-B P -486
-B C -486
-B E -486
-B D -486
-B B -486
-B S -486
-B F -486
-B U -975
-B Q -486
-B K -486
-Y U -486
-F U -486
-X U -486
-A b -486
-A f -486
-W U -486
-U t -486
-U o -486
-U h -486
-U n -486
-U m -486
-U l -486
-U r -486
-U i -486
-U p -486
-U c -486
-U v -486
-U e -486
-U z -486
-U d -486
-U b -486
-U s -486
-U y -486
-U f -486
-U x -486
-U a -486
-U w -486
-U j -486
-U q -486
-U k -486
-U T -486
-U O -486
-U H -486
-U N -486
-U M -486
-U L -486
-U R -486
-U G -486
-U I -486
-U P -486
-U C -486
-U V -486
-U E -486
-U Z -486
-U D -486
-U B -486
-U S -486
-U Y -486
-U F -486
-U X -486
-U W -486
-U U -975
-U Q -486
-U K -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -975
-L cq -1950
-L ' -1950
-T char173 -486
-T hy -486
-T - -486
-T en -486
-T em -486
-A cq -2439
-A ' -2439
-char173 T -486
-hy T -486
-- T -486
-en T -486
-em T -486
-Y char173 -1950
-Y hy -1950
-Y - -1950
-Y en -1950
-Y em -1950
-p cq -1950
-p ' -1950
-c cq -1461
-c ' -1461
-e cq -1950
-e ' -1950
-b cq -1950
-b ' -1950
-V char173 -1950
-V hy -1950
-V - -1950
-V en -1950
-V em -1950
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-R cq -1461
-R ' -1461
-W char173 -2439
-W hy -2439
-W - -2439
-W en -2439
-W em -2439
-cq d -1461
-' d -1461
-F char173 -1950
-F hy -1950
-F - -1950
-F en -1950
-F em -1950
-X char173 -1950
-X hy -1950
-X - -1950
-X en -1950
-X em -1950
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -1950
-K hy -1950
-K - -1950
-K en -1950
-K em -1950
-cq s -486
-' s -486
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-R char173 -975
-R hy -975
-R - -975
-R en -975
-R em -975
-K cq -486
-K ' -486
-t g -975
-v cq -486
-v ' -486
-b f -486
-y cq -486
-y ' -486
-w cq -486
-w ' -486
-k cq -975
-k ' -975
-P cq -486
-P ' -486
-P char173 -975
-P hy -975
-P - -975
-P en -975
-P em -975
-E cq -486
-E ' -486
-E char173 -975
-E hy -975
-E - -975
-E en -975
-E em -975
-B cq -486
-B ' -486
-J cq -486
-J ' -486
-J char173 -486
-J hy -486
-J - -486
-J en -486
-J em -486
-U cq -486
-U ' -486
-v char173 -486
-v hy -486
-v - -486
-v en -486
-v em -486
-y char173 -486
-y hy -486
-y - -486
-y en -486
-y em -486
-w char173 -486
-w hy -486
-w - -486
-w en -486
-w em -486
-B char173 -486
-B hy -486
-B - -486
-B en -486
-B em -486
-U char173 -486
-U hy -486
-U - -486
-U en -486
-U em -486
-char173 g -486
-hy g -486
-- g -486
-en g -486
-em g -486
-charset
-! 8781,18225,330,1170,-693,899 2 3617
-dq 12684,18225,0,945,-4194,899 2 3618
-" "
-sh 13173,18225,687,2103,-75,899 2 3619
-# "
-Do 13173,19686,2730,1710,507,899 2 3620
-$ "
-% 23418,18894,1026,0,-3054 2 3621
-& 20490,18225,330,0,-321 2 3622
-cq 8781,18225,0,1434,-3582,899 2 51751
-' "
-( 8781,18225,4845,3531,-2058,899 2 3624
-) 8781,18225,4845,0,2067 2 3625
-* 13173,18225,0,927,-1581,899 2 3626
-+ 23418,15750,0,0,-2994 0 3627
-, 8781,2835,3360,0,648 0 3628
-char173 8781,7155,0,468,153,468 0 3629
-hy "
-- "
-. 8781,2685,330,0,-633 0 3630
-sl 8781,18225,330,3183,801,899 2 3631
-/ "
-0 13173,18225,330,1938,237,899 2 3632
-1 13173,18225,0,0,165 2 3633
-2 13173,18225,0,876,567,876 2 3634
-3 13173,18225,330,1020,645,899 2 3635
-4 13173,18225,0,1773,618,899 2 3636
-5 13173,17895,330,1362,1008,899 2 3637
-6 13173,18480,330,2085,147,899 2 3638
-7 13173,17895,330,4029,-1494,899 2 3639
-8 13173,18225,330,1827,306,899 2 3640
-9 13173,18225,570,1785,447,899 2 3641
-: 8781,11988,330,501,-633,501 0 3642
-; 8781,11988,3360,0,1074 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 23418,10875,0,0,-3183 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 13173,18225,330,1362,-2850,899 2 3647
-at 23418,16980,3654,750,-228,750 2 3648
-@ "
-A 16101,18225,0,33,2700,33 2 3649
-B 16101,17895,0,1116,1701,899 2 3650
-C 17565,18225,330,2700,-873,899 2 3651
-D 19029,17895,0,594,2298,594 2 3652
-E 16101,17895,0,2091,1800,899 2 3653
-F 15126,17895,0,3180,1725,899 2 3654
-G 19029,18225,330,2301,-606,899 2 3655
-H 19029,17895,0,3057,1614,899 2 3656
-I 8781,17895,0,3165,1716,899 2 3657
-J 11709,17895,330,2847,1797,899 2 3658
-K 17565,17895,0,3273,1425,899 2 3659
-L 14637,17895,0,1023,2487,899 2 3660
-M 21954,17895,0,2712,1983,899 2 3661
-N 17565,17895,330,3843,1578,899 2 3662
-O 19029,18225,330,1356,-492,899 2 3663
-P 16101,17895,0,1950,1116,899 2 3664
-Q 19029,18225,4761,1215,-351,899 2 3665
-R 16101,17895,0,1041,1926,899 2 3666
-S 13173,18225,330,2190,609,899 2 3667
-T 14637,17895,0,3939,-90,899 2 3668
-U 19029,17895,330,3246,-1635,899 2 3669
-V 16101,17895,330,4185,-1170,899 2 3670
-W 21954,17895,330,4353,-822,899 2 3671
-X 16101,17895,0,3276,2067,899 2 3672
-Y 14637,17895,0,4533,-1086,899 2 3673
-Z 14637,17895,0,2856,1710,899 2 3674
-lB 8781,17895,4380,4026,1575,899 2 3675
-[ "
-rs 8781,18225,330,0,-2229 2 3676
-\ "
-rB 8781,17895,4380,1938,3663,899 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,899 3 3679
-oq 8781,18225,0,1422,-3570,899 2 51808
-` "
-a 13173,12669,330,759,1044,759 0 3681
-b 13173,18300,330,732,1038,732 2 3682
-c 11709,12669,330,1275,318,899 0 3683
-d 13173,18300,330,2283,1065,899 2 3684
-e 11709,12669,330,1011,444,899 0 3685
-f 7317,18300,5655,5346,5535,899 3 3686
-g 13173,12669,5655,813,1281,813 1 3687
-h 13173,18300,330,750,1188,750 2 3688
-i 7317,18369,330,1002,435,899 2 3689
-j 7317,18369,5655,1212,5187,899 3 3690
-k 11709,18300,330,1941,1422,899 2 3691
-l 7317,18300,330,1731,276,899 2 3692
-m 19029,12669,330,1080,1098,899 0 3693
-n 13173,12669,330,786,1053,786 0 3694
-o 13173,12669,330,771,732,771 0 3695
-p 13173,12669,5655,471,3981,471 1 3696
-q 13173,12669,5655,1377,651,899 1 3697
-r 10245,12669,0,2094,429,899 0 3698
-s 10245,12669,330,786,1116,786 0 3699
-t 7317,15339,330,1908,672,899 0 3700
-u 13173,12669,330,747,468,747 0 3701
-v 11709,12684,330,1404,399,899 0 3702
-w 17565,12669,330,1461,720,899 0 3703
-x 11709,12669,330,1134,2592,899 0 3704
-y 11709,12669,5655,561,2538,561 1 3705
-z 10245,12339,2163,1122,1815,899 0 3706
-lC 11709,19935,6210,3360,-1692,899 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 11709,19935,6210,0,2232 3 3709
-} "
-ti 26346,8952,0,0,-4029 0 51876
-char192 16101,23955,0,33,2700,33 2 3776
-`A "
-char194 16101,23955,0,1314,2700,899 2 3778
-^A "
-char200 16101,23955,0,2091,1800,899 2 3784
-`E "
-char202 16101,23955,0,2091,1800,899 2 3786
-^E "
-char203 16101,23085,0,2091,1800,899 2 3787
-:E "
-char206 8781,23955,0,3984,1716,899 2 3790
-^I "
-char207 8781,23085,0,4665,1716,899 2 3791
-:I "
-char180 13173,18399,0,141,-5400,141 2 3764
-aa "
-ga 13173,18399,0,0,-4314 2 3680
-a^ 13173,18399,0,0,-3453 2 3678
-^ "
-char168 13173,17124,0,624,-4002,624 2 3752
-ad "
-a~ 13173,17145,0,990,-3309,899 2 3710
-~ "
-char217 19029,23955,330,3246,-1635,899 2 3801
-`U "
-char219 19029,23955,330,3246,-1635,899 2 3803
-^U "
-char221 14637,23955,0,4533,-1086,899 2 3805
-'Y "
-char253 11709,18399,5655,561,2538,561 3 3837
-'y "
-char176 13173,18225,0,543,-3522,543 2 3760
-de "
-char199 17565,18225,5019,2700,-873,899 2 3783
-,C "
-char231 11709,12669,4785,1275,636,899 0 3815
-,c "
-char209 17565,23079,330,3843,1578,899 2 3793
-~N "
-char241 13173,17145,330,990,1053,899 2 3825
-~n "
-char161 8781,12231,6324,33,444,33 1 3745
-r! "
-char191 13173,12312,6243,0,663 1 3775
-r? "
-char164 13173,15684,0,1779,228,899 0 3748
-Cs "
-char163 13173,17895,330,3153,1971,899 2 3747
-Po "
-char165 13173,17895,0,4170,-15,899 2 3749
-Ye "
-char167 13173,18225,4200,447,-1359,447 2 3751
-sc "
-Fn 13173,18300,5655,2388,2691,899 3 51871
-char162 13173,17034,0,996,-777,899 2 3746
-ct "
-char226 13173,18399,330,759,1044,759 2 3810
-^a "
-char234 11709,18399,330,1761,444,899 2 3818
-^e "
-char244 13173,18399,330,771,732,771 2 3828
-^o "
-char251 13173,18399,330,747,468,747 2 3835
-^u "
-char225 13173,18399,330,759,1044,759 2 3809
-'a "
-char233 11709,18399,330,1011,444,899 2 3817
-'e "
-char243 13173,18399,330,771,732,771 2 3827
-'o "
-char250 13173,18399,330,747,468,747 2 3834
-'u "
-char224 13173,18399,330,759,1044,759 2 3808
-`a "
-char232 11709,18399,330,1011,444,899 2 3816
-`e "
-char242 13173,18399,330,771,732,771 2 3826
-`o "
-char249 13173,18399,330,747,468,747 2 3833
-`u "
-char228 13173,17124,330,759,1044,759 2 3812
-:a "
-char235 11709,17124,330,1356,444,899 2 3819
-:e "
-char246 13173,17124,330,1074,732,899 2 3830
-:o "
-char252 13173,17124,330,747,468,747 2 3836
-:u "
-char197 16101,23865,0,525,2700,525 2 3781
-oA "
-char238 7317,18399,330,2907,420,899 2 3822
-^i "
-char216 19029,18255,330,2082,234,899 2 3800
-/O "
-char198 23418,17895,0,2961,1959,899 2 3782
-AE "
-char229 13173,18309,330,759,1044,759 2 3813
-oa "
-char237 7317,18399,330,3069,420,899 2 3821
-'i "
-char248 13173,12738,336,1491,1443,899 0 3832
-/o "
-char230 17565,12669,330,933,771,899 0 3814
-ae "
-char196 16101,23085,0,2055,2700,899 2 3780
-:A "
-char236 7317,18399,330,1383,420,899 2 3820
-`i "
-char214 19029,23085,330,1356,-492,899 2 3798
-:O "
-char220 19029,23085,330,3246,-1635,899 2 3804
-:U "
-char201 16101,23955,0,2091,1800,899 2 3785
-'E "
-char239 7317,17124,330,3552,420,899 2 3823
-:i "
-char223 13173,18300,5655,1131,5829,899 3 3807
-ss "
-char212 19029,23955,330,1356,-492,899 2 3796
-^O "
-char193 16101,23955,0,1914,2700,899 2 3777
-'A "
-char195 16101,23079,0,2580,2700,899 2 3779
-~A "
-char227 13173,17145,330,990,1044,899 2 3811
-~a "
-char208 19029,17895,0,594,2298,594 2 3792
--D "
-char240 13173,18300,330,2040,732,899 2 3824
-Sd "
-char205 8781,23955,0,5124,1716,899 2 3789
-'I "
-char204 8781,23955,0,3165,1716,899 2 3788
-`I "
-char211 19029,23955,330,1356,-492,899 2 3795
-'O "
-char210 19029,23955,330,1356,-492,899 2 3794
-`O "
-char213 19029,23079,330,1356,-492,899 2 3797
-~O "
-char245 13173,17145,330,1665,732,899 2 3829
-~o "
-vS 13173,23955,330,2268,609,899 2 51795
-vs 10245,18399,330,2472,1116,899 2 51827
-char218 19029,23955,330,3246,-1635,899 2 3802
-'U "
-:Y 14637,23085,0,4533,-1086,899 2 51801
-char255 11709,17124,5655,561,2538,561 3 3839
-:y "
-char222 16101,17895,0,813,1107,813 2 3806
-TP "
-char254 13173,18300,5655,471,3981,471 3 3838
-Tp "
-char181 14637,10800,5595,612,585,612 1 3765
-char182 13173,19635,4200,1650,-1308,899 2 3766
-ps "
-char190 23418,18225,330,0,-2985 2 3774
-34 "
-\- 23418,8610,0,0,-3027 0 51757
-char188 23418,18225,330,0,-2472 2 3772
-14 "
-char189 23418,18225,330,0,-1632 2 3773
-12 "
-char170 13173,18225,0,1119,-1827,899 2 3754
-Of "
-char186 13173,18225,0,1503,-2640,899 2 3770
-Om "
-char171 12198,10095,0,501,330,501 0 3755
-Fo "
-char187 12198,10095,0,336,495,336 0 3771
-Fc "
-char177 23418,15750,2625,0,-2949 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19725,0,5355,-3531,899 2 3753
-co "
-char172 23418,12165,0,0,-3045 0 3756
-no "
-char174 13173,19725,0,5355,-3531,899 2 3758
-rg "
-char178 9270,18060,0,1602,-555,899 2 3762
-S2 "
-char179 9270,18060,0,1980,-771,899 2 3763
-S3 "
-char184 13173,0,4785,0,-96 0 3768
-ac "
-char185 9270,18060,0,1146,-1233,899 2 3769
-S1 "
-char215 23418,14658,0,0,-3630 0 3799
-char247 23418,14010,0,0,-2958 0 3831
-char183 8781,9945,0,0,-2400 0 3767
-pc "
-fm 8781,18225,0,852,-3669,852 2 51873
-sd 13173,18225,0,612,-3669,612 2 51874
-dg 13173,18225,4200,1470,-1434,899 2 51755
-tm 16101,17550,0,5841,-3492,899 2 51796
-ah 13173,18399,0,1908,-5382,899 2 51935
-ao 13173,18309,0,0,-5421 2 51930
-f/ 3402,18225,330,8451,6846,899 2 51759
-em 23418,6900,0,345,153,345 0 51789
-en 13173,6900,0,393,153,393 0 51790
-dd 13173,18225,4200,1056,-1020,899 2 51773
-.i 7317,12669,330,120,420,120 0 51957
-aq 8781,18225,0,585,-3807,585 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 17565,23955,330,2700,-873,899 2 20166
-'c 11709,18399,330,2199,318,899 2 20198
-lq 13173,18225,0,1320,-3570,899 2 51838
-rq 13173,18225,0,1332,-3582,899 2 51746
-Bq 13173,3039,3156,0,453 0 51772
-vz 10245,18399,2163,1872,1815,899 2 51834
-fi 13173,18300,5655,534,5772,534 3 51881
-fl 13173,18300,5655,1773,5736,899 3 51882
-ff 14148,18300,5655,5796,5352,899 3 51883
-Fi 20004,18300,5655,672,5466,672 3 51884
-Fl 20004,18300,5655,1851,5418,899 3 51885
-ij 13173,18369,5655,1212,435,899 3 51958
-bq 8781,3039,3156,0,-582 0 51756
-%0 32202,18894,1026,0,-3135 2 51901
-char175 13173,15819,0,867,-4257,867 0 3759
-a- "
-ab 13173,18339,0,1122,-4281,899 2 51926
-a. 13173,17124,0,0,-6222 2 51927
-oe 17565,12669,330,1107,711,899 0 51823
-OE 24882,18225,330,2016,978,899 2 51791
-fo 7317,10095,0,939,333,899 0 51886
-fc 7317,10095,0,774,498,774 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 14637,17895,0,1023,2487,899 2 51944
-/l 7317,18300,330,1749,654,899 2 51960
-a" 13173,18399,0,3321,-4644,899 2 51933
-ho 13173,564,3186,0,-3846 0 51934
-vZ 14637,23955,0,2856,1710,899 2 51802
-IJ 21465,17895,330,1872,1716,899 2 51942
diff --git a/contrib/groff/devlj4/TR b/contrib/groff/devlj4/TR
deleted file mode 100644
index 64a1243..0000000
--- a/contrib/groff/devlj4/TR
+++ /dev/null
@@ -1,878 +0,0 @@
-name TR
-spacewidth 7806
-pcltypeface 4101
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3903
-P . -3903
-P , -3903
-V A -5364
-A V -5364
-T o -3414
-T r -1950
-T c -3414
-T e -2925
-T d -2925
-T s -2925
-T y -1950
-T a -3414
-T w -1950
-T u -1950
-T J -1461
-L T -2925
-L Y -3903
-Y o -4878
-Y e -4389
-Y a -4878
-Y J -1461
-A W -4878
-W A -4878
-T A -2925
-V o -3903
-V e -3903
-V a -3903
-Y A -4389
-F A -3903
-F . -3903
-F , -3903
-A T -2925
-A Y -4389
-v . -3414
-v , -3414
-y . -3414
-y , -3414
-T . -2925
-T , -2925
-L W -3414
-P A -3903
-V J -1461
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -3414
-W e -3414
-W a -3414
-W . -3903
-W , -3903
-r . -2439
-r , -2439
-w . -3414
-w , -3414
-Y u -3414
-A v -3414
-A y -3414
-A w -3414
-o . -1461
-o , -1461
-p . -1461
-p , -1461
-e . -975
-e , -975
-b . -1461
-b , -1461
-O T -1950
-O V -2925
-O Y -2925
-O . -2925
-O , -2925
-L y -1461
-P J -1461
-V y -2925
-V u -2925
-V O -2925
-V G -2925
-V C -2925
-V Q -2925
-D T -1950
-D V -2925
-D Y -2925
-D . -2925
-D , -2925
-Y O -2925
-Y G -2925
-Y C -2925
-Y Q -2925
-F o -1461
-F e -1461
-F a -1461
-c . -1461
-c , -1461
-O A -2439
-O W -2439
-R T -2439
-R V -2439
-R Y -2439
-R W -2439
-G T -1950
-P o -1461
-P g -1461
-P e -975
-P a -1461
-C A -1950
-C . -1950
-C , -1950
-D A -2439
-D W -2439
-B T -1950
-B Y -1950
-B . -1950
-B , -1950
-F J -1461
-A O -2439
-A G -2439
-A C -2439
-A U -2439
-A Q -2439
-W r -2439
-W y -2439
-W u -2439
-W O -2439
-W G -2439
-W C -2439
-W J -1461
-W Q -2439
-J A -2439
-J . -2439
-J , -2439
-U A -2439
-U . -2439
-U , -2439
-Q A -2439
-Q W -2439
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-G V -1950
-G Y -1950
-G W -1950
-G . -1461
-G , -1461
-C T -975
-C V -975
-C Y -975
-D X -1461
-B V -1950
-B X -1461
-B A -1950
-B W -1950
-S . -1461
-S , -1461
-F r -486
-F y -486
-F u -486
-F O -486
-F G -486
-F C -486
-F Q -486
-X o -1461
-X e -975
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -975
-Q X -1461
-K o -1461
-K e -975
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -1461
-o y -1461
-o x -975
-o w -1461
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-r g -975
-g . -975
-g , -975
-p v -975
-p y -975
-p x -975
-c v -1461
-c y -1461
-c w -1461
-v o -1461
-v g -1461
-v c -1461
-v d -1461
-v a -1461
-v q -1461
-e v -975
-e y -975
-b v -1461
-b y -1461
-b w -1461
-s . -975
-s , -975
-y o -1461
-y g -1461
-y c -1461
-y d -1461
-y a -1461
-y q -1461
-f g -486
-x o -975
-x g -486
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -1461
-a y -1461
-a w -1461
-w o -1461
-w g -1461
-w c -1461
-w d -1461
-w a -1461
-w q -1461
-T i -1461
-T S -1461
-R o -1461
-R y -1461
-R O -1461
-R G -1461
-R C -1461
-R U -1461
-R Q -1461
-G X -1461
-G A -1461
-P s -975
-C X -975
-C W -975
-V i -1461
-V S -1461
-S T -486
-S V -486
-S Y -486
-S X -486
-S A -1461
-S W -486
-Y i -1461
-Y S -1461
-X a -975
-X u -975
-X S -486
-A t -975
-A g -486
-A c -1461
-A d -1461
-A a -975
-A u -975
-A q -1461
-A S -486
-W i -1461
-W S -1461
-J y -486
-K c -1461
-K u -975
-K S -486
-t g -486
-o f -975
-h w -975
-n w -975
-m w -975
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-g g -975
-p f -975
-p w -975
-c f -975
-c x -975
-v e -975
-v s -975
-e f -975
-e x -975
-e w -975
-b f -975
-s v -975
-s y -975
-s f -975
-s x -975
-s w -975
-y e -975
-y s -975
-f o -975
-f c -975
-f e -975
-f d -975
-f s -975
-f a -975
-f q -975
-x s -975
-w e -975
-w s -975
-k o -486
-k g -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-O Z -486
-N . -486
-N , -486
-R e -975
-R a -975
-R u -975
-R S -486
-G Z -486
-C Z -486
-E g -486
-Z o -486
-Z e -486
-Z d -486
-Z s -486
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z J -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-F i -486
-F j -486
-F S -486
-X J -486
-A s -975
-A J -486
-J o -486
-J i -486
-J e -486
-J a -486
-J u -486
-J O -486
-J G -486
-J C -486
-J S -486
-J J -486
-J Q -486
-U g -486
-K a -975
-K J -486
-o g -486
-o z -486
-h g -486
-n g -486
-m g -486
-l g -486
-r s -486
-g o -486
-g c -486
-g e -486
-g d -486
-g s -486
-g a -486
-g q -486
-i g -486
-p g -486
-p z -486
-c g -486
-c z -486
-e g -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z s -486
-z a -486
-z q -486
-d g -486
-b g -486
-b z -486
-s g -486
-s z -486
-a g -486
-j g -486
-u g -486
-q g -486
-k s -486
-O g -486
-N A -486
-M g -486
-R J -486
-I g -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -3903
-L ' -3903
-T char173 -1950
-T hy -1950
-T - -1950
-T en -1950
-T em -1950
-A cq -3903
-A ' -3903
-char173 T -1950
-hy T -1950
-- T -1950
-en T -1950
-em T -1950
-Y char173 -3414
-Y hy -3414
-Y - -3414
-Y en -3414
-Y em -3414
-p cq -975
-p ' -975
-c cq -1461
-c ' -1461
-e cq -975
-e ' -975
-b cq -1461
-b ' -1461
-a cq -1461
-a ' -1461
-V char173 -2925
-V hy -2925
-V - -2925
-V en -2925
-V em -2925
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-R cq -1461
-R ' -1461
-W char173 -2439
-W hy -2439
-W - -2439
-W en -2439
-W em -2439
-cq d -1461
-' d -1461
-s cq -975
-s ' -975
-F char173 -486
-F hy -486
-F - -486
-F en -486
-F em -486
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1950
-hy A -1950
-- A -1950
-en X -1461
-en A -1950
-em X -1461
-R char173 -1461
-R hy -1461
-R - -1461
-R en -1461
-R em -1461
-K cq -486
-K ' -486
-t g -486
-b f -975
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-J char173 -486
-J hy -486
-J - -486
-J en -486
-J em -486
-char173 g -486
-hy g -486
-- g -486
-en g -486
-em g -486
-charset
-! 8781,18225,330 2 3617
-dq 12198,18225 2 3618
-" "
-sh 13173,18225,837 2 3619
-# "
-Do 13173,19845,2370 2 3620
-$ "
-% 23418,18894,1026 2 3621
-& 20490,18225,330 2 3622
-cq 8781,18225 2 51751
-' "
-( 8781,18225,4845 2 3624
-) 8781,18225,4845 2 3625
-* 13173,18225 2 3626
-+ 23418,15750 0 3627
-, 8781,2565,4005 0 3628
-char173 8781,7155 0 3629
-hy "
-- "
-. 8781,2685,330 0 3630
-sl 8781,18225,330 2 3631
-/ "
-0 13173,18225,330 2 3632
-1 13173,18225 2 3633
-2 13173,18225 2 3634
-3 13173,18225,330 2 3635
-4 13173,18225 2 3636
-5 13173,17895,330 2 3637
-6 13173,18225,330 2 3638
-7 13173,17895 2 3639
-8 13173,18225,330 2 3640
-9 13173,18225,330 2 3641
-: 8781,12252,330 0 3642
-; 8781,12252,4005 0 3643
-< 26346,16068 0 3644
-= 23418,10875 0 3645
-> 26346,16068 0 3646
-? 11709,18225,330 2 3647
-at 23418,16980,3654 2 3648
-@ "
-A 19029,18225 2 3649
-B 16587,17895 2 3650
-C 18051,18225,330 2 3651
-D 19515,17895 2 3652
-E 16587,17895 2 3653
-F 15612,17895 2 3654
-G 19029,18225,330 2 3655
-H 19515,17895 2 3656
-I 8781,17895 2 3657
-J 10245,17895,330 2 3658
-K 18540,17895 2 3659
-L 16587,17895 2 3660
-M 23907,17895 2 3661
-N 19515,17895,330 2 3662
-O 19029,18225,330 2 3663
-P 15126,17895 2 3664
-Q 19029,18225,4605 2 3665
-R 17565,17895 2 3666
-S 14148,18225,330 2 3667
-T 16587,17895 2 3668
-U 19515,17895,330 2 3669
-V 19029,17895,330 2 3670
-W 24882,17895,330 2 3671
-X 19029,17895 2 3672
-Y 19029,17895 2 3673
-Z 17076,17895 2 3674
-lB 8781,17895,4380 2 3675
-[ "
-rs 8781,18225,330 2 3676
-\ "
-rB 8781,17895,4380 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 8781,18225 2 51808
-` "
-a 11709,12669,330 0 3681
-b 13173,18300,330 2 3682
-c 11709,12669,330 0 3683
-d 13173,18300,330 2 3684
-e 11709,12669,330 0 3685
-f 8781,18300 2 3686
-g 13173,12669,5655 1 3687
-h 13173,18300 2 3688
-i 7317,18534 2 3689
-j 7317,18534,5655 3 3690
-k 13173,18300 2 3691
-l 7317,18300 2 3692
-m 20490,12669 0 3693
-n 13173,12669 0 3694
-o 13173,12669,330 0 3695
-p 13173,12669,5655 1 3696
-q 13173,12669,5655 1 3697
-r 9759,12669 0 3698
-s 10245,12669,330 0 3699
-t 7317,15465,330 0 3700
-u 13173,12339,330 0 3701
-v 13173,12339,330 0 3702
-w 19029,12339,330 0 3703
-x 13173,12339 0 3704
-y 13173,12339,5655 1 3705
-z 11709,12339 0 3706
-lC 11709,19935,6210 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11709,19935,6210 3 3709
-} "
-ti 26346,8952 0 51876
-char192 19029,23955 2 3776
-`A "
-char194 19029,23955 2 3778
-^A "
-char200 16587,23955 2 3784
-`E "
-char202 16587,23955 2 3786
-^E "
-char203 16587,23085 2 3787
-:E "
-char206 8781,23955 2 3790
-^I "
-char207 8781,23085 2 3791
-:I "
-char180 13173,18399 2 3764
-aa "
-ga 13173,18399 2 3680
-a^ 13173,18399 2 3678
-^ "
-char168 13173,17124 2 3752
-ad "
-a~ 13173,17064 2 3710
-~ "
-char217 19515,23955,330 2 3801
-`U "
-char219 19515,23955,330 2 3803
-^U "
-char221 19029,23955 2 3805
-'Y "
-char253 13173,18399,5655 3 3837
-'y "
-char176 13173,18225 2 3760
-de "
-char199 18051,18225,4908 2 3783
-,C "
-char231 11709,12669,4572 0 3815
-,c "
-char209 19515,23034,330 2 3793
-~N "
-char241 13173,17064 2 3825
-~n "
-char161 8781,12783,5772 1 3745
-r! "
-char191 11709,12783,5772 1 3775
-r? "
-char164 13173,15684 0 3748
-Cs "
-char163 13173,18225,330 2 3747
-Po "
-char165 13173,17895 2 3749
-Ye "
-char167 13173,18225,4230 2 3751
-sc "
-Fn 13173,18300,5655 3 51871
-char162 13173,16866 2 3746
-ct "
-char226 11709,18399,330 2 3810
-^a "
-char234 11709,18399,330 2 3818
-^e "
-char244 13173,18399,330 2 3828
-^o "
-char251 13173,18399,330 2 3835
-^u "
-char225 11709,18399,330 2 3809
-'a "
-char233 11709,18399,330 2 3817
-'e "
-char243 13173,18399,330 2 3827
-'o "
-char250 13173,18399,330 2 3834
-'u "
-char224 11709,18399,330 2 3808
-`a "
-char232 11709,18399,330 2 3816
-`e "
-char242 13173,18399,330 2 3826
-`o "
-char249 13173,18399,330 2 3833
-`u "
-char228 11709,17124,330 2 3812
-:a "
-char235 11709,17124,330 2 3819
-:e "
-char246 13173,17124,330 2 3830
-:o "
-char252 13173,17124,330 2 3836
-:u "
-char197 19029,23865 2 3781
-oA "
-char238 7317,18399 2 3822
-^i "
-char216 19029,18225,339 2 3800
-/O "
-char198 23418,17895 2 3782
-AE "
-char229 11709,18309,330 2 3813
-oa "
-char237 7317,18399 2 3821
-'i "
-char248 13173,12765,330 0 3832
-/o "
-char230 17565,12669,330 0 3814
-ae "
-char196 19029,23085 2 3780
-:A "
-char236 7317,18399 2 3820
-`i "
-char214 19029,23085,330 2 3798
-:O "
-char220 19515,23085,330 2 3804
-:U "
-char201 16587,23955 2 3785
-'E "
-char239 7317,17124 2 3823
-:i "
-char223 13173,18300,330 2 3807
-ss "
-char212 19029,23955,330 2 3796
-^O "
-char193 19029,23955 2 3777
-'A "
-char195 19029,23034 2 3779
-~A "
-char227 11709,17064,330 2 3811
-~a "
-char208 19515,17895 2 3792
--D "
-char240 13173,18456,330 2 3824
-Sd "
-char205 8781,23955 2 3789
-'I "
-char204 8781,23955 2 3788
-`I "
-char211 19029,23955,330 2 3795
-'O "
-char210 19029,23955,330 2 3794
-`O "
-char213 19029,23034,330 2 3797
-~O "
-char245 13173,17064,330 2 3829
-~o "
-vS 14148,23955,330 2 51795
-vs 10245,18399,330 2 51827
-char218 19515,23955,330 2 3802
-'U "
-:Y 19029,23085 2 51801
-char255 13173,17124,5655 3 3839
-:y "
-char222 15126,17895 2 3806
-TP "
-char254 13173,18300,5655 3 3838
-Tp "
-char181 14637,10800,5595 1 3765
-char182 13173,19635,4200 2 3766
-ps "
-char190 23418,18225,330 2 3774
-34 "
-\- 23418,8610 0 51757
-char188 23418,18225,330 2 3772
-14 "
-char189 23418,18225,330 2 3773
-12 "
-char170 13173,18225 2 3754
-Of "
-char186 13173,18225 2 3770
-Om "
-char171 10734,10095 0 3755
-Fo "
-char187 10734,10095 0 3771
-Fc "
-char177 23418,15750,2625 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 23418,12165 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 9270,18060 2 3762
-S2 "
-char179 9270,18060 2 3763
-S3 "
-char184 13173,258,4572 0 3768
-ac "
-char185 9270,18060 2 3769
-S1 "
-char215 23418,15117 0 3799
-char247 23418,14010 0 3831
-char183 8781,10407 0 3767
-pc "
-fm 8781,18225 2 51873
-sd 13173,18225 2 51874
-dg 13173,18225,4200 2 51755
-tm 16101,17550 2 51796
-ah 13173,18399 2 51935
-ao 13173,18309 2 51930
-f/ 3423,18225,330 2 51759
-em 23418,6900 0 51789
-en 13173,6900 0 51790
-dd 13173,18225,4200 2 51773
-.i 7317,12669 0 51957
-aq 8781,18225 2 3623
-bu 13173,14226 0 51889
-'C 18051,23955,330 2 20166
-'c 11709,18399,330 2 20198
-lq 13662,18231 2 51838
-rq 13662,18225 2 51746
-Bq 13662,3009,3576 0 51772
-vz 11709,18399 2 51834
-fi 14637,18300 2 51881
-fl 14637,18300 2 51882
-ff 15612,18300 2 51883
-Fi 21954,18300 2 51884
-Fl 21954,18300 2 51885
-ij 14637,18534,5655 3 51958
-bq 8781,3009,3561 0 51756
-%0 31713,18894,1026 2 51901
-char175 13173,16539 0 3759
-a- "
-ab 13173,17769 2 51926
-a. 13173,17124 2 51927
-oe 19029,12669,330 0 51823
-OE 23418,18225,330 2 51791
-fo 6831,10095 0 51886
-fc 6831,10095 0 51887
-sq 19029,15624 0 51899
-/L 16587,17895 2 51944
-/l 7317,18300 2 51960
-a" 13173,18399 2 51933
-ho 13173,750,3165 0 51934
-vZ 17076,23955 2 51802
-IJ 19245,17895,330 2 51942
diff --git a/contrib/groff/devlj4/UB b/contrib/groff/devlj4/UB
deleted file mode 100644
index 5c1717f..0000000
--- a/contrib/groff/devlj4/UB
+++ /dev/null
@@ -1,829 +0,0 @@
-name UB
-spacewidth 8781
-pcltypeface 4148
-pclproportional 1
-pclweight 3
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3414
-P . -4878
-P , -4878
-V A -3414
-A V -3414
-T o -4389
-T r -4389
-T c -4389
-T e -4389
-T d -4389
-T s -4389
-T y -4389
-T a -4389
-T w -4389
-T u -4389
-T J -4389
-L T -4389
-L Y -3903
-Y o -3903
-Y e -3903
-Y a -3414
-Y J -3903
-A W -2439
-W A -2439
-T A -3414
-V o -2925
-V e -2925
-V a -2439
-Y A -3414
-F A -1950
-F . -3903
-F , -3903
-A T -3414
-A Y -3414
-v . -2439
-v , -2439
-y . -2439
-y , -2439
-T . -3903
-T , -3903
-L W -2439
-P A -2439
-V J -3414
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -1950
-W e -1950
-W a -1950
-W . -2925
-W , -2925
-r . -2439
-r , -2439
-w . -2439
-w , -2439
-Y u -2439
-A v -1950
-A y -1950
-A w -1950
-o . -1950
-o , -1950
-p . -1461
-p , -1461
-e . -1461
-e , -1461
-b . -1461
-b , -1461
-O T -1950
-O V -1461
-O Y -1950
-O . -2439
-O , -2439
-L y -1950
-L O -975
-L G -975
-L C -975
-L Q -975
-P J -1950
-V y -1461
-V u -1461
-V O -1461
-V G -1461
-V C -1461
-V Q -1461
-D T -2439
-D V -1461
-D Y -2439
-D . -2925
-D , -2925
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -486
-F e -486
-F a -486
-c . -1461
-c , -1461
-O A -1461
-O W -975
-L U -975
-R T -1461
-R V -1461
-R Y -1461
-R W -975
-G T -1461
-P o -1461
-P g -1461
-P e -1461
-P a -975
-C A -1461
-C . -1950
-C , -1950
-D A -1461
-D W -975
-B T -1461
-B Y -1461
-B . -1461
-B , -1461
-F J -975
-A O -1461
-A G -1461
-A C -1461
-A U -1461
-A Q -1461
-W r -975
-W y -975
-W u -975
-W O -975
-W G -975
-W C -975
-W J -2439
-W Q -975
-J A -1461
-J . -1950
-J , -1950
-U A -1461
-U . -2439
-U , -2439
-Q W -975
-f . -486
-f , -486
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -975
-L e -975
-L q -975
-G V -1461
-G Y -1461
-G W -975
-G . -1461
-G , -1461
-P T -975
-P V -975
-P Y -975
-C T -1461
-C V -1461
-C Y -1461
-D X -1461
-B V -1461
-B X -975
-B A -975
-B W -975
-S . -1950
-S , -1950
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -975
-o x -975
-o w -975
-h v -975
-h y -975
-n v -975
-n y -975
-m v -975
-m y -975
-g . -486
-g , -486
-p v -975
-p y -975
-p x -975
-c v -975
-c y -975
-c w -975
-v o -975
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -975
-e y -975
-b v -975
-b y -975
-b w -975
-s . -975
-s , -975
-y o -975
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-x o -975
-x c -975
-x e -975
-x d -975
-x a -486
-x q -975
-a v -975
-a y -975
-a w -975
-w o -975
-w g -975
-w c -975
-w d -975
-w a -975
-w q -975
-T S -1461
-L a -486
-L S -975
-G X -975
-G A -975
-P s -486
-P Z -975
-P X -975
-P W -975
-C X -1461
-C W -975
-C J -486
-V S -1461
-S T -1461
-S V -1461
-S Y -1461
-S X -1461
-S A -1461
-S W -975
-Y S -1461
-X a -486
-X u -975
-X S -975
-A t -486
-A c -1461
-A d -975
-A a -486
-A u -975
-A q -975
-A S -975
-W S -975
-K c -1461
-K u -975
-K S -975
-t . -486
-t , -486
-o f -486
-h w -975
-h . -486
-h , -486
-n w -975
-n . -486
-n , -486
-m w -975
-m . -486
-m , -486
-l . -486
-l , -486
-i . -486
-i , -486
-p f -486
-p w -975
-c f -486
-c x -975
-v e -975
-v s -486
-e f -486
-e x -975
-e w -975
-z . -486
-z , -486
-d . -486
-d , -486
-b f -486
-s v -486
-s y -486
-s f -486
-s x -486
-s w -486
-y e -975
-y s -486
-x s -486
-x . -486
-x , -486
-a . -486
-a , -486
-w e -975
-w s -486
-j . -486
-j , -486
-u . -486
-k o -975
-k c -975
-k e -975
-k d -975
-k a -486
-k q -975
-k . -486
-k , -486
-O Z -975
-O J -486
-H . -486
-H , -486
-N . -486
-N , -486
-M . -486
-M , -486
-L . -486
-L , -486
-R . -486
-R , -486
-G Z -975
-I . -486
-I , -486
-C Z -975
-E . -486
-E , -486
-Z o -975
-Z e -975
-Z d -975
-Z s -486
-Z y -975
-Z a -486
-Z w -975
-Z u -975
-Z O -975
-Z G -975
-Z C -975
-Z S -975
-Z Q -975
-Z . -486
-Z , -486
-D Z -975
-D J -486
-B Z -975
-B J -486
-S Z -975
-S J -486
-X . -486
-X , -486
-A s -486
-A . -486
-A , -486
-J J -486
-U J -486
-K a -486
-K . -486
-K , -486
-h f -486
-n f -486
-m f -486
-a f -486
-k s -486
-G J -486
-A f -486
-L cq -6342
-L ' -6342
-T char173 -4389
-T hy -4389
-T - -4389
-T en -4389
-T em -4389
-A cq -2439
-A ' -2439
-char173 T -4389
-hy T -4389
-- T -4389
-en T -4389
-em T -4389
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -1461
-p ' -1461
-c cq -975
-c ' -975
-e cq -1461
-e ' -1461
-b cq -1461
-b ' -1461
-a cq -975
-a ' -975
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-W char173 -975
-W hy -975
-W - -975
-W en -975
-W em -975
-cq d -2439
-' d -2439
-s cq -486
-s ' -486
-L char173 -975
-L hy -975
-L - -975
-L en -975
-L em -975
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -1950
-' s -1950
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-b f -486
-Z char173 -975
-Z hy -975
-Z - -975
-Z en -975
-Z em -975
-cq n -1461
-' n -1461
-cq m -1461
-' m -1461
-cq r -1461
-' r -1461
-cq v -1461
-' v -1461
-charset
-! 8781,18165 2 3617
-dq 13662,18135 2 3618
-" "
-sh 16587,18105 2 3619
-# "
-Do 16587,18750,645 2 3620
-$ "
-% 26346,18720,840 2 3621
-& 20004,18495 2 3622
-cq 8781,18135 2 51751
-' "
-( 8781,18135,2355 2 3624
-) 8781,18135,2355 2 3625
-* 16587,18495 2 3626
-+ 26346,14940 0 3627
-, 8781,3390,2355 0 3628
-char173 8781,7875 0 3629
-hy "
-- "
-. 8781,3390 0 3630
-sl 8781,18495,885 2 3631
-/ "
-0 16587,18465,360 2 3632
-1 16587,18105 2 3633
-2 16587,18465 2 3634
-3 16587,18465,360 2 3635
-4 16587,18105 2 3636
-5 16587,18105,360 2 3637
-6 16587,18465,360 2 3638
-7 16587,18105 2 3639
-8 16587,18465,360 2 3640
-9 16587,18465,360 2 3641
-: 8781,12627 0 3642
-; 8781,12627,2355 0 3643
-< 26346,16068 0 3644
-= 26346,10563 0 3645
-> 26346,16068 0 3646
-? 13662,18315 2 3647
-at 26346,21057,2679 2 3648
-@ "
-A 19515,18135 2 3649
-B 16587,18135 2 3650
-C 18540,18495,360 2 3651
-D 19029,18135 2 3652
-E 15126,18135 2 3653
-F 14637,18135 2 3654
-G 19515,18495,360 2 3655
-H 19029,18135 2 3656
-I 7317,18135 2 3657
-J 14637,18135,360 2 3658
-K 17565,18135 2 3659
-L 14148,18135 2 3660
-M 23907,18135 2 3661
-N 19029,18135 2 3662
-O 20004,18495,360 2 3663
-P 15612,18135 2 3664
-Q 20490,18495,360 2 3665
-R 17076,18135 2 3666
-S 17076,18495,360 2 3667
-T 16587,18135 2 3668
-U 19029,18135,360 2 3669
-V 19029,18135 2 3670
-W 26346,18135 2 3671
-X 19029,18135 2 3672
-Y 18051,18135 2 3673
-Z 16101,18135 2 3674
-lB 8781,18135,2355 2 3675
-[ "
-rs 8781,18495,885 2 3676
-\ "
-rB 8781,18135,2355 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 8781,18135 2 51808
-` "
-a 14148,12990,360 0 3681
-b 15126,18165,360 2 3682
-c 14148,12990,360 0 3683
-d 15126,18165,360 2 3684
-e 14148,12990,360 0 3685
-f 9759,18315 2 3686
-g 15126,12990,5313 1 3687
-h 15126,18165 2 3688
-i 6342,18165 2 3689
-j 6342,18165,4995 3 3690
-k 14148,18165 2 3691
-l 6342,18165 2 3692
-m 22932,12990 0 3693
-n 15126,12990 0 3694
-o 15126,12990,360 0 3695
-p 15126,12990,4680 0 3696
-q 15126,12990,4680 0 3697
-r 9270,13005 0 3698
-s 13173,12990,360 0 3699
-t 9759,16110,360 0 3700
-u 15126,12630,360 0 3701
-v 14637,12630 0 3702
-w 22932,12630 0 3703
-x 14637,12630 0 3704
-y 14637,12630,4680 0 3705
-z 12684,12630 0 3706
-lC 13173,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,20130,6075 3 3709
-} "
-ti 26346,9435 0 51876
-char192 19515,23130 2 3776
-`A "
-char194 19515,23130 2 3778
-^A "
-char200 15126,23130 2 3784
-`E "
-char202 15126,23130 2 3786
-^E "
-char203 15126,23040 2 3787
-:E "
-char206 7317,23130 2 3790
-^I "
-char207 7317,23040 2 3791
-:I "
-char180 16587,18090 2 3764
-aa "
-ga 16587,18090 2 3680
-a^ 16587,18090 2 3678
-^ "
-char168 16587,17910 2 3752
-ad "
-a~ 16587,17946 2 3710
-~ "
-char217 19029,23130,360 2 3801
-`U "
-char219 19029,23130,360 2 3803
-^U "
-char221 18051,23130 2 3805
-'Y "
-char253 14637,18090,4680 2 3837
-'y "
-char176 16587,18465 2 3760
-de "
-char199 18540,18495,5175 3 3783
-,C "
-char231 14148,12990,5160 1 3815
-,c "
-char209 19029,23130 2 3793
-~N "
-char241 15126,17946 2 3825
-~n "
-char161 8781,12645,5520 1 3745
-r! "
-char191 13662,12480,5835 1 3775
-r? "
-char164 16587,15834 0 3748
-Cs "
-char163 16587,18465 2 3747
-Po "
-char165 16587,18105 2 3749
-Ye "
-char167 16587,18495,360 2 3751
-sc "
-Fn 16587,18315 2 51871
-char162 16587,18750,645 2 3746
-ct "
-char226 14148,18090,360 2 3810
-^a "
-char234 14148,18090,360 2 3818
-^e "
-char244 15126,18090,360 2 3828
-^o "
-char251 15126,18090,360 2 3835
-^u "
-char225 14148,18090,360 2 3809
-'a "
-char233 14148,18090,360 2 3817
-'e "
-char243 15126,18090,360 2 3827
-'o "
-char250 15126,18090,360 2 3834
-'u "
-char224 14148,18090,360 2 3808
-`a "
-char232 14148,18090,360 2 3816
-`e "
-char242 15126,18090,360 2 3826
-`o "
-char249 15126,18090,360 2 3833
-`u "
-char228 14148,17910,360 2 3812
-:a "
-char235 14148,17910,360 2 3819
-:e "
-char246 15126,17910,360 2 3830
-:o "
-char252 15126,17910,360 2 3836
-:u "
-char197 19515,25830 2 3781
-oA "
-char238 6342,18090 2 3822
-^i "
-char216 20004,18495,366 2 3800
-/O "
-char198 25857,18135 2 3782
-AE "
-char229 14148,20100,360 2 3813
-oa "
-char237 6342,18090 2 3821
-'i "
-char248 15126,13047,360 0 3832
-/o "
-char230 22443,12990,360 0 3814
-ae "
-char196 19515,23040 2 3780
-:A "
-char236 6342,18090 2 3820
-`i "
-char214 20004,23040,360 2 3798
-:O "
-char220 19029,23040,360 2 3804
-:U "
-char201 15126,23130 2 3785
-'E "
-char239 6342,17910 2 3823
-:i "
-char223 16101,17790,360 2 3807
-ss "
-char212 20004,23130,360 2 3796
-^O "
-char193 19515,23130 2 3777
-'A "
-char195 19515,23130 2 3779
-~A "
-char227 14148,17946,360 2 3811
-~a "
-char208 19029,18135 2 3792
--D "
-char240 15126,18747,360 2 3824
-Sd "
-char205 7317,23130 2 3789
-'I "
-char204 7317,23130 2 3788
-`I "
-char211 20004,23130,360 2 3795
-'O "
-char210 20004,23130,360 2 3794
-`O "
-char213 20004,23130,360 2 3797
-~O "
-char245 15126,17946,360 2 3829
-~o "
-vS 17076,23130,360 2 51795
-vs 13173,18090,360 2 51827
-char218 19029,23130,360 2 3802
-'U "
-:Y 18051,23040 2 51801
-char255 14637,17910,4680 2 3839
-:y "
-char222 15612,18135 2 3806
-TP "
-char254 15126,18165,4680 2 3838
-Tp "
-char181 15612,12630,4680 0 3765
-char182 16590,19635,4200 2 3766
-ps "
-char190 26346,18465,900 2 3774
-34 "
-\- 26346,8445 0 51757
-char188 26346,18465,900 2 3772
-14 "
-char189 26346,18465,900 2 3773
-12 "
-char170 10734,18465 2 3754
-Of "
-char186 10734,18465 2 3770
-Om "
-char171 14637,11250 0 3755
-Fo "
-char187 14637,11250 0 3771
-Fc "
-char177 26346,14670 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 26346,11787 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,18465 2 3762
-S2 "
-char179 10245,18465 2 3763
-S3 "
-char184 16587,195033,5160 3 3768
-ac "
-char185 10245,18345 2 3769
-S1 "
-char215 26346,14154 0 3799
-char247 26346,12870 0 3831
-char183 8781,10740 0 3767
-pc "
-fm 8781,18054 2 51873
-sd 16587,18054 2 51874
-dg 16587,18135 2 51755
-tm 16128,17850 2 51796
-ah 16587,18090 2 51935
-ao 16587,20100 2 51930
-f/ 1464,18465,900 2 51759
-em 26346,7650 0 51789
-en 16587,7650 0 51790
-dd 16587,18135 2 51773
-.i 6342,12630 0 51957
-aq 8781,18135 2 3623
-bu 13173,14226 0 51889
-'C 18540,23130,360 2 20166
-'c 14148,18090,360 2 20198
-lq 13173,18135 2 51838
-rq 13173,18135 2 51746
-Bq 13173,3348,2292 0 51772
-vz 12684,18090 2 51834
-fi 16101,18315 2 51881
-fl 16101,18315 2 51882
-ff 18051,18315 2 51883
-Fi 24396,18315 2 51884
-Fl 24396,18315 2 51885
-ij 12684,18165,4995 3 51958
-bq 8781,3348,2307 0 51756
-%0 26346,18720,840 2 51901
-char175 16587,16950 2 3759
-a- "
-ab 16587,18147 2 51926
-a. 16587,18405 2 51927
-oe 23907,12990,360 0 51823
-OE 26346,18270,135 2 51791
-fo 9759,11277 0 51886
-fc 9759,11277 0 51887
-sq 19029,15624 0 51899
-/L 14148,18135 2 51944
-/l 7320,18165 2 51960
-a" 16587,18090 2 51933
-ho 16587,1197,4299 0 51934
-vZ 16101,23130 2 51802
-IJ 21954,18135,360 2 51942
diff --git a/contrib/groff/devlj4/UBI b/contrib/groff/devlj4/UBI
deleted file mode 100644
index 00ffcfc..0000000
--- a/contrib/groff/devlj4/UBI
+++ /dev/null
@@ -1,779 +0,0 @@
-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 -2925
-P . -4389
-P , -4389
-V A -2439
-A V -2925
-T o -3903
-T r -2925
-T c -3414
-T e -3414
-T d -3414
-T s -2925
-T y -3414
-T a -3414
-T w -3414
-T u -2925
-T J -2925
-L T -3414
-L Y -3903
-Y o -3414
-Y e -3414
-Y a -3414
-Y J -2925
-A W -2925
-W A -975
-T A -2925
-V o -1950
-V e -1950
-V a -1950
-Y A -2925
-F A -1950
-F . -1950
-F , -1950
-A T -3414
-A Y -3414
-v . -1950
-v , -1950
-y . -1461
-y , -1461
-T . -2925
-T , -2925
-L W -2925
-P A -1950
-V J -1950
-V . -2439
-V , -2439
-Y . -2925
-Y , -2925
-W o -1461
-W e -975
-W a -975
-W . -975
-W , -975
-r . -1461
-r , -1461
-w . -1461
-w , -1461
-Y u -2439
-A v -1461
-A y -1461
-A w -1461
-o . -975
-o , -975
-p . -975
-p , -975
-e . -975
-e , -975
-b . -975
-b , -975
-O T -2925
-O V -1950
-O Y -1950
-O . -1950
-O , -1950
-L y -1461
-L O -2925
-L G -2925
-L C -2925
-L Q -2925
-P J -1461
-V y -1461
-V u -975
-V O -975
-V G -975
-V C -975
-V Q -975
-D T -2925
-D V -1950
-D Y -1950
-D . -2439
-D , -2439
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -975
-F e -975
-F a -975
-c . -975
-c , -975
-O A -975
-O W -1461
-L U -2439
-R T -975
-R V -975
-R Y -975
-R W -975
-G T -2439
-P o -975
-P g -486
-P e -975
-P a -975
-C A -975
-C . -1461
-C , -1461
-D A -1461
-D W -1461
-B T -2439
-B Y -1950
-B . -486
-B , -486
-F J -975
-A O -1950
-A G -1950
-A C -1950
-A U -1950
-A Q -1950
-W r -486
-W y -975
-W u -486
-W O -486
-W G -486
-W C -486
-W J -975
-W Q -486
-U A -975
-U . -1950
-U , -1950
-Q W -1461
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -1461
-L e -1461
-L q -1461
-G V -1950
-G Y -1950
-G W -1461
-P T -1950
-P V -1950
-P Y -1950
-C T -1950
-C V -1950
-C Y -1950
-D X -1461
-B V -1950
-B X -486
-B A -486
-B W -1461
-S . -975
-S , -975
-F y -486
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -1461
-o x -975
-o w -1461
-h v -486
-h y -975
-n v -486
-n y -975
-m v -486
-m y -975
-p v -486
-p y -975
-p x -975
-c v -486
-c y -975
-c w -975
-v o -975
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -975
-b v -975
-b y -1461
-b w -1461
-y o -975
-y g -486
-y c -975
-y d -975
-y a -975
-y q -975
-x o -975
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -486
-a y -975
-a w -975
-w o -975
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T S -975
-L a -975
-L S -1461
-R o -486
-R y -486
-P Z -1461
-P X -1461
-P W -1461
-C X -1461
-C W -1461
-V S -975
-S T -1461
-S V -1461
-S Y -1461
-S X -975
-S A -975
-S W -1461
-Y S -975
-X a -975
-X u -975
-X S -975
-A t -1461
-A c -1461
-A d -975
-A a -975
-A u -975
-A q -1461
-A S -1461
-W S -486
-J y -486
-K c -1461
-K u -975
-K S -975
-o f -486
-h w -975
-n w -975
-m w -975
-r o -486
-p w -975
-c x -975
-v e -486
-e x -975
-e w -975
-b f -486
-s v -486
-s y -975
-s w -975
-y e -975
-f o -486
-w e -486
-k o -975
-k c -486
-k v -486
-k e -486
-k d -486
-k y -486
-k a -486
-k w -486
-k q -486
-O Z -486
-P y -486
-C Z -486
-E o -486
-E v -486
-E y -486
-E w -486
-Z o -975
-Z e -975
-Z d -975
-Z y -486
-Z a -975
-Z w -486
-D Z -975
-D J -486
-B Z -486
-S Z -486
-A s -486
-J o -486
-K a -975
-t o -486
-o t -486
-o g -486
-o z -486
-o j -486
-g o -486
-v y -486
-v w -486
-z o -486
-b t -486
-b g -486
-b z -486
-b j -486
-y v -486
-y y -486
-y w -486
-x v -486
-x y -486
-x w -486
-w v -486
-w y -486
-w w -486
-C o -486
-C y -486
-B o -486
-B y -486
-U o -486
-U v -486
-U y -486
-U w -486
-L cq -6342
-L ' -6342
-T char173 -2925
-T hy -2925
-T - -2925
-T en -2925
-T em -2925
-A cq -2439
-A ' -2439
-char173 T -3414
-hy T -3414
-- T -3414
-en T -3414
-em T -3414
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -975
-p ' -975
-c cq -1461
-c ' -1461
-e cq -1461
-e ' -1461
-b cq -1461
-b ' -1461
-a cq -1461
-a ' -1461
-V char173 -975
-V hy -975
-V - -975
-V en -975
-V em -975
-h cq -1461
-h ' -1461
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -2439
-' d -2439
-s cq -486
-s ' -486
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1950
-A hy -1950
-A - -1950
-A en -1950
-A em -1950
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -1461
-' s -1461
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-b f -486
-cq n -1461
-' n -1461
-cq m -1461
-' m -1461
-cq r -1461
-' r -1461
-cq v -1950
-' v -1950
-charset
-! 8781,18165,0,2643,33,1012 2 3617
-dq 14148,18135,0,1890,-3297,1012 2 3618
-" "
-sh 16587,18105,0,1677,-99,1012 2 3619
-# "
-Do 16587,18738,630,495,-1428,495 2 3620
-$ "
-% 26346,18720,840,0,-2070 2 3621
-& 20004,18495,360,54,-231,54 2 3622
-cq 8781,18135,0,3414,-2601,1012 2 51751
-' "
-( 8781,18135,2445,3198,-834,1012 2 3624
-) 8781,18135,2445,180,2184,180 2 3625
-* 16587,18582,0,0,-3291 2 3626
-+ 26346,14940,0,0,-4728 0 3627
-, 8781,3255,2580,0,1794 0 3628
-char173 8781,7737,0,624,270,624 0 3629
-hy "
-- "
-. 8781,3255,0,0,453 0 3630
-sl 8781,18135,1470,4308,2982,1012 2 3631
-/ "
-0 16587,18465,360,1398,-357,1012 2 3632
-1 16587,18105,0,0,-3771 2 3633
-2 16587,18465,0,984,414,984 2 3634
-3 16587,18465,360,1794,363,1012 2 3635
-4 16587,18105,0,1389,1245,1012 2 3636
-5 16587,18105,360,2424,-39,1012 2 3637
-6 16587,18465,360,2316,-345,1012 2 3638
-7 16587,18105,0,1770,-1455,1012 2 3639
-8 16587,18465,360,1776,435,1012 2 3640
-9 16587,18465,360,1464,369,1012 2 3641
-: 8781,12612,0,540,453,540 0 3642
-; 8781,12612,2580,732,1794,732 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 26346,10563,0,0,-5079 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 13662,18315,0,1908,-951,1012 2 3647
-at 26346,21057,2679,1164,-888,1012 2 3648
-@ "
-A 19515,18135,0,0,2535 2 3649
-B 16587,18135,0,1848,1233,1012 2 3650
-C 18540,18495,360,1737,-633,1012 2 3651
-D 19029,18135,0,924,1227,924 2 3652
-E 15126,18135,0,3285,1188,1012 2 3653
-F 14637,18135,0,3723,1200,1012 2 3654
-G 19515,18495,360,1380,-786,1012 2 3655
-H 19029,18135,0,2856,1161,1012 2 3656
-I 7317,18135,0,3219,1521,1012 2 3657
-J 14637,18135,360,3054,1341,1012 2 3658
-K 17565,18135,0,3273,534,1012 2 3659
-L 14148,18135,0,0,1185 2 3660
-M 23907,18135,0,2730,1281,1012 2 3661
-N 19029,18135,0,2883,1248,1012 2 3662
-O 20004,18495,360,969,-705,969 2 3663
-P 15612,18135,0,2871,1203,1012 2 3664
-Q 20490,18495,360,531,-714,531 2 3665
-R 17076,18135,0,2247,1200,1012 2 3666
-S 17076,18495,360,1797,117,1012 2 3667
-T 16587,18135,0,3990,-2166,1012 2 3668
-U 19029,18135,360,2898,-384,1012 2 3669
-V 19029,18135,0,4005,-2604,1012 2 3670
-W 26346,18135,0,3900,-2478,1012 2 3671
-X 19029,18135,0,3222,1893,1012 2 3672
-Y 18051,18135,0,3942,-2616,1012 2 3673
-Z 16101,18135,0,3348,1491,1012 2 3674
-lB 8781,18135,2445,4068,1977,1012 2 3675
-[ "
-rs 8781,18135,1470,540,-1632,540 2 3676
-\ "
-rB 8781,18135,2445,2919,3126,1012 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,1012 3 3679
-oq 8781,18135,0,2880,-2067,1012 2 51808
-` "
-a 14148,12990,360,651,978,651 0 3681
-b 15126,18165,360,498,1566,498 2 3682
-c 14148,12990,360,903,411,903 0 3683
-d 15126,18165,360,3291,477,1012 2 3684
-e 14148,12990,360,924,600,924 0 3685
-f 9759,18315,0,4158,297,1012 2 3686
-g 15126,12990,5187,1683,2037,1012 1 3687
-h 15126,18165,0,684,1527,684 2 3688
-i 6342,18165,0,3591,1872,1012 2 3689
-j 6342,18165,4995,3681,5787,1012 3 3690
-k 14148,18165,0,2109,1359,1012 2 3691
-l 6342,18165,0,3579,1839,1012 2 3692
-m 22932,12990,0,609,1551,609 0 3693
-n 15126,12990,0,729,1482,729 0 3694
-o 15126,12990,360,492,465,492 0 3695
-p 15126,12990,4680,531,2868,531 1 3696
-q 15126,12990,4680,1671,471,1012 1 3697
-r 9270,12990,0,2751,1533,1012 0 3698
-s 13173,12990,360,984,1026,984 0 3699
-t 9759,16146,360,2166,-522,1012 0 3700
-u 15126,12630,360,1557,666,1012 0 3701
-v 14637,12630,0,2502,-837,1012 0 3702
-w 22932,12630,0,2004,-1311,1012 0 3703
-x 14637,12630,0,2088,2364,1012 0 3704
-y 14637,12630,4680,2472,-528,1012 1 3705
-z 12684,12630,0,1701,1482,1012 0 3706
-lC 13173,20130,6075,3600,-1356,1012 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 13173,20130,6075,0,3360 3 3709
-} "
-ti 26346,9435,0,0,-4029 0 51876
-char192 19515,23220,0,0,2535 2 3776
-`A "
-char194 19515,23220,0,0,2535 2 3778
-^A "
-char200 15126,23220,0,3285,1188,1012 2 3784
-`E "
-char202 15126,23220,0,3285,1188,1012 2 3786
-^E "
-char203 15126,22830,0,3285,1188,1012 2 3787
-:E "
-char206 7317,23220,0,5631,1521,1012 2 3790
-^I "
-char207 7317,22830,0,6792,1521,1012 2 3791
-:I "
-char180 16587,18105,0,360,-7359,360 2 3764
-aa "
-ga 16587,18105,0,0,-6009 2 3680
-a^ 16587,18105,0,0,-4518 2 3678
-^ "
-char168 16587,18180,0,693,-5457,693 2 3752
-ad "
-a~ 16587,17994,0,771,-5169,771 2 3710
-~ "
-char217 19029,23220,360,2898,-384,1012 2 3801
-`U "
-char219 19029,23220,360,2898,-384,1012 2 3803
-^U "
-char221 18051,23220,0,3942,-2616,1012 2 3805
-'Y "
-char253 14637,18105,4680,2472,-528,1012 3 3837
-'y "
-char176 16587,18465,0,0,-3642 2 3760
-de "
-char199 18540,18495,5409,1737,-633,1012 3 3783
-,C "
-char231 14148,12990,5046,903,411,903 1 3815
-,c "
-char209 19029,23124,0,2883,1248,1012 2 3793
-~N "
-char241 15126,17994,0,1503,1482,1012 2 3825
-~n "
-char161 8781,12651,5514,432,2244,432 1 3745
-r! "
-char191 13662,12486,5829,0,1398 1 3775
-r? "
-char164 16587,15834,0,753,-774,753 0 3748
-Cs "
-char163 16587,18465,0,2046,663,1012 2 3747
-Po "
-char165 16587,18105,0,4872,-30,1012 2 3749
-Ye "
-char167 16587,18495,360,0,-2661 2 3751
-sc "
-Fn 16587,18315,0,1008,-3099,1008 2 51871
-char162 16587,18750,630,678,-1458,678 2 3746
-ct "
-char226 14148,18105,360,651,978,651 2 3810
-^a "
-char234 14148,18105,360,924,600,924 2 3818
-^e "
-char244 15126,18105,360,492,465,492 2 3828
-^o "
-char251 15126,18105,360,1557,666,1012 2 3835
-^u "
-char225 14148,18105,360,1581,978,1012 2 3809
-'a "
-char233 14148,18105,360,1581,600,1012 2 3817
-'e "
-char243 15126,18105,360,1092,465,1012 2 3827
-'o "
-char250 15126,18105,360,1557,666,1012 2 3834
-'u "
-char224 14148,18105,360,651,978,651 2 3808
-`a "
-char232 14148,18105,360,924,600,924 2 3816
-`e "
-char242 15126,18105,360,492,465,492 2 3826
-`o "
-char249 15126,18105,360,1557,666,1012 2 3833
-`u "
-char228 14148,18180,360,1914,978,1012 2 3812
-:a "
-char235 14148,18180,360,1914,600,1012 2 3819
-:e "
-char246 15126,18180,360,1425,465,1012 2 3830
-:o "
-char252 15126,18180,360,1557,666,1012 2 3836
-:u "
-char197 19515,25830,0,0,2535 2 3781
-oA "
-char238 6342,18105,0,4479,1860,1012 2 3822
-^i "
-char216 20004,18495,360,2802,1200,1012 2 3800
-/O "
-char198 25857,18135,0,3294,2781,1012 2 3782
-AE "
-char229 14148,20100,360,651,978,651 2 3813
-oa "
-char237 6342,18105,0,5484,1860,1012 2 3821
-'i "
-char248 15126,12990,360,1764,1686,1012 0 3832
-/o "
-char230 22443,12990,360,840,906,840 0 3814
-ae "
-char196 19515,22830,0,693,2535,693 2 3780
-:A "
-char236 6342,18105,0,2136,1860,1012 2 3820
-`i "
-char214 20004,22830,360,969,-705,969 2 3798
-:O "
-char220 19029,22830,360,2898,-384,1012 2 3804
-:U "
-char201 15126,23220,0,3285,1188,1012 2 3785
-'E "
-char239 6342,18180,0,5817,1860,1012 2 3823
-:i "
-char223 16101,18315,360,795,1515,795 2 3807
-ss "
-char212 20004,23220,360,969,-705,969 2 3796
-^O "
-char193 19515,23220,0,0,2535 2 3777
-'A "
-char195 19515,23124,0,1020,2535,1012 2 3779
-~A "
-char227 14148,17994,360,1992,978,1012 2 3811
-~a "
-char208 19029,18135,0,924,1227,924 2 3792
--D "
-char240 15126,18693,360,492,465,492 2 3824
-Sd "
-char205 7317,23220,0,5907,1521,1012 2 3789
-'I "
-char204 7317,23220,0,3219,1521,1012 2 3788
-`I "
-char211 20004,23220,360,969,-705,969 2 3795
-'O "
-char210 20004,23220,360,969,-705,969 2 3794
-`O "
-char213 20004,23124,360,969,-705,969 2 3797
-~O "
-char245 15126,17994,360,1503,465,1012 2 3829
-~o "
-vS 17076,23220,360,2220,117,1012 2 51795
-vs 13173,18105,360,2985,1026,1012 2 51827
-char218 19029,23220,360,2898,-384,1012 2 3802
-'U "
-:Y 18051,22830,0,3942,-2616,1012 2 51801
-char255 14637,18180,4680,2472,-528,1012 3 3839
-:y "
-char222 15612,18135,0,1857,1209,1012 2 3806
-TP "
-char254 15126,18165,4680,516,2856,516 3 3838
-Tp "
-char181 15612,12630,4680,1422,2907,1012 1 3765
-char182 16590,19635,4200,0,-2529 2 3766
-ps "
-char190 26346,18465,990,0,-2625 2 3774
-34 "
-\- 26346,8445,0,0,-4746 0 51757
-char188 26346,18465,990,0,-2682 2 3772
-14 "
-char189 26346,18465,990,0,-3168 2 3773
-12 "
-char170 10734,18465,0,2211,-1464,1012 2 3754
-Of "
-char186 10734,18465,0,2520,-1473,1012 2 3770
-Om "
-char171 14637,11115,0,1530,180,1012 0 3755
-Fo "
-char187 14637,11115,0,243,1467,243 0 3771
-Fc "
-char177 26346,14670,0,0,-4695 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4881,-3090,1012 2 3753
-co "
-char172 26346,11787,0,0,-4329 0 3756
-no "
-char174 13173,19635,0,4881,-3090,1012 2 3758
-rg "
-char178 10245,18465,0,2217,-933,1012 2 3762
-S2 "
-char179 10245,18465,0,2439,-957,1012 2 3763
-S3 "
-char184 16587,195102,5046,0,-1809 3 3768
-ac "
-char185 10245,18345,0,1083,-2880,1012 2 3769
-S1 "
-char215 26346,14154,0,0,-5958 0 3799
-char247 26346,12870,0,0,-4767 0 3831
-char183 8781,10692,0,276,-2055,276 0 3767
-pc "
-fm 8781,18105,0,2145,-2916,1012 2 51873
-sd 16587,18105,0,0,-2916 2 51874
-dg 16587,18135,0,0,-2718 2 51755
-tm 16101,17850,0,2421,-2958,1012 2 51796
-ah 16587,18105,0,1278,-6441,1012 2 51935
-ao 16587,20100,0,0,-7413 2 51930
-f/ 2439,18465,990,9276,7884,1012 2 51759
-em 26346,7620,0,0,-2226 0 51789
-en 16587,7620,0,72,-372,72 0 51790
-dd 16587,18135,0,0,-2718 2 51773
-.i 6342,12630,0,1857,1860,1012 0 51957
-aq 8781,18135,0,2100,-3297,1012 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 18540,23220,360,1737,-633,1012 2 20166
-'c 14148,18105,360,1581,411,1012 2 20198
-lq 13173,18135,0,3480,-1524,1012 2 51838
-rq 13173,18135,0,4002,-2046,1012 2 51746
-Bq 13173,3234,2241,0,2283 0 51772
-vz 12684,18105,0,3231,1482,1012 2 51834
-fi 16101,18315,0,3693,-33,1012 2 51881
-fl 16101,18315,0,3678,-132,1012 2 51882
-ff 18051,18315,0,4557,-114,1012 2 51883
-Fi 24396,18315,0,3795,-126,1012 2 51884
-Fl 24396,18315,0,3666,-42,1012 2 51885
-ij 12684,18165,4995,3681,1872,1012 3 51958
-bq 8781,3234,2241,0,1878 0 51756
-%0 26346,18720,840,696,51,696 2 51901
-char175 16587,17778,0,102,-5931,102 2 3759
-a- "
-ab 16587,18147,0,771,-5874,771 2 51926
-a. 16587,18222,0,0,-7887 2 51927
-oe 23907,12990,360,525,258,525 0 51823
-OE 26346,18270,135,3186,-819,1012 2 51791
-fo 9759,11142,0,1299,-1029,1012 0 51886
-fc 9759,11142,0,27,243,27 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 14148,18135,0,0,1692 2 51944
-/l 7320,18165,0,3519,1320,1012 2 51960
-a" 16587,18105,0,3672,-5376,1012 2 51933
-ho 16587,279,4248,0,-6180 0 51934
-vZ 16101,23220,0,3348,1491,1012 2 51802
-IJ 21954,18135,360,3054,1521,1012 2 51942
diff --git a/contrib/groff/devlj4/UCB b/contrib/groff/devlj4/UCB
deleted file mode 100644
index 2864278..0000000
--- a/contrib/groff/devlj4/UCB
+++ /dev/null
@@ -1,790 +0,0 @@
-name UCB
-spacewidth 5856
-pcltypeface 4148
-pclproportional 1
-pclweight 3
-pclstyle 4
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2925
-P . -4389
-P , -4389
-V A -1950
-A V -1950
-T o -2925
-T r -2925
-T c -2925
-T e -2925
-T d -2925
-T s -2925
-T y -2925
-T a -2925
-T w -2925
-T u -2925
-T J -3414
-L T -2925
-L Y -2925
-Y o -2925
-Y e -2925
-Y a -2439
-Y J -3414
-A W -1461
-W A -1461
-T A -2439
-V o -1461
-V e -1461
-V a -1461
-Y A -2439
-F A -1461
-F . -2925
-F , -2925
-A T -2439
-A Y -2439
-v . -1461
-v , -1461
-y . -1461
-y , -1461
-T . -2925
-T , -2925
-L W -1461
-P A -1461
-V J -1950
-V . -2925
-V , -2925
-Y . -2925
-Y , -2925
-W o -975
-W e -975
-W a -975
-W . -1461
-W , -1461
-r . -1461
-r , -1461
-w . -975
-w , -975
-Y u -1461
-A v -1461
-A y -975
-A w -975
-o . -1461
-o , -1461
-p . -975
-p , -975
-e . -975
-e , -975
-b . -975
-b , -975
-O T -1461
-O V -486
-O Y -1461
-O . -1461
-O , -1461
-L y -975
-L O -1461
-L G -1950
-L C -1461
-L Q -1461
-P J -1950
-V y -486
-V u -486
-V O -486
-V G -486
-V C -486
-V Q -486
-D T -1950
-D V -486
-D Y -1461
-D . -1950
-D , -1950
-Y O -1461
-Y G -1461
-Y C -1461
-Y Q -1461
-F o -975
-F e -975
-F a -975
-c . -975
-c , -975
-O A -975
-O W -486
-L U -1461
-R T -975
-R V -486
-R Y -975
-R W -486
-G T -1461
-P o -1461
-P g -1461
-P e -1461
-P a -975
-C A -975
-C . -1461
-C , -1461
-D A -975
-D W -486
-B T -1461
-B Y -1461
-B . -1461
-B , -1461
-F J -1461
-A O -975
-A G -975
-A C -975
-A U -975
-A Q -975
-W r -486
-W y -486
-W u -486
-W O -486
-W G -486
-W C -486
-W J -1461
-W Q -486
-J A -975
-J . -1461
-J , -1461
-U A -975
-U . -1461
-U , -1461
-Q W -486
-f . -486
-f , -486
-T O -1461
-T G -1950
-T C -1461
-T Q -1461
-O X -1461
-L o -1461
-L e -1461
-L q -975
-G V -486
-G Y -1461
-G W -486
-P T -975
-P V -486
-P Y -975
-C T -1461
-C V -486
-C Y -1461
-D X -1461
-B V -486
-B X -1461
-B A -975
-B W -486
-S . -975
-S , -975
-X o -1461
-X e -1461
-X y -975
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -975
-A e -975
-K o -1461
-K e -1461
-K y -975
-K w -975
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -486
-o y -486
-o x -486
-o w -486
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-r g -486
-p v -486
-p y -486
-p x -486
-c v -486
-c y -486
-c w -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -486
-b y -486
-b w -486
-s . -486
-s , -486
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-a v -486
-a y -486
-a w -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T S -975
-L a -486
-L S -975
-P s -975
-P Z -975
-P X -975
-P W -486
-C X -1461
-C W -486
-C J -486
-V S -486
-S T -975
-S V -486
-S Y -975
-S X -975
-S A -975
-S W -486
-Y S -975
-X a -486
-X u -975
-X S -975
-A t -975
-A c -975
-A d -975
-A a -486
-A u -975
-A q -975
-A S -975
-W S -486
-K c -1461
-K u -975
-K S -975
-o f -486
-h w -486
-n w -486
-m w -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-p f -486
-p w -486
-c f -486
-c x -486
-v e -486
-v s -486
-e f -486
-e x -486
-e w -486
-b f -486
-s v -486
-s y -486
-s f -486
-s x -486
-s w -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-w e -486
-w s -486
-k o -975
-k c -975
-k e -975
-k d -975
-k a -486
-k q -975
-O Z -486
-O J -486
-L J -486
-C Z -486
-E J -486
-Z o -1461
-Z e -1461
-Z d -975
-Z s -975
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z J -486
-Z Q -486
-D Z -486
-D J -486
-B Z -486
-B J -486
-S Z -486
-S J -486
-X J -486
-A s -975
-A J -486
-J J -486
-U J -486
-K a -486
-K J -486
-h f -486
-n f -486
-m f -486
-r s -486
-a f -486
-k s -975
-R J -486
-G J -486
-A f -486
-L cq -4389
-L ' -4389
-T char173 -2925
-T hy -2925
-T - -2925
-T en -2925
-T em -2925
-A cq -1461
-A ' -1461
-char173 T -2925
-hy T -2925
-- T -2925
-en T -2925
-em T -2925
-Y char173 -1461
-Y hy -1461
-Y - -1461
-Y en -1461
-Y em -1461
-p cq -1461
-p ' -1461
-c cq -975
-c ' -975
-e cq -1461
-e ' -1461
-b cq -1461
-b ' -1461
-a cq -975
-a ' -975
-V char173 -486
-V hy -486
-V - -486
-V en -486
-V em -486
-h cq -975
-h ' -975
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -975
-' d -975
-s cq -975
-s ' -975
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -975
-A hy -975
-A - -975
-A en -975
-A em -975
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -975
-' s -975
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -975
-hy A -975
-- A -975
-en X -1461
-en A -975
-em X -1461
-b f -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-charset
-! 7806,18135 2 3617
-dq 10734,18135 2 3618
-" "
-sh 12684,18360,825 2 3619
-# "
-Do 12684,18705,765 2 3620
-$ "
-% 17565,18765,900 2 3621
-& 16587,18390,255 2 3622
-cq 5856,18135 2 51751
-' "
-( 5856,18135,2430 2 3624
-) 5856,18135,2430 2 3625
-* 12684,18495 2 3626
-+ 17565,12810 0 3627
-, 5856,3465,2430 0 3628
-char173 5856,7710 0 3629
-hy "
-- "
-. 5856,3330 0 3630
-sl 5856,18165,2430 2 3631
-/ "
-0 12684,18360,255 2 3632
-1 12684,18105 2 3633
-2 12684,18360 2 3634
-3 12684,18360,255 2 3635
-4 12684,18105 2 3636
-5 12684,18105,255 2 3637
-6 12684,18360,255 2 3638
-7 12684,18105 2 3639
-8 12684,18360,255 2 3640
-9 12684,18360,255 2 3641
-: 5856,12378 0 3642
-; 5856,12378,2430 0 3643
-< 26346,16068 0 3644
-= 17565,9792 0 3645
-> 26346,16068 0 3646
-? 11709,18390 2 3647
-at 17565,18357,3219 2 3648
-@ "
-A 14637,18135 2 3649
-B 14148,18135 2 3650
-C 13662,18390,255 2 3651
-D 14637,18135 2 3652
-E 12198,18135 2 3653
-F 11709,18135 2 3654
-G 14637,18390,255 2 3655
-H 14637,18135 2 3656
-I 6831,18135 2 3657
-J 12684,18135,255 2 3658
-K 14148,18135 2 3659
-L 11220,18135 2 3660
-M 19515,18135 2 3661
-N 15126,18135 2 3662
-O 14637,18390,255 2 3663
-P 13662,18135 2 3664
-Q 15126,18390,255 2 3665
-R 13662,18135 2 3666
-S 14148,18390,255 2 3667
-T 13173,18135 2 3668
-U 14637,18135,255 2 3669
-V 13662,18135 2 3670
-W 20490,18135 2 3671
-X 14637,18135 2 3672
-Y 13662,18135 2 3673
-Z 12198,18135 2 3674
-lB 5856,18135,2430 2 3675
-[ "
-rs 5856,18165,2430 2 3676
-\ "
-rB 5856,18135,2430 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 5856,18135 2 51808
-` "
-a 11709,12885,255 0 3681
-b 11709,18165,255 2 3682
-c 10734,12885,255 0 3683
-d 11709,18165,255 2 3684
-e 11220,12885,255 0 3685
-f 8295,18315 2 3686
-g 11709,12885,4995 1 3687
-h 12198,18165 2 3688
-i 6342,18165 2 3689
-j 6342,18165,4995 3 3690
-k 11709,18165 2 3691
-l 6342,18165 2 3692
-m 17565,12885 0 3693
-n 12198,12885 0 3694
-o 11709,12885,255 0 3695
-p 11709,12885,4995 1 3696
-q 11709,12885,4995 1 3697
-r 8781,12885 0 3698
-s 10734,12885,255 0 3699
-t 8295,16086,255 0 3700
-u 12198,12630,255 0 3701
-v 11709,12630 0 3702
-w 18540,12630 0 3703
-x 11709,12630 0 3704
-y 11709,12630,4680 1 3705
-z 9759,12630 0 3706
-lC 13173,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 13173,20130,6075 3 3709
-} "
-ti 26346,9435 0 51876
-char192 14637,23130 2 3776
-`A "
-char194 14637,23130 2 3778
-^A "
-char200 12198,23130 2 3784
-`E "
-char202 12198,23130 2 3786
-^E "
-char203 12198,22815 2 3787
-:E "
-char206 6831,23130 2 3790
-^I "
-char207 6831,22815 2 3791
-:I "
-char180 12684,18285 2 3764
-aa "
-ga 12684,18285 2 3680
-a^ 12684,18285 2 3678
-^ "
-char168 12684,18225 2 3752
-ad "
-a~ 12684,17874 2 3710
-~ "
-char217 14637,23130,255 2 3801
-`U "
-char219 14637,23130,255 2 3803
-^U "
-char221 13662,23130 2 3805
-'Y "
-char253 11709,18285,4680 3 3837
-'y "
-char176 12684,18360 2 3760
-de "
-char199 13662,18390,5580 3 3783
-,C "
-char231 10734,12885,5190 1 3815
-,c "
-char209 15126,23031 2 3793
-~N "
-char241 12198,17874 2 3825
-~n "
-char161 7806,12630,5505 1 3745
-r! "
-char191 11709,12576,5814 1 3775
-r? "
-char164 12684,15834 0 3748
-Cs "
-char163 12684,18360 2 3747
-Po "
-char165 12684,18105 2 3749
-Ye "
-char167 12684,18495,600 2 3751
-sc "
-Fn 12684,18315 2 51871
-char162 12684,18705,765 2 3746
-ct "
-char226 11709,18285,255 2 3810
-^a "
-char234 11220,18285,255 2 3818
-^e "
-char244 11709,18285,255 2 3828
-^o "
-char251 12198,18285,255 2 3835
-^u "
-char225 11709,18285,255 2 3809
-'a "
-char233 11220,18285,255 2 3817
-'e "
-char243 11709,18285,255 2 3827
-'o "
-char250 12198,18285,255 2 3834
-'u "
-char224 11709,18285,255 2 3808
-`a "
-char232 11220,18285,255 2 3816
-`e "
-char242 11709,18285,255 2 3826
-`o "
-char249 12198,18285,255 2 3833
-`u "
-char228 11709,18225,255 2 3812
-:a "
-char235 11220,18225,255 2 3819
-:e "
-char246 11709,18225,255 2 3830
-:o "
-char252 12198,18225,255 2 3836
-:u "
-char197 14637,25080 2 3781
-oA "
-char238 6342,18285 2 3822
-^i "
-char216 14637,19890,2019 2 3800
-/O "
-char198 20490,18135 2 3782
-AE "
-char229 11709,19455,255 2 3813
-oa "
-char237 6342,18285 2 3821
-'i "
-char248 11709,14256,2172 0 3832
-/o "
-char230 17565,12885,255 0 3814
-ae "
-char196 14637,22815 2 3780
-:A "
-char236 6342,18285 2 3820
-`i "
-char214 14637,22815,255 2 3798
-:O "
-char220 14637,22815,255 2 3804
-:U "
-char201 12198,23130 2 3785
-'E "
-char239 6342,18225 2 3823
-:i "
-char223 13173,18315,255 2 3807
-ss "
-char212 14637,23130,255 2 3796
-^O "
-char193 14637,23130 2 3777
-'A "
-char195 14637,23031 2 3779
-~A "
-char227 11709,17874,255 2 3811
-~a "
-char208 14637,18135 2 3792
--D "
-char240 11709,18573,255 2 3824
-Sd "
-char205 6831,23130 2 3789
-'I "
-char204 6831,23130 2 3788
-`I "
-char211 14637,23130,255 2 3795
-'O "
-char210 14637,23130,255 2 3794
-`O "
-char213 14637,23031,255 2 3797
-~O "
-char245 11709,17874,255 2 3829
-~o "
-vS 14148,23130,255 2 51795
-vs 10734,18285,255 2 51827
-char218 14637,23130,255 2 3802
-'U "
-:Y 13662,22815 2 51801
-char255 11709,18225,4680 3 3839
-:y "
-char222 13662,18135 2 3806
-TP "
-char254 11709,18165,4995 3 3838
-Tp "
-char181 15612,12630,4680 1 3765
-char182 12684,19635,4200 2 3766
-ps "
-char190 17565,18765,900 2 3774
-34 "
-\- 17565,7740 0 51757
-char188 17565,18765,900 2 3772
-14 "
-char189 17565,18765,900 2 3773
-12 "
-char170 10734,18360 2 3754
-Of "
-char186 10734,18360 2 3770
-Om "
-char171 11709,11070 0 3755
-Fo "
-char187 11709,11070 0 3771
-Fc "
-char177 17565,12810,2520 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 17565,10320 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 8295,18465 2 3762
-S2 "
-char179 8295,18465 2 3763
-S3 "
-char184 12684,195258,5190 3 3768
-ac "
-char185 8295,18345 2 3769
-S1 "
-char215 17565,12345 0 3799
-char247 17565,12015 0 3831
-char183 5856,10251 0 3767
-pc "
-fm 5856,18105 2 51873
-sd 12684,18105 2 51874
-dg 12684,18135 2 51755
-tm 16101,17850 2 51796
-ah 12684,18285 2 51935
-ao 12684,19455 2 51930
-f/ 2928,18765,900 2 51759
-em 17565,7530 0 51789
-en 12684,7530 0 51790
-dd 12684,18135 2 51773
-.i 6342,12630 0 51957
-aq 5856,18135 2 3623
-bu 13173,14226 0 51889
-'C 13662,23130,255 2 20166
-'c 10734,18285,255 2 20198
-lq 10245,18135 2 51838
-rq 10245,18135 2 51746
-Bq 10245,3513,2382 0 51772
-vz 9759,18285 2 51834
-fi 14148,18315 2 51881
-fl 14148,18315 2 51882
-ff 15126,18315 2 51883
-Fi 20979,18315 2 51884
-Fl 20979,18315 2 51885
-ij 12684,18165,4995 3 51958
-bq 5856,3513,2382 0 51756
-%0 26346,18765,900 2 51901
-char175 12684,17595 2 3759
-a- "
-ab 12684,18285 2 51926
-a. 12684,18345 2 51927
-oe 17565,12885,255 0 51823
-OE 20490,18270,135 2 51791
-fo 6342,11070 0 51886
-fc 6342,11070 0 51887
-sq 19029,15624 0 51899
-/L 11709,18135 2 51944
-/l 6831,18165 2 51960
-a" 12684,18285 2 51933
-ho 12684,300,4335 0 51934
-vZ 12198,23130 2 51802
-IJ 18540,18135,255 2 51942
diff --git a/contrib/groff/devlj4/UCBI b/contrib/groff/devlj4/UCBI
deleted file mode 100644
index d1876c1..0000000
--- a/contrib/groff/devlj4/UCBI
+++ /dev/null
@@ -1,698 +0,0 @@
-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 -2439
-P . -4389
-P , -4389
-V A -1461
-A V -1950
-T o -2439
-T r -1950
-T c -2439
-T e -2439
-T d -2439
-T s -1950
-T y -1950
-T a -2439
-T w -1950
-T u -1950
-T J -1950
-L T -2439
-L Y -2925
-Y o -1950
-Y e -1461
-Y a -1461
-Y J -1950
-A W -1461
-W A -975
-T A -1950
-V o -975
-V e -975
-V a -975
-Y A -1950
-F A -975
-F . -3414
-F , -3414
-A T -2439
-A Y -2439
-v . -975
-v , -975
-y . -975
-y , -975
-T . -1950
-T , -1950
-L W -1461
-P A -1461
-V J -975
-V . -1950
-V , -1950
-Y . -1950
-Y , -1950
-W o -975
-W e -975
-W a -975
-W . -975
-W , -975
-r . -1461
-r , -1461
-w . -975
-w , -975
-Y u -975
-A v -486
-A y -975
-A w -486
-o . -975
-o , -975
-p . -975
-p , -975
-e . -486
-e , -486
-b . -975
-b , -975
-O T -1950
-O V -486
-O Y -975
-O . -1461
-O , -1461
-L y -1461
-L O -1950
-L G -1950
-L C -1950
-L Q -1950
-P J -1461
-V y -486
-V u -486
-V O -486
-V G -486
-V C -486
-V Q -486
-D T -1461
-D V -486
-D Y -975
-D . -1950
-D , -1950
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -486
-F e -486
-F a -486
-c . -486
-c , -486
-O A -486
-O W -486
-L U -1461
-R T -1461
-R V -486
-R Y -975
-R W -486
-G T -1461
-P o -975
-P g -486
-P e -486
-P a -486
-C A -486
-C . -1461
-C , -1461
-D A -486
-D W -486
-B T -1950
-B Y -975
-B . -486
-B , -486
-F J -486
-A O -486
-A G -486
-A C -486
-A U -486
-A Q -486
-W r -486
-W y -486
-W u -486
-W O -486
-W G -486
-W C -486
-W J -975
-W Q -486
-U A -486
-U . -975
-U , -975
-Q W -486
-T O -1461
-T G -1461
-T C -1461
-T Q -1461
-O X -975
-L o -1461
-L e -1461
-L q -1461
-G V -486
-G Y -975
-G W -486
-P T -1461
-P V -486
-P Y -975
-C T -1950
-C V -486
-C Y -975
-D X -975
-B V -486
-B X -486
-B A -486
-B W -486
-S . -486
-S , -486
-X o -975
-X e -975
-X y -975
-X O -975
-X G -975
-X C -975
-X Q -975
-A o -486
-A e -486
-K o -975
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o y -486
-o x -975
-h y -486
-n y -486
-m y -486
-r g -486
-p y -486
-p x -975
-c y -486
-e y -486
-b y -486
-x o -975
-x c -975
-x e -486
-x d -975
-x a -486
-x q -975
-a y -486
-T S -486
-L a -486
-L S -975
-P Z -486
-P X -975
-P W -486
-C X -975
-C W -486
-V S -486
-S T -975
-S V -486
-S Y -975
-S X -486
-S A -486
-S W -486
-Y S -486
-X a -486
-X u -975
-X S -486
-A t -486
-A c -486
-A d -486
-A a -486
-A u -486
-A q -486
-A S -486
-W S -486
-K c -975
-K u -975
-K S -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-c x -486
-e x -486
-s y -486
-k o -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-O Z -486
-C Z -486
-Z o -486
-Z e -486
-Z d -486
-Z s -486
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-A s -486
-K a -486
-L cq -3903
-L ' -3903
-T char173 -1950
-T hy -1950
-T - -1950
-T en -1950
-T em -1950
-A cq -1461
-A ' -1461
-char173 T -2439
-hy T -2439
-- T -2439
-en T -2439
-em T -2439
-Y char173 -975
-Y hy -975
-Y - -975
-Y en -975
-Y em -975
-p cq -975
-p ' -975
-c cq -975
-c ' -975
-e cq -1461
-e ' -1461
-b cq -1461
-b ' -1461
-a cq -975
-a ' -975
-V char173 -486
-V hy -486
-V - -486
-V en -486
-V em -486
-h cq -1461
-h ' -1461
-n cq -975
-n ' -975
-m cq -975
-m ' -975
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -975
-' d -975
-s cq -486
-s ' -486
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -975
-X hy -975
-X - -975
-X en -975
-X em -975
-A char173 -486
-A hy -486
-A - -486
-A en -486
-A em -486
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-char173 X -975
-hy X -975
-- X -975
-char173 A -486
-hy A -486
-- A -486
-en X -975
-en A -486
-em X -975
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-charset
-! 7806,18135,0,2628,993,994 2 3617
-dq 10734,18135,0,3669,-2133,994 2 3618
-" "
-sh 12684,18360,825,2676,684,994 2 3619
-# "
-Do 12684,18840,570,1326,-291,994 2 3620
-$ "
-% 17565,18465,1050,1386,228,994 2 3621
-& 16587,18390,255,609,471,609 2 3622
-cq 5856,18135,0,4215,-1392,994 2 51751
-' "
-( 5856,18135,2430,4416,744,994 2 3624
-) 5856,18135,2430,1812,3348,994 2 3625
-* 12684,18390,0,1635,-3465,994 2 3626
-+ 17565,12810,0,0,-1431 0 3627
-, 5856,3465,2370,0,3042 0 3628
-char173 5856,7785,0,726,585,726 0 3629
-hy "
-- "
-. 5856,3465,0,0,1917 0 3630
-sl 5856,18165,2430,4518,3396,994 2 3631
-/ "
-0 12684,18360,255,2343,627,994 2 3632
-1 12684,18105,0,1020,-2307,994 2 3633
-2 12684,18360,0,2235,1779,994 2 3634
-3 12684,18360,255,2184,687,994 2 3635
-4 12684,18105,0,2082,1284,994 2 3636
-5 12684,18105,255,2490,525,994 2 3637
-6 12684,18360,255,2397,546,994 2 3638
-7 12684,18105,0,3309,315,994 2 3639
-8 12684,18360,255,2274,600,994 2 3640
-9 12684,18360,255,2289,819,994 2 3641
-: 5856,12570,0,1947,1917,994 0 3642
-; 5856,12570,2370,1836,3042,994 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 17565,9792,0,0,-1455 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 11709,18390,0,2205,-738,994 2 3647
-at 17565,18372,3231,2163,1152,994 2 3648
-@ "
-A 14637,18135,0,0,2460 2 3649
-B 14148,18135,0,1668,1362,994 2 3650
-C 13662,18390,255,2247,375,994 2 3651
-D 14637,18135,0,1851,1398,994 2 3652
-E 12198,18135,0,3423,1440,994 2 3653
-F 11709,18135,0,3855,1584,994 2 3654
-G 14637,18390,255,1926,117,994 2 3655
-H 14637,18135,0,3243,1542,994 2 3656
-I 6831,18135,0,3342,1641,994 2 3657
-J 12684,18135,255,3231,1059,994 2 3658
-K 14148,18135,0,3366,1374,994 2 3659
-L 11220,18135,0,0,1488 2 3660
-M 19515,18135,0,2958,1551,994 2 3661
-N 15126,18135,0,3003,1431,994 2 3662
-O 14637,18390,255,1872,204,994 2 3663
-P 13662,18135,0,2412,1506,994 2 3664
-Q 15126,18390,255,1449,189,994 2 3665
-R 13662,18135,0,1968,1545,994 2 3666
-S 14148,18390,255,2079,495,994 2 3667
-T 13173,18135,0,3891,-1554,994 2 3668
-U 14637,18135,255,3147,72,994 2 3669
-V 13662,18135,0,4206,-1620,994 2 3670
-W 20490,18135,0,3927,-699,994 2 3671
-X 14637,18135,0,3828,2505,994 2 3672
-Y 13662,18135,0,4230,-1767,994 2 3673
-Z 12198,18135,0,3639,2217,994 2 3674
-lB 5856,18135,2430,4086,2592,994 2 3675
-[ "
-rs 8295,18165,2430,534,-1680,534 2 3676
-\ "
-rB 5856,18135,2430,3555,3123,994 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,994 3 3679
-oq 5856,18135,0,3957,-1134,994 2 51808
-` "
-a 11709,12885,255,999,1161,994 0 3681
-b 11709,18165,255,1164,1920,994 2 3682
-c 10734,12885,255,1290,990,994 0 3683
-d 11709,18165,255,3657,1038,994 2 3684
-e 11220,12885,255,1140,1023,994 0 3685
-f 8295,18315,0,4233,960,994 2 3686
-g 11709,12885,4995,2007,2487,994 1 3687
-h 12198,18165,0,987,1677,987 2 3688
-i 6342,18165,0,3393,1722,994 2 3689
-j 6342,18165,4995,3432,4620,994 3 3690
-k 11709,18165,0,2241,1605,994 2 3691
-l 6342,18165,0,3426,1746,994 2 3692
-m 17565,12885,0,1053,1842,994 0 3693
-n 12198,12885,0,915,1734,915 0 3694
-o 11709,12885,255,990,927,990 0 3695
-p 11709,12885,4680,1098,3417,994 1 3696
-q 11709,12885,4680,1926,1122,994 1 3697
-r 8781,12885,0,2637,1686,994 0 3698
-s 10734,12885,255,1116,1380,994 0 3699
-t 8295,15693,255,2280,354,994 0 3700
-u 12198,12630,255,1764,849,994 0 3701
-v 11709,12630,0,2337,-546,994 0 3702
-w 18540,12630,0,2337,-171,994 0 3703
-x 11709,12630,0,2193,2526,994 0 3704
-y 11709,12630,4680,2457,1983,994 1 3705
-z 9759,12630,0,1977,2220,994 0 3706
-lC 13173,20130,6075,3150,-906,994 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 13173,20130,6075,0,3510 3 3709
-} "
-ti 26346,9435,0,0,-4029 0 51876
-char192 14637,23100,0,0,2460 2 3776
-`A "
-char194 14637,23100,0,1626,2460,994 2 3778
-^A "
-char200 12198,23100,0,3423,1440,994 2 3784
-`E "
-char202 12198,23100,0,3423,1440,994 2 3786
-^E "
-char203 12198,23265,0,3948,1440,994 2 3787
-:E "
-char206 6831,23100,0,5529,1641,994 2 3790
-^I "
-char207 6831,23265,0,6630,1641,994 2 3791
-:I "
-char180 12684,18225,0,1785,-5265,994 2 3764
-aa "
-ga 12684,18225,0,0,-5271 2 3680
-a^ 12684,18225,0,702,-3897,702 2 3678
-^ "
-char168 12684,18120,0,2067,-3990,994 2 3752
-ad "
-a~ 12684,17811,0,1560,-3786,994 2 3710
-~ "
-char217 14637,23100,255,3147,72,994 2 3801
-`U "
-char219 14637,23100,255,3147,72,994 2 3803
-^U "
-char221 13662,23100,0,4230,-1767,994 2 3805
-'Y "
-char253 11709,18225,4680,2457,1983,994 3 3837
-'y "
-char176 12684,18360,0,1377,-3201,994 2 3760
-de "
-char199 13662,18390,5295,2247,375,994 3 3783
-,C "
-char231 10734,12885,5205,1290,1419,994 1 3815
-,c "
-char209 15126,22833,0,3003,1431,994 2 3793
-~N "
-char241 12198,17811,0,1803,1734,994 2 3825
-~n "
-char161 7806,12615,5520,936,2685,936 1 3745
-r! "
-char191 11709,12600,5790,0,2256 1 3775
-r? "
-char164 12684,15834,0,2757,1125,994 0 3748
-Cs "
-char163 12684,18360,0,2571,1257,994 2 3747
-Po "
-char165 12684,18105,0,4791,834,994 2 3749
-Ye "
-char167 12684,18390,255,174,-1545,174 2 3751
-sc "
-Fn 12684,18315,0,2196,-1392,994 2 51871
-char162 12684,18840,570,1299,-636,994 2 3746
-ct "
-char226 11709,18225,255,1188,1161,994 2 3810
-^a "
-char234 11220,18225,255,1434,1023,994 2 3818
-^e "
-char244 11709,18225,255,1188,927,994 2 3828
-^o "
-char251 12198,18225,255,1764,849,994 2 3835
-^u "
-char225 11709,18225,255,2271,1161,994 2 3809
-'a "
-char233 11220,18225,255,2517,1023,994 2 3817
-'e "
-char243 11709,18225,255,2271,927,994 2 3827
-'o "
-char250 12198,18225,255,2028,849,994 2 3834
-'u "
-char224 11709,18225,255,999,1161,994 2 3808
-`a "
-char232 11220,18225,255,1140,1023,994 2 3816
-`e "
-char242 11709,18225,255,990,927,990 2 3826
-`o "
-char249 12198,18225,255,1764,849,994 2 3833
-`u "
-char228 11709,18120,255,2553,1161,994 2 3812
-:a "
-char235 11220,18120,255,2799,1023,994 2 3819
-:e "
-char246 11709,18120,255,2553,927,994 2 3830
-:o "
-char252 12198,18120,255,2310,849,994 2 3836
-:u "
-char197 14637,25164,0,1713,2460,994 2 3781
-oA "
-char238 6342,18225,0,3873,1713,994 2 3822
-^i "
-char216 14637,19854,1755,1872,204,994 2 3800
-/O "
-char198 20490,18135,0,2688,3147,994 2 3782
-AE "
-char229 11709,19089,255,1488,1161,994 2 3813
-oa "
-char237 6342,18225,0,5760,1713,994 2 3821
-'i "
-char248 11709,14208,1830,993,927,993 0 3832
-/o "
-char230 17565,12885,255,924,966,924 0 3814
-ae "
-char196 14637,23265,0,2727,2460,994 2 3780
-:A "
-char236 6342,18225,0,2367,1713,994 2 3820
-`i "
-char214 14637,23265,255,2727,204,994 2 3798
-:O "
-char220 14637,23265,255,3147,72,994 2 3804
-:U "
-char201 12198,23100,0,3660,1440,994 2 3785
-'E "
-char239 6342,18120,0,5238,1713,994 2 3823
-:i "
-char223 13173,18165,0,1956,1704,994 2 3807
-ss "
-char212 14637,23100,255,1872,204,994 2 3796
-^O "
-char193 14637,23100,0,2439,2460,994 2 3777
-'A "
-char195 14637,22833,0,2379,2460,994 2 3779
-~A "
-char227 11709,17811,255,2046,1161,994 2 3811
-~a "
-char208 14637,18135,0,1851,1398,994 2 3792
--D "
-char240 11709,18756,255,1419,936,994 2 3824
-Sd "
-char205 6831,23100,0,6342,1641,994 2 3789
-'I "
-char204 6831,23100,0,3732,1641,994 2 3788
-`I "
-char211 14637,23100,255,2439,204,994 2 3795
-'O "
-char210 14637,23100,255,1872,204,994 2 3794
-`O "
-char213 14637,22833,255,2379,204,994 2 3797
-~O "
-char245 11709,17811,255,2046,927,994 2 3829
-~o "
-vS 14148,23100,255,2754,495,994 2 51795
-vs 10734,18225,255,2754,1380,994 2 51827
-char218 14637,23100,255,3147,72,994 2 3802
-'U "
-:Y 13662,23265,0,4230,-1767,994 2 51801
-char255 11709,18120,4680,2553,1983,994 3 3839
-:y "
-char222 13662,18135,0,1518,1470,994 2 3806
-TP "
-char254 11709,18165,4680,1098,3417,994 3 3838
-Tp "
-char181 15612,12630,4680,1422,2907,994 1 3765
-char182 12684,19635,4200,2046,-1215,994 2 3766
-ps "
-char190 17565,18465,1050,1788,-174,994 2 3774
-34 "
-\- 17565,7740,0,0,-1455 0 51757
-char188 17565,18345,1050,639,975,639 2 3772
-14 "
-char189 17565,18345,1050,165,1449,165 2 3773
-12 "
-char170 10734,18360,0,1965,-2322,994 2 3754
-Of "
-char186 10734,18360,0,1956,-2496,994 2 3770
-Om "
-char171 11709,10965,0,1749,306,994 0 3755
-Fo "
-char187 11709,10965,0,219,1836,219 0 3771
-Fc "
-char177 17565,12810,2520,0,-1431 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4629,-2838,994 2 3753
-co "
-char172 17565,10320,0,0,-1455 0 3756
-no "
-char174 13173,19635,0,4629,-2838,994 2 3758
-rg "
-char178 8295,18465,0,2814,-432,994 2 3762
-S2 "
-char179 8295,18465,0,2817,-1047,994 2 3763
-S3 "
-char184 12684,195183,5205,0,444 3 3768
-ac "
-char185 8295,18345,0,1920,-2586,994 2 3769
-S1 "
-char215 17565,12345,0,0,-2448 0 3799
-char247 17565,12015,0,0,-1446 0 3831
-char183 5856,10671,0,1371,-189,994 0 3767
-pc "
-fm 5856,18105,0,3432,-2124,994 2 51873
-sd 12684,18105,0,1554,-2124,994 2 51874
-dg 12684,18135,0,318,-1353,318 2 51755
-tm 16101,17850,0,2169,-2706,994 2 51796
-ah 12684,18225,0,1779,-4974,994 2 51935
-ao 12684,19089,0,1002,-4803,994 2 51930
-f/ 2928,18345,1050,8775,7476,994 2 51759
-em 17565,7605,0,426,354,426 0 51789
-en 12684,7605,0,753,546,753 0 51790
-dd 12684,18135,0,399,-1434,399 2 51773
-.i 6342,12630,0,1770,1713,994 0 51957
-aq 5856,18135,0,3546,-2133,994 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 13662,23100,255,3378,375,994 2 20166
-'c 10734,18225,255,2910,990,994 2 20198
-lq 10245,18135,0,3945,-1131,994 2 51838
-rq 10245,18135,0,4314,-1500,994 2 51746
-Bq 10245,3459,2376,0,3000 0 51772
-vz 9759,18225,0,3240,2220,994 2 51834
-fi 14148,18315,0,3318,981,994 2 51881
-fl 14148,18315,0,3378,978,994 2 51882
-ff 15126,18315,0,4389,963,994 2 51883
-Fi 20979,18315,0,3477,981,994 2 51884
-Fl 20979,18315,0,3537,978,994 2 51885
-ij 12684,18165,4995,3432,1722,994 3 51958
-bq 5856,3459,2376,57,2766,57 0 51756
-%0 26346,18465,1050,450,-201,450 2 51901
-char175 12684,16386,0,927,-4566,927 0 3759
-a- "
-ab 12684,18195,0,1674,-4344,994 2 51926
-a. 12684,18120,0,0,-5505 2 51927
-oe 17565,12885,255,903,948,903 0 51823
-OE 20490,18270,135,2994,153,994 2 51791
-fo 6342,10965,0,1878,399,994 0 51886
-fc 6342,10965,0,453,1824,453 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 13173,18135,0,951,96,951 2 51944
-/l 8781,18165,0,2745,807,994 2 51960
-a" 12684,18225,0,4065,-4167,994 2 51933
-ho 12684,918,4755,0,-2397 1 51934
-vZ 12198,23100,0,3729,2217,994 2 51802
-IJ 19515,18135,255,3231,1641,994 2 51942
diff --git a/contrib/groff/devlj4/UCI b/contrib/groff/devlj4/UCI
deleted file mode 100644
index 4214f49..0000000
--- a/contrib/groff/devlj4/UCI
+++ /dev/null
@@ -1,840 +0,0 @@
-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 -2925
-P . -5364
-P , -5364
-V A -1950
-A V -1950
-T o -3414
-T r -3414
-T c -3414
-T e -3414
-T d -3414
-T s -3903
-T y -3414
-T a -3414
-T w -3414
-T u -3414
-T J -3414
-L T -3414
-L Y -2925
-Y o -2925
-Y e -2925
-Y a -2439
-Y J -2925
-A W -1950
-W A -1950
-T A -2925
-V o -1950
-V e -1950
-V a -1461
-Y A -2925
-F A -1461
-F . -3903
-F , -3903
-A T -2925
-A Y -2925
-v . -1950
-v , -1950
-y . -2439
-y , -2439
-T . -3414
-T , -3414
-L W -1950
-P A -1461
-V J -1950
-V . -2925
-V , -2925
-Y . -2925
-Y , -2925
-W o -1461
-W e -1461
-W a -1461
-W . -1950
-W , -1950
-r . -1461
-r , -1461
-w . -1950
-w , -1950
-Y u -1461
-A v -975
-A y -975
-A w -975
-o . -486
-o , -486
-p . -486
-p , -486
-e . -486
-e , -486
-b . -486
-b , -486
-O T -1461
-O V -486
-O Y -1461
-O . -975
-O , -975
-L y -2439
-L O -1461
-L G -1461
-L C -1461
-L Q -1461
-P J -1950
-V y -486
-V u -486
-V O -486
-V G -486
-V C -486
-V Q -486
-D T -1461
-D V -486
-D Y -1461
-D . -975
-D , -975
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -975
-F e -975
-F a -975
-c . -486
-c , -486
-O A -486
-O W -486
-L U -1461
-R T -1461
-R V -486
-R Y -1461
-R W -486
-G T -1461
-P o -1461
-P g -1461
-P e -1461
-P a -975
-C A -975
-C . -975
-C , -975
-D A -486
-D W -486
-B T -1461
-B Y -1461
-B . -975
-B , -975
-F J -975
-A O -486
-A G -486
-A C -486
-A U -486
-A Q -486
-W r -486
-W y -486
-W u -486
-W O -486
-W G -486
-W C -486
-W J -1461
-W Q -486
-J A -486
-J . -1461
-J , -1461
-U A -486
-U . -975
-U , -975
-Q W -486
-f . -975
-f , -975
-T O -975
-T G -975
-T C -975
-T Q -975
-O X -486
-L o -1950
-L e -1950
-L q -1950
-G V -486
-G Y -1461
-G W -486
-P T -1461
-P V -486
-P Y -1461
-C T -1461
-C V -975
-C Y -1461
-D X -486
-B V -486
-B X -486
-B A -486
-B W -486
-S . -486
-S , -486
-X o -486
-X e -486
-X y -486
-X O -486
-X G -486
-X C -486
-X Q -486
-A o -486
-A e -486
-K o -975
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -486
-o x -486
-o w -486
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-r g -486
-p v -486
-p y -486
-p x -486
-c v -486
-c y -486
-c w -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -486
-b y -486
-b w -486
-s . -486
-s , -486
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-f g -486
-x o -486
-x g -486
-x c -486
-x e -486
-x d -486
-x a -486
-x q -486
-a v -486
-a y -486
-a w -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T i -486
-T S -486
-L a -1461
-L S -975
-P s -486
-P Z -486
-P X -486
-P W -486
-C X -975
-C W -975
-C J -486
-V i -486
-V S -486
-S T -975
-S V -486
-S Y -975
-S X -486
-S A -486
-S W -486
-Y i -486
-Y S -486
-X a -486
-X u -486
-X S -486
-A t -486
-A g -486
-A c -486
-A d -486
-A a -486
-A u -486
-A q -486
-A S -486
-W i -486
-W S -486
-K c -975
-K u -975
-K S -486
-h w -486
-n w -486
-m w -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-p w -486
-c x -486
-v e -486
-v s -975
-e x -486
-e w -486
-s v -486
-s y -486
-s x -486
-s w -486
-y e -486
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-w e -486
-w s -486
-k o -486
-k g -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-O Z -486
-L J -975
-C Z -975
-Z o -486
-Z e -486
-Z d -486
-Z s -975
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z J -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-X J -486
-A s -975
-A J -486
-K a -975
-K J -975
-t s -486
-r s -486
-g s -486
-v t -486
-v h -486
-v n -486
-v m -486
-v r -486
-v i -486
-v p -486
-v z -486
-v b -486
-v y -486
-v f -486
-v x -486
-v w -486
-v j -486
-v u -486
-v k -486
-z s -486
-k s -486
-C t -486
-C o -486
-C h -486
-C l -486
-C r -486
-C i -486
-C e -486
-C y -486
-C a -486
-C u -486
-C O -486
-C H -486
-C N -486
-C M -486
-C L -486
-C R -486
-C G -486
-C I -486
-C P -486
-C C -486
-C E -486
-C D -486
-C B -486
-C S -486
-C F -486
-C U -486
-C Q -486
-C K -486
-E s -486
-U s -486
-L cq -3414
-L ' -3414
-T char173 -3414
-T hy -3414
-T - -3414
-T en -3414
-T em -3414
-A cq -1461
-A ' -1461
-char173 T -3414
-hy T -3414
-- T -3414
-en T -3414
-em T -3414
-Y char173 -1461
-Y hy -1461
-Y - -1461
-Y en -1461
-Y em -1461
-p cq -1950
-p ' -1950
-c cq -1950
-c ' -1950
-e cq -1950
-e ' -1950
-b cq -1950
-b ' -1950
-a cq -1950
-a ' -1950
-V char173 -486
-V hy -486
-V - -486
-V en -486
-V em -486
-h cq -1461
-h ' -1461
-n cq -1461
-n ' -1461
-m cq -1461
-m ' -1461
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -486
-' d -486
-s cq -975
-s ' -975
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -486
-X hy -486
-X - -486
-X en -486
-X em -486
-A char173 -486
-A hy -486
-A - -486
-A en -486
-A em -486
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -486
-' s -486
-char173 X -486
-hy X -486
-- X -486
-char173 A -486
-hy A -486
-- A -486
-en X -486
-en A -486
-em X -486
-v cq -486
-v ' -486
-C cq -486
-C ' -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-v char173 -486
-v hy -486
-v - -486
-v en -486
-v em -486
-C char173 -486
-C hy -486
-C - -486
-C en -486
-C em -486
-charset
-! 7806,18135,0,2241,591,996 2 3617
-dq 9759,18135,0,3060,-2391,996 2 3618
-" "
-sh 12198,18360,975,1389,3,996 2 3619
-# "
-Do 12198,18465,630,843,-735,843 2 3620
-$ "
-% 17565,18675,975,576,-672,576 2 3621
-& 16101,18390,255,210,177,210 2 3622
-cq 5856,18135,0,3690,-1482,996 2 51751
-' "
-( 5856,18135,2325,3999,699,996 2 3624
-) 5856,18135,2325,1524,3174,996 2 3625
-* 12198,18390,0,1251,-3045,996 2 3626
-+ 17565,12495,0,0,-2097 0 3627
-, 5856,2970,2730,0,2856 0 3628
-char173 5856,7560,0,534,348,534 0 3629
-hy "
-- "
-. 5856,2970,0,0,1347 0 3630
-sl 5856,18165,1980,4254,3456,996 2 3631
-/ "
-0 12198,18360,255,2505,636,996 2 3632
-1 12198,18105,0,309,-2085,309 2 3633
-2 12198,18360,0,1968,1710,996 2 3634
-3 12198,18360,255,2127,735,996 2 3635
-4 12198,18105,0,3057,699,996 2 3636
-5 12198,18105,255,3717,123,996 2 3637
-6 12198,18360,255,3078,21,996 2 3638
-7 12198,18105,0,3684,138,996 2 3639
-8 12198,18360,255,3024,132,996 2 3640
-9 12198,18360,255,2850,480,996 2 3641
-: 5856,12621,0,1656,1347,996 0 3642
-; 5856,12621,2730,1737,2856,996 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 17565,9375,0,0,-2115 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 11220,18390,0,2100,-609,996 2 3647
-at 17565,18357,3849,1746,1029,996 2 3648
-@ "
-A 13662,18135,0,0,2325 2 3649
-B 13173,18135,0,1743,1536,996 2 3650
-C 13173,18390,255,1860,513,996 2 3651
-D 13662,18135,0,1749,1557,996 2 3652
-E 11220,18135,0,3267,1563,996 2 3653
-F 10734,18135,0,3414,1449,996 2 3654
-G 13662,18390,255,1893,333,996 2 3655
-H 13662,18135,0,2958,1509,996 2 3656
-I 5856,18135,0,3066,1566,996 2 3657
-J 11220,18135,255,2781,1866,996 2 3658
-K 13173,18135,0,2982,1341,996 2 3659
-L 10245,18135,0,0,1506 2 3660
-M 18051,18135,0,2886,1590,996 2 3661
-N 14148,18135,0,3030,1638,996 2 3662
-O 13662,18390,255,1875,447,996 2 3663
-P 12198,18135,0,2514,1401,996 2 3664
-Q 13662,18390,255,1773,495,996 2 3665
-R 13173,18135,0,2247,1515,996 2 3666
-S 12684,18390,255,2274,978,996 2 3667
-T 12684,18135,0,3735,-1890,996 2 3668
-U 13662,18135,255,2892,363,996 2 3669
-V 12198,18135,0,4140,-1263,996 2 3670
-W 18051,18135,0,3870,-1209,996 2 3671
-X 13662,18135,0,3108,2223,996 2 3672
-Y 12198,18135,0,4026,-1473,996 2 3673
-Z 12198,18135,0,3390,2130,996 2 3674
-lB 5856,18135,2325,4227,2679,996 2 3675
-[ "
-rs 7806,18165,1980,420,-1230,420 2 3676
-\ "
-rB 5856,18135,2325,3114,3792,996 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,996 3 3679
-oq 5856,18135,0,3690,-1482,996 2 51808
-` "
-a 10734,12885,255,918,1242,918 0 3681
-b 10734,18165,255,1200,1791,996 2 3682
-c 10245,12885,255,1047,816,996 0 3683
-d 10734,18165,255,3501,1155,996 2 3684
-e 10245,12885,255,1245,1065,996 0 3685
-f 7806,18315,0,3972,753,996 2 3686
-g 10734,12885,4995,1737,2589,996 1 3687
-h 10734,18165,0,1167,1812,996 2 3688
-i 4878,18165,0,3690,1905,996 2 3689
-j 4878,18165,4995,3777,5010,996 3 3690
-k 10734,18165,0,2250,1443,996 2 3691
-l 4878,18165,0,3627,1932,996 2 3692
-m 16101,12885,0,1227,1803,996 0 3693
-n 10734,12885,0,1218,1824,996 0 3694
-o 10734,12885,255,1047,825,996 0 3695
-p 10734,12885,4680,972,3273,972 1 3696
-q 10734,12885,4680,1965,1020,996 1 3697
-r 7317,12885,0,2601,1803,996 0 3698
-s 9759,12885,255,1320,1314,996 0 3699
-t 7806,15879,255,1989,144,996 0 3700
-u 10734,12630,255,1800,1011,996 0 3701
-v 10245,12630,0,2412,-423,996 0 3702
-w 17076,12630,0,2343,-369,996 0 3703
-x 10245,12630,0,2328,2280,996 0 3704
-y 10734,12630,4680,2364,1923,996 1 3705
-z 8781,12630,0,2136,2154,996 0 3706
-lC 11709,20130,6075,2865,-1290,996 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 11709,20130,6075,0,2577 3 3709
-} "
-ti 26346,8952,0,0,-4029 0 51876
-char192 13662,23640,0,0,2325 2 3776
-`A "
-char194 13662,23415,0,1611,2325,996 2 3778
-^A "
-char200 11220,23640,0,3267,1563,996 2 3784
-`E "
-char202 11220,23415,0,3267,1563,996 2 3786
-^E "
-char203 11220,22560,0,3693,1563,996 2 3787
-:E "
-char206 5856,23415,0,5514,1566,996 2 3790
-^I "
-char207 5856,22560,0,6375,1566,996 2 3791
-:I "
-char180 12198,18165,0,1326,-5685,996 2 3764
-aa "
-ga 12198,18165,0,0,-4539 2 3680
-a^ 12198,17940,0,795,-3729,795 2 3678
-^ "
-char168 12198,17355,0,1464,-3699,996 2 3752
-ad "
-a~ 12198,17652,0,1776,-3729,996 2 3710
-~ "
-char217 13662,23640,255,2892,363,996 2 3801
-`U "
-char219 13662,23415,255,2892,363,996 2 3803
-^U "
-char221 12198,23640,0,4026,-1473,996 2 3805
-'Y "
-char253 10734,18165,4680,2364,1923,996 3 3837
-'y "
-char176 12198,18360,0,1284,-2982,996 2 3760
-de "
-char199 13173,18390,4995,1860,540,996 3 3783
-,C "
-char231 10245,12885,4995,1047,2838,996 1 3815
-,c "
-char209 14148,22743,0,3030,1638,996 2 3793
-~N "
-char241 10734,17652,0,2508,1824,996 2 3825
-~n "
-char161 7806,13041,5094,861,1971,861 1 3745
-r! "
-char191 11220,12591,5799,0,2016 1 3775
-r? "
-char164 12198,15684,0,2514,468,996 0 3748
-Cs "
-char163 12198,18360,0,2223,522,996 2 3747
-Po "
-char165 12198,18105,0,4137,1266,996 2 3749
-Ye "
-char167 12198,18390,255,96,-1509,96 2 3751
-sc "
-Fn 12198,18315,0,1662,-1329,996 2 51871
-char162 12198,18465,630,873,-1005,873 2 3746
-ct "
-char226 10734,17940,255,1527,1242,996 2 3810
-^a "
-char234 10245,17940,255,1770,1065,996 2 3818
-^e "
-char244 10734,17940,255,1527,825,996 2 3828
-^o "
-char251 10734,17940,255,1800,1011,996 2 3835
-^u "
-char225 10734,18165,255,2058,1242,996 2 3809
-'a "
-char233 10245,18165,255,2301,1065,996 2 3817
-'e "
-char243 10734,18165,255,2058,825,996 2 3827
-'o "
-char250 10734,18165,255,2058,1011,996 2 3834
-'u "
-char224 10734,18165,255,918,1242,918 2 3808
-`a "
-char232 10245,18165,255,1245,1065,996 2 3816
-`e "
-char242 10734,18165,255,1047,825,996 2 3826
-`o "
-char249 10734,18165,255,1800,1011,996 2 3833
-`u "
-char228 10734,17355,255,2478,1242,996 2 3812
-:a "
-char235 10245,17355,255,2721,1065,996 2 3819
-:e "
-char246 10734,17355,255,2478,825,996 2 3830
-:o "
-char252 10734,17355,255,2478,1011,996 2 3836
-:u "
-char197 13662,24480,0,1125,2325,996 2 3781
-oA "
-char238 5856,17940,0,3966,1425,996 2 3822
-^i "
-char216 13662,19944,1833,1989,555,996 2 3800
-/O "
-char198 18540,18135,0,2904,2310,996 2 3782
-AE "
-char229 10734,19005,255,918,1242,918 2 3813
-oa "
-char237 5856,18165,0,4779,1425,996 2 3821
-'i "
-char248 10734,14238,1866,1050,930,996 0 3832
-/o "
-char230 16587,12885,255,681,957,681 0 3814
-ae "
-char196 13662,22560,0,2472,2325,996 2 3780
-:A "
-char236 5856,18165,0,1461,1425,996 2 3820
-`i "
-char214 13662,22560,255,2472,447,996 2 3798
-:O "
-char220 13662,22560,255,2892,363,996 2 3804
-:U "
-char201 11220,23640,0,3267,1563,996 2 3785
-'E "
-char239 5856,17355,0,5118,1425,996 2 3823
-:i "
-char223 11709,18315,255,1839,1917,996 2 3807
-ss "
-char212 13662,23415,255,1875,447,996 2 3796
-^O "
-char193 13662,23640,0,1884,2325,996 2 3777
-'A "
-char195 13662,22743,0,2355,2325,996 2 3779
-~A "
-char227 10734,17652,255,2508,1242,996 2 3811
-~a "
-char208 13662,18135,0,1749,1557,996 2 3792
--D "
-char240 10734,18579,255,2247,927,996 2 3824
-Sd "
-char205 5856,23640,0,6393,1566,996 2 3789
-'I "
-char204 5856,23640,0,3258,1566,996 2 3788
-`I "
-char211 13662,23640,255,1884,447,996 2 3795
-'O "
-char210 13662,23640,255,1875,447,996 2 3794
-`O "
-char213 13662,22743,255,2355,447,996 2 3797
-~O "
-char245 10734,17652,255,2508,825,996 2 3829
-~o "
-vS 12684,23415,255,3015,978,996 2 51795
-vs 9759,17940,255,2751,1314,996 2 51827
-char218 13662,23640,255,2892,363,996 2 3802
-'U "
-:Y 12198,22560,0,4026,-1473,996 2 51801
-char255 10734,17355,4680,2364,1923,996 3 3839
-:y "
-char222 12198,18135,0,1260,1407,996 2 3806
-TP "
-char254 10734,18165,4680,969,3273,969 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,996 0 3765
-char182 12198,19635,4200,1923,-606,996 2 3766
-ps "
-char190 17565,18675,918,891,-987,891 2 3774
-34 "
-\- 17565,8175,0,0,-2097 0 51757
-char188 17565,18675,918,183,-279,183 2 3772
-14 "
-char189 17565,18675,918,0,156 2 3773
-12 "
-char170 7806,18360,0,3285,-1188,996 2 3754
-Of "
-char186 7806,18360,0,3303,-1197,996 2 3770
-Om "
-char171 11709,11160,0,741,-426,741 0 3755
-Fo "
-char187 11709,11160,0,0,777 0 3771
-Fc "
-char177 17565,12210,213,0,-2133 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4470,-2679,996 2 3753
-co "
-char172 17565,10185,0,0,-2097 0 3756
-no "
-char174 13173,19635,0,4470,-2679,996 2 3758
-rg "
-char178 7317,18465,0,3258,-300,996 2 3762
-S2 "
-char179 7317,18465,0,3042,-957,996 2 3763
-S3 "
-char184 12198,195108,4995,0,1860 3 3768
-ac "
-char185 7317,18345,0,2562,-2493,996 2 3769
-S1 "
-char215 17565,12216,0,0,-2850 0 3799
-char247 17565,11610,0,0,-2667 0 3831
-char183 5856,10578,0,1095,-723,996 0 3767
-pc "
-fm 5856,18105,0,3918,-1725,996 2 51873
-sd 12198,18105,0,2577,-2925,996 2 51874
-dg 12198,18135,0,315,-1854,315 2 51755
-tm 16101,17850,0,2010,-2547,996 2 51796
-ah 12198,17940,0,1533,-4467,996 2 51935
-ao 12198,19005,0,114,-4878,114 2 51930
-f/ 2928,18675,918,8010,6531,996 2 51759
-em 17565,7350,0,423,330,423 0 51789
-en 12198,7350,0,936,786,936 0 51790
-dd 12198,18135,0,315,-1854,315 2 51773
-.i 5856,12630,0,1461,1425,996 0 51957
-aq 5856,18135,0,3051,-2388,996 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 13173,23640,255,2427,513,996 2 20166
-'c 10245,18165,255,2301,816,996 2 20198
-lq 9270,18135,0,4254,-1485,996 2 51838
-rq 9270,18135,0,4254,-1485,996 2 51746
-Bq 9270,2916,2784,0,3018 0 51772
-vz 8781,17940,0,3240,2154,996 2 51834
-fi 12684,18315,0,2934,795,996 2 51881
-fl 12684,18315,0,2949,744,996 2 51882
-ff 13662,18315,0,3921,888,996 2 51883
-Fi 18540,18315,0,2892,921,996 2 51884
-Fl 18540,18315,0,2928,849,996 2 51885
-ij 9759,18165,4995,3777,1905,996 3 51958
-bq 5856,2916,2784,0,3330 0 51756
-%0 22443,18675,975,1293,267,996 2 51901
-char175 12198,16434,0,1257,-3453,996 0 3759
-a- "
-ab 12198,17940,0,1890,-4329,996 2 51926
-a. 12198,17355,0,0,-6069 2 51927
-oe 16587,12885,255,912,783,912 0 51823
-OE 18051,18270,135,3174,363,996 2 51791
-fo 6342,11160,0,1608,-186,996 0 51886
-fc 6342,11160,0,537,885,537 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 10245,18135,0,0,1620 2 51944
-/l 4878,18165,0,3627,1932,996 2 51960
-a" 12198,18165,0,3174,-3894,996 2 51933
-ho 12198,879,4716,0,-2142 1 51934
-vZ 12198,23415,0,3390,2130,996 2 51802
-IJ 17076,18135,255,2781,1566,996 2 51942
diff --git a/contrib/groff/devlj4/UCR b/contrib/groff/devlj4/UCR
deleted file mode 100644
index 3b50399..0000000
--- a/contrib/groff/devlj4/UCR
+++ /dev/null
@@ -1,759 +0,0 @@
-name UCR
-spacewidth 5856
-pcltypeface 4148
-pclproportional 1
-pclweight 0
-pclstyle 4
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -2439
-P . -4878
-P , -4878
-V A -1950
-A V -1950
-T o -3414
-T r -3414
-T c -3414
-T e -3414
-T d -3414
-T s -3414
-T y -3414
-T a -3414
-T w -3414
-T u -3414
-T J -3414
-L T -3414
-L Y -2925
-Y o -1950
-Y e -1950
-Y a -2439
-Y J -2925
-A W -1461
-W A -1461
-T A -2439
-V o -1461
-V e -1461
-V a -1461
-Y A -2439
-F A -975
-F . -2925
-F , -2925
-A T -2439
-A Y -2439
-v . -1950
-v , -1950
-y . -1950
-y , -1950
-T . -3414
-T , -3414
-L W -1461
-P A -1461
-V J -1461
-V . -2439
-V , -2439
-Y . -2925
-Y , -2925
-W o -975
-W e -975
-W a -975
-W . -1461
-W , -1461
-r . -1461
-r , -1461
-w . -1950
-w , -1950
-Y u -975
-A v -975
-A y -975
-A w -975
-o . -975
-o , -975
-p . -975
-p , -975
-e . -975
-e , -975
-b . -975
-b , -975
-O T -1461
-O V -486
-O Y -975
-O . -1461
-O , -1461
-L y -1950
-L O -1461
-L G -1461
-L C -1461
-L Q -1461
-P J -1461
-V y -486
-V u -486
-V O -486
-V G -486
-V C -486
-V Q -486
-D T -1461
-D V -486
-D Y -975
-D . -1461
-D , -1461
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -486
-F e -486
-F a -486
-c . -975
-c , -975
-O A -486
-O W -486
-L U -1461
-R T -1461
-R V -486
-R Y -975
-R W -486
-G T -1461
-P o -975
-P g -1461
-P e -975
-P a -1461
-C A -486
-C . -1461
-C , -1461
-D A -486
-D W -486
-B T -1461
-B Y -975
-B . -1461
-B , -1461
-F J -486
-A O -486
-A G -486
-A C -486
-A U -486
-A Q -486
-W r -486
-W y -486
-W u -486
-W O -486
-W G -486
-W C -486
-W J -975
-W Q -486
-J A -486
-J . -486
-J , -486
-U A -486
-U . -1461
-U , -1461
-Q W -486
-f . -975
-f , -975
-T O -1461
-T G -1461
-T C -1461
-T Q -1461
-O X -486
-L o -975
-L e -975
-L q -1950
-G V -486
-G Y -975
-G W -486
-P T -975
-P V -486
-P Y -975
-C T -1461
-C V -486
-C Y -975
-D X -486
-B V -486
-B X -486
-B A -486
-B W -486
-S . -486
-S , -486
-X o -486
-X e -486
-X y -486
-X O -486
-X G -486
-X C -486
-X Q -486
-A o -486
-A e -486
-K o -975
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -486
-o y -486
-o w -486
-h v -486
-h y -486
-n v -486
-n y -486
-m v -486
-m y -486
-r g -486
-p v -486
-p y -486
-c v -486
-c y -486
-c w -486
-v o -486
-v g -486
-v c -486
-v d -486
-v a -486
-v q -486
-e v -486
-e y -486
-b v -486
-b y -486
-b w -486
-s . -486
-s , -486
-y o -486
-y g -486
-y c -486
-y d -486
-y a -486
-y q -486
-a v -486
-a y -486
-a w -486
-w o -486
-w g -486
-w c -486
-w d -486
-w a -486
-w q -486
-T S -486
-L a -486
-L S -486
-P s -486
-P Z -486
-P X -486
-P W -486
-C X -486
-C W -486
-V S -486
-S T -486
-S V -486
-S Y -486
-S X -486
-S A -486
-S W -486
-Y S -486
-X a -486
-X u -486
-X S -486
-A t -486
-A g -486
-A c -486
-A d -486
-A a -486
-A u -486
-A q -486
-A S -486
-W S -486
-K c -975
-K u -975
-K S -975
-h w -486
-n w -486
-m w -486
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-p w -486
-v e -486
-v s -486
-e w -486
-s v -486
-s y -486
-s w -486
-y e -486
-y s -486
-w e -486
-w s -486
-k o -486
-k g -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-O Z -486
-L J -486
-C Z -486
-Z o -486
-Z e -486
-Z d -486
-Z s -486
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z J -486
-Z Q -486
-D Z -486
-B Z -486
-S Z -486
-X J -486
-A s -486
-A J -486
-K a -975
-K J -975
-K . -486
-K , -486
-r s -486
-k s -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -5364
-L ' -5364
-T char173 -3414
-T hy -3414
-T - -3414
-T en -3414
-T em -3414
-A cq -1461
-A ' -1461
-char173 T -3414
-hy T -3414
-- T -3414
-en T -3414
-em T -3414
-Y char173 -975
-Y hy -975
-Y - -975
-Y en -975
-Y em -975
-p cq -975
-p ' -975
-c cq -975
-c ' -975
-e cq -975
-e ' -975
-b cq -975
-b ' -975
-a cq -1461
-a ' -1461
-V char173 -486
-V hy -486
-V - -486
-V en -486
-V em -486
-h cq -1461
-h ' -1461
-n cq -1461
-n ' -1461
-m cq -1461
-m ' -1461
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -1950
-' d -1950
-s cq -486
-s ' -486
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -486
-X hy -486
-X - -486
-X en -486
-X em -486
-A char173 -486
-A hy -486
-A - -486
-A en -486
-A em -486
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -486
-' s -486
-char173 X -486
-hy X -486
-- X -486
-char173 A -486
-hy A -486
-- A -486
-en X -486
-en A -486
-em X -486
-K cq -486
-K ' -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-charset
-! 7806,18135 2 3617
-dq 9759,18135 2 3618
-" "
-sh 12198,18360,975 2 3619
-# "
-Do 12198,18360,630 2 3620
-$ "
-% 17565,18675,975 2 3621
-& 16101,18390,255 2 3622
-cq 5856,18135 2 51751
-' "
-( 5856,18135,2520 2 3624
-) 5856,18135,2520 2 3625
-* 12198,18390 2 3626
-+ 17565,12495 0 3627
-, 5856,2970,2730 0 3628
-char173 5856,7560 0 3629
-hy "
-- "
-. 5856,2760 0 3630
-sl 5856,18165,1980 2 3631
-/ "
-0 12198,18360,255 2 3632
-1 12198,18105 2 3633
-2 12198,18360 2 3634
-3 12198,18360,255 2 3635
-4 12198,18105 2 3636
-5 12198,18105,255 2 3637
-6 12198,18360,255 2 3638
-7 12198,18105 2 3639
-8 12198,18360,255 2 3640
-9 12198,18360,255 2 3641
-: 5856,12333 0 3642
-; 5856,12333,2730 0 3643
-< 26346,16068 0 3644
-= 17565,9570 0 3645
-> 26346,16068 0 3646
-? 11220,18390 2 3647
-at 17565,18438,3246 2 3648
-@ "
-A 13662,18135 2 3649
-B 13173,18135 2 3650
-C 13173,18390,255 2 3651
-D 13662,18135 2 3652
-E 11220,18135 2 3653
-F 10734,18135 2 3654
-G 13662,18390,255 2 3655
-H 13662,18135 2 3656
-I 5856,18135 2 3657
-J 11220,18135,255 2 3658
-K 13173,18135 2 3659
-L 10245,18135 2 3660
-M 18051,18135 2 3661
-N 14148,18135 2 3662
-O 13662,18390,255 2 3663
-P 12198,18135 2 3664
-Q 13662,18390,255 2 3665
-R 13173,18135 2 3666
-S 12684,18390,255 2 3667
-T 12684,18135 2 3668
-U 13662,18135,255 2 3669
-V 12198,18135 2 3670
-W 18051,18135 2 3671
-X 13662,18135 2 3672
-Y 12198,18135 2 3673
-Z 12198,18135 2 3674
-lB 5856,18135,2520 2 3675
-[ "
-rs 5856,18165,1980 2 3676
-\ "
-rB 5856,18135,2520 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 5856,18135 2 51808
-` "
-a 10734,12885,255 0 3681
-b 10734,18165,255 2 3682
-c 10245,12885,255 0 3683
-d 10734,18165,255 2 3684
-e 10245,12885,255 0 3685
-f 7806,18315 2 3686
-g 10734,12885,4995 1 3687
-h 10734,18165 2 3688
-i 4878,18165 2 3689
-j 4878,18165,4995 3 3690
-k 10734,18165 2 3691
-l 4878,18165 2 3692
-m 16101,12885 0 3693
-n 10734,12885 0 3694
-o 10734,12885,255 0 3695
-p 10734,12885,4680 1 3696
-q 10734,12885,4680 1 3697
-r 7317,12885 0 3698
-s 9759,12885,255 0 3699
-t 7806,15954,255 0 3700
-u 10734,12630,255 0 3701
-v 10245,12630 0 3702
-w 17076,12630 0 3703
-x 10245,12630 0 3704
-y 10734,12630,4680 1 3705
-z 8781,12630 0 3706
-lC 11709,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11709,20130,6075 3 3709
-} "
-ti 26346,8952 0 51876
-char192 13662,23640 2 3776
-`A "
-char194 13662,23415 2 3778
-^A "
-char200 11220,23640 2 3784
-`E "
-char202 11220,23415 2 3786
-^E "
-char203 11220,22710 2 3787
-:E "
-char206 5856,23415 2 3790
-^I "
-char207 5856,22710 2 3791
-:I "
-char180 12198,18165 2 3764
-aa "
-ga 12198,18165 2 3680
-a^ 12198,17940 2 3678
-^ "
-char168 12198,17355 2 3752
-ad "
-a~ 12198,17844 2 3710
-~ "
-char217 13662,23640,255 2 3801
-`U "
-char219 13662,23415,255 2 3803
-^U "
-char221 12198,23640 2 3805
-'Y "
-char253 10734,18165,4680 3 3837
-'y "
-char176 12198,18360 2 3760
-de "
-char199 13173,18390,4755 3 3783
-,C "
-char231 10245,12885,4755 1 3815
-,c "
-char209 14148,23121 2 3793
-~N "
-char241 10734,17844 2 3825
-~n "
-char161 7806,12591,5544 1 3745
-r! "
-char191 11220,12480,5910 1 3775
-r? "
-char164 12198,15684 0 3748
-Cs "
-char163 12198,18360 2 3747
-Po "
-char165 12198,18105 2 3749
-Ye "
-char167 12198,18390,255 2 3751
-sc "
-Fn 12198,18315 2 51871
-char162 12198,18360,630 2 3746
-ct "
-char226 10734,17940,255 2 3810
-^a "
-char234 10245,17940,255 2 3818
-^e "
-char244 10734,17940,255 2 3828
-^o "
-char251 10734,17940,255 2 3835
-^u "
-char225 10734,18165,255 2 3809
-'a "
-char233 10245,18165,255 2 3817
-'e "
-char243 10734,18165,255 2 3827
-'o "
-char250 10734,18165,255 2 3834
-'u "
-char224 10734,18165,255 2 3808
-`a "
-char232 10245,18165,255 2 3816
-`e "
-char242 10734,18165,255 2 3826
-`o "
-char249 10734,18165,255 2 3833
-`u "
-char228 10734,17355,255 2 3812
-:a "
-char235 10245,17355,255 2 3819
-:e "
-char246 10734,17355,255 2 3830
-:o "
-char252 10734,17355,255 2 3836
-:u "
-char197 13662,24480 2 3781
-oA "
-char238 5856,17940 2 3822
-^i "
-char216 13662,19767,1851 2 3800
-/O "
-char198 18540,18135 2 3782
-AE "
-char229 10734,19005,255 2 3813
-oa "
-char237 5856,18165 2 3821
-'i "
-char248 10734,14274,2115 0 3832
-/o "
-char230 16587,12885,255 0 3814
-ae "
-char196 13662,22710 2 3780
-:A "
-char236 5856,18165 2 3820
-`i "
-char214 13662,22710,255 2 3798
-:O "
-char220 13662,22710,255 2 3804
-:U "
-char201 11220,23640 2 3785
-'E "
-char239 5856,17355 2 3823
-:i "
-char223 11709,18315,255 2 3807
-ss "
-char212 13662,23415,255 2 3796
-^O "
-char193 13662,23640 2 3777
-'A "
-char195 13662,23121 2 3779
-~A "
-char227 10734,17844,255 2 3811
-~a "
-char208 13662,18135 2 3792
--D "
-char240 10734,18531,255 2 3824
-Sd "
-char205 5856,23640 2 3789
-'I "
-char204 5856,23640 2 3788
-`I "
-char211 13662,23640,255 2 3795
-'O "
-char210 13662,23640,255 2 3794
-`O "
-char213 13662,23121,255 2 3797
-~O "
-char245 10734,17844,255 2 3829
-~o "
-vS 12684,23415,255 2 51795
-vs 9759,17940,255 2 51827
-char218 13662,23640,255 2 3802
-'U "
-:Y 12198,22710 2 51801
-char255 10734,17355,4680 3 3839
-:y "
-char222 12198,18135 2 3806
-TP "
-char254 10734,18165,4680 3 3838
-Tp "
-char181 14637,12630,4350 0 3765
-char182 12198,19635,4200 2 3766
-ps "
-char190 17565,18675,975 2 3774
-34 "
-\- 17565,8175 0 51757
-char188 17565,18675,975 2 3772
-14 "
-char189 17565,18675,975 2 3773
-12 "
-char170 7317,18360 2 3754
-Of "
-char186 7317,18360 2 3770
-Om "
-char171 11709,11010 0 3755
-Fo "
-char187 11709,11010 0 3771
-Fc "
-char177 17565,12210,213 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 17565,10185 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 7317,18465 2 3762
-S2 "
-char179 7317,18465 2 3763
-S3 "
-char184 12198,195348,4755 3 3768
-ac "
-char185 7317,18345 2 3769
-S1 "
-char215 17565,12216 0 3799
-char247 17565,11610 0 3831
-char183 5856,10755 0 3767
-pc "
-fm 5856,18105 2 51873
-sd 12198,18105 2 51874
-dg 12198,18135 2 51755
-tm 16101,17850 2 51796
-ah 12198,17940 2 51935
-ao 12198,19005 2 51930
-f/ 2439,18675,975 2 51759
-em 17565,7350 0 51789
-en 12198,7350 0 51790
-dd 12198,18135 2 51773
-.i 5856,12630 0 51957
-aq 5856,18135 2 3623
-bu 13173,14226 0 51889
-'C 13173,23640,255 2 20166
-'c 10245,18165,255 2 20198
-lq 9270,18135 2 51838
-rq 9270,18135 2 51746
-Bq 9270,3006,2694 0 51772
-vz 8781,17940 2 51834
-fi 12198,18315 2 51881
-fl 12684,18315 2 51882
-ff 13662,18315 2 51883
-Fi 17826,18315 2 51884
-Fl 17694,18315 2 51885
-ij 9759,18165,4995 3 51958
-bq 5856,3006,2694 0 51756
-%0 22443,18675,975 2 51901
-char175 12198,16440 0 3759
-a- "
-ab 12198,17940 2 51926
-a. 12198,17700 2 51927
-oe 16587,12885,255 0 51823
-OE 18051,18270,135 2 51791
-fo 6342,11010 0 51886
-fc 6342,11010 0 51887
-sq 19029,15624 0 51899
-/L 10245,18135 2 51944
-/l 4878,18165 2 51960
-a" 12198,18165 2 51933
-ho 12198,363,4077 0 51934
-vZ 12198,23415 2 51802
-IJ 17076,18135,255 2 51942
diff --git a/contrib/groff/devlj4/UI b/contrib/groff/devlj4/UI
deleted file mode 100644
index 12bcc26..0000000
--- a/contrib/groff/devlj4/UI
+++ /dev/null
@@ -1,983 +0,0 @@
-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 -5853
-P . -5364
-P , -5364
-V A -3414
-A V -4389
-T o -4389
-T r -4389
-T c -4389
-T e -4389
-T d -4389
-T s -4389
-T y -4389
-T a -4389
-T w -4389
-T u -4389
-T J -4389
-L T -4389
-L Y -4878
-Y o -3903
-Y e -3903
-Y a -3414
-Y J -3903
-A W -3903
-W A -1950
-T A -3414
-V o -2439
-V e -2439
-V a -2439
-Y A -3414
-F A -2925
-F . -3903
-F , -3903
-A T -4389
-A Y -4389
-v . -3903
-v , -3903
-y . -3903
-y , -3903
-T . -3903
-T , -3903
-L W -3903
-P A -2439
-V J -2439
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -975
-W e -975
-W a -975
-W . -2925
-W , -2925
-r . -2439
-r , -2439
-w . -3414
-w , -3414
-Y u -2439
-A v -2925
-A y -2439
-A w -2439
-o . -2439
-o , -2439
-p . -2439
-p , -2439
-e . -1950
-e , -1950
-b . -2439
-b , -2439
-O T -2439
-O V -1950
-O Y -2439
-O . -1950
-O , -1950
-L y -2925
-L O -2439
-L G -1950
-L C -1950
-L Q -1461
-P J -975
-V y -1461
-V u -1461
-V O -975
-V G -975
-V C -975
-V Q -975
-D T -2439
-D V -1950
-D Y -2439
-D . -1950
-D , -1950
-Y O -975
-Y G -975
-Y C -975
-Y Q -975
-F o -1461
-F e -1461
-F a -975
-c . -1950
-c , -1950
-O A -975
-O W -975
-L U -1461
-R T -1461
-R V -1461
-R Y -1461
-R W -975
-G T -1950
-P o -975
-P g -975
-P e -975
-P a -975
-C A -975
-C . -1950
-C , -1950
-D A -975
-D W -975
-B T -1461
-B Y -1461
-B . -1950
-B , -1950
-F J -1461
-A O -1461
-A G -1461
-A C -1461
-A U -1461
-A Q -1461
-W r -486
-W y -486
-W u -486
-W O -486
-W G -486
-W C -486
-W J -975
-W Q -486
-J A -1461
-J . -2439
-J , -2439
-U A -975
-U . -1950
-U , -1950
-Q W -975
-f . -1950
-f , -1950
-T O -975
-T G -975
-T C -975
-T Q -975
-O X -975
-L o -1950
-L e -1950
-L q -1950
-G V -1950
-G Y -1950
-G W -975
-G . -1461
-G , -1461
-P T -1461
-P V -1461
-P Y -1461
-C T -1461
-C V -1461
-C Y -1461
-D X -975
-B V -1461
-B X -975
-B A -975
-B W -975
-S . -1950
-S , -1950
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -1461
-K o -975
-K e -975
-K y -975
-K w -975
-K O -975
-K G -975
-K C -975
-K Q -975
-o v -1461
-o y -975
-o x -1461
-o w -975
-h v -1461
-h y -975
-n v -1461
-n y -975
-m v -1461
-m y -975
-r g -486
-g . -975
-g , -975
-p v -1461
-p y -975
-p x -1461
-c v -1461
-c y -975
-c w -975
-v o -975
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -1461
-e y -975
-b v -1461
-b y -975
-b w -975
-s . -1461
-s , -1461
-y o -975
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-f g -486
-x o -1461
-x g -1461
-x c -1461
-x e -1461
-x d -1461
-x a -1461
-x q -1461
-a v -1461
-a y -975
-a w -975
-w o -975
-w g -975
-w c -975
-w d -975
-w a -975
-w q -975
-T i -975
-T S -975
-L a -1461
-L S -1461
-G X -486
-G A -486
-P s -486
-P Z -975
-P X -1461
-P W -975
-C X -975
-C W -975
-V i -975
-V S -975
-S T -1461
-S V -1461
-S Y -1461
-S X -975
-S A -975
-S W -975
-Y i -975
-Y S -975
-X a -1461
-X u -1461
-X S -1461
-A t -975
-A g -1461
-A c -1461
-A d -1461
-A a -1461
-A u -1461
-A q -1461
-A S -1461
-W i -486
-W S -486
-K c -975
-K u -975
-K S -975
-t g -486
-t . -975
-t , -975
-h w -975
-h . -975
-h , -975
-n w -975
-n . -975
-n , -975
-m w -975
-m . -975
-m , -975
-l . -975
-l , -975
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-i . -975
-i , -975
-p w -975
-c x -975
-v e -975
-v s -486
-e x -975
-e w -975
-z . -975
-z , -975
-d . -975
-d , -975
-s v -975
-s y -975
-s x -486
-s w -975
-y e -975
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -975
-x . -975
-x , -975
-a . -975
-a , -975
-w e -975
-w s -486
-j . -975
-j , -975
-u . -975
-k o -486
-k g -486
-k c -486
-k e -486
-k d -486
-k a -486
-k q -486
-k . -975
-k , -975
-O Z -975
-H . -975
-H , -975
-N . -975
-N , -975
-M . -975
-M , -975
-L J -975
-L . -975
-L , -975
-R . -975
-R , -975
-G Z -486
-I . -975
-I , -975
-C Z -975
-E . -975
-E , -975
-Z o -975
-Z e -975
-Z d -975
-Z s -975
-Z y -975
-Z a -975
-Z w -975
-Z u -975
-Z O -975
-Z G -975
-Z C -975
-Z S -975
-Z J -975
-Z Q -975
-Z . -975
-Z , -975
-D Z -975
-B Z -975
-S Z -975
-X J -975
-X . -975
-X , -975
-A s -975
-A J -975
-A . -975
-A , -975
-K a -975
-K J -975
-K . -975
-K , -975
-t o -486
-t c -486
-t e -486
-t d -486
-t s -486
-t a -486
-t q -486
-o t -486
-o z -486
-h t -486
-n t -486
-m t -486
-r s -486
-p t -486
-p z -486
-c t -486
-c z -486
-e t -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z s -486
-z a -486
-z q -486
-b t -486
-b z -486
-s t -486
-s z -486
-x t -486
-x v -486
-x y -486
-x w -486
-x u -486
-a t -486
-k s -486
-X T -486
-X V -486
-X Y -486
-X W -486
-X U -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -7317
-L ' -7317
-T char173 -4389
-T hy -4389
-T - -4389
-T en -4389
-T em -4389
-A cq -3903
-A ' -3903
-char173 T -4389
-hy T -4389
-- T -4389
-en T -4389
-em T -4389
-Y char173 -2439
-Y hy -2439
-Y - -2439
-Y en -2439
-Y em -2439
-p cq -2925
-p ' -2925
-c cq -2925
-c ' -2925
-e cq -2925
-e ' -2925
-b cq -2925
-b ' -2925
-a cq -2925
-a ' -2925
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -2439
-h ' -2439
-n cq -2439
-n ' -2439
-m cq -2439
-m ' -2439
-R cq -975
-R ' -975
-W char173 -486
-W hy -486
-W - -486
-W en -486
-W em -486
-cq d -2925
-' d -2925
-s cq -1950
-s ' -1950
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -975
-K hy -975
-K - -975
-K en -975
-K em -975
-cq s -1950
-' s -1950
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-x cq -1461
-x ' -1461
-X cq -1461
-X ' -1461
-K cq -1461
-K ' -1461
-t g -486
-t cq -975
-t ' -975
-l cq -975
-l ' -975
-r cq -975
-r ' -975
-g cq -975
-g ' -975
-i cq -975
-i ' -975
-v cq -975
-v ' -975
-z cq -975
-z ' -975
-d cq -975
-d ' -975
-y cq -975
-y ' -975
-f cq -975
-f ' -975
-w cq -975
-w ' -975
-j cq -975
-j ' -975
-u cq -975
-u ' -975
-k cq -975
-k ' -975
-T cq -975
-T ' -975
-O cq -975
-O ' -975
-H cq -975
-H ' -975
-N cq -975
-N ' -975
-M cq -975
-M ' -975
-G cq -975
-G ' -975
-I cq -975
-I ' -975
-P cq -975
-P ' -975
-C cq -975
-C ' -975
-V cq -975
-V ' -975
-E cq -975
-E ' -975
-Z cq -975
-Z ' -975
-Z char173 -975
-Z hy -975
-Z - -975
-Z en -975
-Z em -975
-D cq -975
-D ' -975
-B cq -975
-B ' -975
-S cq -975
-S ' -975
-Y cq -975
-Y ' -975
-F cq -975
-F ' -975
-W cq -975
-W ' -975
-J cq -975
-J ' -975
-U cq -975
-U ' -975
-cq t -1461
-' t -1461
-cq n -1461
-' n -1461
-cq m -1461
-' m -1461
-cq l -975
-' l -975
-cq r -1461
-' r -1461
-cq v -1461
-' v -1461
-cq T -975
-' T -975
-cq N -975
-' N -975
-cq M -975
-' M -975
-cq L -975
-' L -975
-cq R -975
-' R -975
-cq D -975
-' D -975
-x char173 -486
-x hy -486
-x - -486
-x en -486
-x em -486
-charset
-! 8781,18165,0,1956,81,1000 2 3617
-dq 13173,18246,0,2049,-4233,1000 2 3618
-" "
-sh 16587,18105,0,1020,-1137,1000 2 3619
-# "
-Do 16587,18750,765,0,-2391 2 3620
-$ "
-% 26346,18720,840,0,-3195 2 3621
-& 20004,18495,360,0,-942 2 3622
-cq 8781,18135,0,3114,-2751,1000 2 51751
-' "
-( 8781,18135,2397,2823,-1443,1000 2 3624
-) 8781,18135,2397,0,1764 2 3625
-* 16587,18495,0,0,-4155 2 3626
-+ 26346,14745,105,0,-4860 0 3627
-, 8781,3000,3135,0,1794 0 3628
-char173 8781,7680,0,561,147,561 0 3629
-hy "
-- "
-. 8781,2970,0,0,192 0 3630
-sl 8781,18135,1500,4326,3072,1000 2 3631
-/ "
-0 16587,18465,360,1602,-243,1000 2 3632
-1 16587,18105,0,0,-4467 2 3633
-2 16587,18465,0,540,78,540 2 3634
-3 16587,18465,360,1374,-354,1000 2 3635
-4 16587,18105,0,843,609,843 2 3636
-5 16587,18105,360,1494,-396,1000 2 3637
-6 16587,18465,360,1632,-966,1000 2 3638
-7 16587,18105,0,1188,-2583,1000 2 3639
-8 16587,18465,360,1356,-177,1000 2 3640
-9 16587,18465,360,630,171,630 2 3641
-: 8781,12615,0,330,192,330 0 3642
-; 8781,12615,3135,405,1794,405 0 3643
-< 26346,16068,0,0,-3981 0 3644
-= 26346,10500,0,0,-4950 0 3645
-> 26346,16068,0,0,-3981 0 3646
-? 13662,18315,0,1380,-1017,1000 2 3647
-at 26349,21030,2745,243,-1713,243 2 3648
-@ "
-A 19515,18135,0,0,2400 2 3649
-B 16587,18135,0,1641,684,1000 2 3650
-C 18540,18495,360,1554,-990,1000 2 3651
-D 19029,18135,0,477,804,477 2 3652
-E 15126,18135,0,3099,699,1000 2 3653
-F 14637,18135,0,3549,702,1000 2 3654
-G 19515,18495,360,1095,-1047,1000 2 3655
-H 19029,18135,0,2322,852,1000 2 3656
-I 7317,18135,0,2439,852,1000 2 3657
-J 14637,18135,360,2559,1242,1000 2 3658
-K 17565,18135,0,2910,417,1000 2 3659
-L 14148,18135,0,0,693 2 3660
-M 23907,18135,0,2115,669,1000 2 3661
-N 19029,18135,0,2688,750,1000 2 3662
-O 20004,18495,360,582,-948,582 2 3663
-P 15612,18135,0,2715,708,1000 2 3664
-Q 20490,18495,360,168,-1080,168 2 3665
-R 17076,18135,0,1728,729,1000 2 3666
-S 17076,18495,360,1455,-21,1000 2 3667
-T 16587,18135,0,3801,-2427,1000 2 3668
-U 19029,18135,360,2250,-801,1000 2 3669
-V 19029,18135,0,3789,-2919,1000 2 3670
-W 26346,18135,0,4122,-2541,1000 2 3671
-X 19029,18135,0,3081,1605,1000 2 3672
-Y 18051,18135,0,3720,-2763,1000 2 3673
-Z 16101,18135,0,2598,1719,1000 2 3674
-lB 8781,18135,2397,3690,1038,1000 2 3675
-[ "
-rs 8781,18135,1500,0,-2547 2 3676
-\ "
-rB 8781,18135,2397,2013,2715,1000 2 3677
-] "
-ha 13173,19758,0,36,36,36 2 51875
-_ 13173,191367,6588,1317,1317,1000 3 3679
-oq 8781,18135,0,2658,-2295,1000 2 51808
-` "
-a 14148,12990,360,87,729,87 0 3681
-b 15126,18165,360,129,1092,129 2 3682
-c 14148,12990,360,534,114,534 0 3683
-d 15126,18165,360,2658,144,1000 2 3684
-e 14148,12990,360,567,153,567 0 3685
-f 9759,18315,0,3546,-33,1000 2 3686
-g 15126,12990,5169,1059,1470,1000 1 3687
-h 15126,18165,0,126,1185,126 2 3688
-i 6342,18165,0,3060,1143,1000 2 3689
-j 6342,18165,4995,2970,4578,1000 3 3690
-k 14148,18165,0,1248,1092,1000 2 3691
-l 6342,18165,0,2937,1137,1000 2 3692
-m 22932,12990,0,363,1182,363 0 3693
-n 15126,12990,0,117,1182,117 0 3694
-o 15126,12990,360,12,261,12 0 3695
-p 15126,12990,4680,9,2592,9 1 3696
-q 15126,12990,4680,1146,132,1000 1 3697
-r 9270,12990,0,2499,1026,1000 0 3698
-s 13173,12990,360,579,960,579 0 3699
-t 9759,15843,360,2022,-864,1000 0 3700
-u 15126,12630,360,1023,261,1000 0 3701
-v 14637,12630,0,1902,-1086,1000 0 3702
-w 22932,12630,0,1953,-1578,1000 0 3703
-x 14637,12630,0,1035,1767,1000 0 3704
-y 14637,12630,4680,1992,-963,1000 1 3705
-z 12684,12630,0,1344,1365,1000 0 3706
-lC 11709,20130,6075,3315,-1740,1000 3 3707
-{ "
-ba 13173,19758,6588,0,-4596 3 3708
-| "
-rC 11709,20130,6075,0,3183 3 3709
-} "
-ti 26346,8952,0,0,-4029 0 51876
-char192 19515,23100,0,0,2400 2 3776
-`A "
-char194 19515,23085,0,0,2400 2 3778
-^A "
-char200 15126,23100,0,3099,699,1000 2 3784
-`E "
-char202 15126,23085,0,3099,699,1000 2 3786
-^E "
-char203 15126,22638,0,3099,699,1000 2 3787
-:E "
-char206 7317,23085,0,5385,852,1000 2 3790
-^I "
-char207 7317,22638,0,6231,852,1000 2 3791
-:I "
-char180 16587,17970,0,0,-7479 2 3764
-aa "
-ga 16587,17970,0,0,-6621 2 3680
-a^ 16587,18105,0,0,-5334 2 3678
-^ "
-char168 16587,17943,0,174,-6261,174 2 3752
-ad "
-a~ 16587,17724,0,312,-5604,312 2 3710
-~ "
-char217 19029,23100,360,2250,-801,1000 2 3801
-`U "
-char219 19029,23085,360,2250,-801,1000 2 3803
-^U "
-char221 18051,23100,0,3720,-2763,1000 2 3805
-'Y "
-char253 14637,17970,4680,1992,-963,1000 3 3837
-'y "
-char176 16587,18465,0,0,-4104 2 3760
-de "
-char199 18540,18495,4875,1554,-990,1000 3 3783
-,C "
-char231 14148,12990,4875,534,114,534 1 3815
-,c "
-char209 19029,23019,0,2688,750,1000 2 3793
-~N "
-char241 15126,17724,0,1044,1182,1000 2 3825
-~n "
-char161 8781,12576,5589,54,1983,54 1 3745
-r! "
-char191 13662,12573,5742,0,921 1 3775
-r? "
-char164 16587,15684,0,126,-1533,126 0 3748
-Cs "
-char163 16587,18465,0,2265,291,1000 2 3747
-Po "
-char165 16587,18105,0,4818,-1089,1000 2 3749
-Ye "
-char167 16587,18495,360,0,-3750 2 3751
-sc "
-Fn 16587,18315,0,330,-3528,330 2 51871
-char162 16587,18750,765,0,-2322 2 3746
-ct "
-char226 14148,18105,360,711,729,711 2 3810
-^a "
-char234 14148,18105,360,711,153,711 2 3818
-^e "
-char244 15126,18105,360,222,261,222 2 3828
-^o "
-char251 15126,18105,360,1023,261,1000 2 3835
-^u "
-char225 14148,17970,360,690,729,690 2 3809
-'a "
-char233 14148,17970,360,690,153,690 2 3817
-'e "
-char243 15126,17970,360,201,261,201 2 3827
-'o "
-char250 15126,17970,360,1023,261,1000 2 3834
-'u "
-char224 14148,17970,360,87,729,87 2 3808
-`a "
-char232 14148,17970,360,567,153,567 2 3816
-`e "
-char242 15126,17970,360,12,261,12 2 3826
-`o "
-char249 15126,17970,360,1023,261,1000 2 3833
-`u "
-char228 14148,17943,360,1395,729,1000 2 3812
-:a "
-char235 14148,17943,360,1395,153,1000 2 3819
-:e "
-char246 15126,17943,360,906,261,906 2 3830
-:o "
-char252 15126,17943,360,1023,261,1000 2 3836
-:u "
-char197 19515,25923,0,0,2400 2 3781
-oA "
-char238 6342,18105,0,4614,1155,1000 2 3822
-^i "
-char216 20004,18495,360,2847,1161,1000 2 3800
-/O "
-char198 25857,18135,0,3231,2919,1000 2 3782
-AE "
-char229 14148,20490,360,87,729,87 2 3813
-oa "
-char237 6342,17970,0,4593,1155,1000 2 3821
-'i "
-char248 15126,12990,360,1242,1386,1000 0 3832
-/o "
-char230 22443,12990,360,165,384,165 0 3814
-ae "
-char196 19515,22638,0,132,2400,132 2 3780
-:A "
-char236 6342,17970,0,1737,1155,1000 2 3820
-`i "
-char214 20004,22638,360,582,-948,582 2 3798
-:O "
-char220 19029,22638,360,2250,-801,1000 2 3804
-:U "
-char201 15126,23100,0,3099,699,1000 2 3785
-'E "
-char239 6342,17943,0,5298,1155,1000 2 3823
-:i "
-char223 16101,18315,360,1320,939,1000 2 3807
-ss "
-char212 20004,23085,360,582,-948,582 2 3796
-^O "
-char193 19515,23100,0,0,2400 2 3777
-'A "
-char195 19515,23019,0,936,2400,936 2 3779
-~A "
-char227 14148,17724,360,1533,729,1000 2 3811
-~a "
-char208 19029,18135,0,477,804,477 2 3792
--D "
-char240 15126,18315,360,357,108,357 2 3824
-Sd "
-char205 7317,23100,0,5619,852,1000 2 3789
-'I "
-char204 7317,23100,0,2787,852,1000 2 3788
-`I "
-char211 20004,23100,360,582,-948,582 2 3795
-'O "
-char210 20004,23100,360,582,-948,582 2 3794
-`O "
-char213 20004,23019,360,693,-948,693 2 3797
-~O "
-char245 15126,17724,360,1044,261,1000 2 3829
-~o "
-vS 17076,23085,360,1629,-21,1000 2 51795
-vs 13173,18234,360,2241,960,1000 2 51827
-char218 19029,23100,360,2250,-801,1000 2 3802
-'U "
-:Y 18051,22638,0,3720,-2763,1000 2 51801
-char255 14637,17943,4680,1992,-963,1000 3 3839
-:y "
-char222 15612,18135,0,1692,717,1000 2 3806
-TP "
-char254 15126,18165,4680,9,2592,9 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,1000 0 3765
-char182 16590,19635,4200,0,-2379 2 3766
-ps "
-char190 26346,18465,945,0,-3291 2 3774
-34 "
-\- 26346,8070,0,0,-4869 0 51757
-char188 26346,18465,945,0,-3621 2 3772
-14 "
-char189 26346,18465,945,0,-3087 2 3773
-12 "
-char170 10734,18465,0,1791,-1671,1000 2 3754
-Of "
-char186 10734,18465,0,2232,-1599,1000 2 3770
-Om "
-char171 14637,11046,0,468,-876,468 0 3755
-Fo "
-char187 14637,11046,0,0,537 0 3771
-Fc "
-char177 26346,14910,0,0,-4770 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4683,-2892,1000 2 3753
-co "
-char172 26346,11697,0,0,-4425 0 3756
-no "
-char174 13173,19635,0,4683,-2892,1000 2 3758
-rg "
-char178 10245,18465,0,1800,-1065,1000 2 3762
-S2 "
-char179 10245,18465,0,1941,-1134,1000 2 3763
-S3 "
-char184 16587,195048,4875,0,-1797 3 3768
-ac "
-char185 10245,18345,0,693,-3387,693 2 3769
-S1 "
-char215 26346,14010,0,0,-6081 0 3799
-char247 26346,12255,0,0,-4845 0 3831
-char183 8781,10935,0,0,-2136 0 3767
-pc "
-fm 8781,18105,0,1911,-3000,1000 2 51873
-sd 16587,18105,0,0,-3000 2 51874
-dg 16587,18135,0,0,-2772 2 51755
-tm 16128,17850,0,2196,-2760,1000 2 51796
-ah 16587,18234,0,534,-6378,534 2 51935
-ao 16587,20490,0,0,-6318 2 51930
-f/ 2439,18465,945,8739,7344,1000 2 51759
-em 26346,7380,0,0,-2343 0 51789
-en 16587,7470,0,24,-378,24 0 51790
-dd 16587,18135,0,0,-2799 2 51773
-.i 6342,12630,0,1374,1155,1000 0 51957
-aq 8781,18246,0,2136,-4233,1000 2 3623
-bu 13173,14226,0,0,-498 0 51889
-'C 18540,23100,360,1554,-990,1000 2 20166
-'c 14148,17970,360,690,114,690 2 20198
-lq 13173,18135,0,3186,-2322,1000 2 51838
-rq 13173,18135,0,3246,-2382,1000 2 51746
-Bq 13173,2925,3150,0,1596 0 51772
-vz 12684,18234,0,2487,1365,1000 2 51834
-fi 16101,18315,0,2976,-249,1000 2 51881
-fl 16101,18315,0,2811,-216,1000 2 51882
-ff 18051,18315,0,3666,-165,1000 2 51883
-Fi 24396,18315,0,2886,-174,1000 2 51884
-Fl 24396,18315,0,2748,-168,1000 2 51885
-ij 12684,18165,4995,2970,1143,1000 3 51958
-bq 8781,2925,3150,0,2349 0 51756
-%0 26346,18720,840,426,-315,426 2 51901
-char175 16587,17040,0,327,-5010,327 2 3759
-a- "
-ab 16587,17937,0,0,-5469 2 51926
-a. 16587,17943,0,0,-8355 2 51927
-oe 23907,12990,360,141,-243,141 0 51823
-OE 26346,18270,135,3102,-987,1000 2 51791
-fo 9759,11046,0,438,-1293,438 0 51886
-fc 9759,11046,0,0,-363 0 51887
-sq 19029,15624,0,0,-2022 0 51899
-/L 14148,18135,0,0,693 2 51944
-/l 6342,18165,0,2937,1122,1000 2 51960
-a" 16587,17970,0,2460,-5865,1000 2 51933
-ho 16587,696,4458,0,-6957 0 51934
-vZ 16101,23085,0,2598,1719,1000 2 51802
-IJ 20976,18135,360,2559,852,1000 2 51942
diff --git a/contrib/groff/devlj4/UR b/contrib/groff/devlj4/UR
deleted file mode 100644
index b7eba7c..0000000
--- a/contrib/groff/devlj4/UR
+++ /dev/null
@@ -1,880 +0,0 @@
-name UR
-spacewidth 8781
-pcltypeface 4148
-pclproportional 1
-pclweight 0
-pclstyle 0
-ligatures fi fl ff ffi ffl 0
-kernpairs
-L V -3903
-P . -4389
-P , -4389
-V A -3903
-A V -3903
-T o -4878
-T r -4878
-T c -4878
-T e -4878
-T d -4878
-T s -4878
-T y -4878
-T a -4878
-T w -4878
-T u -4878
-T J -4878
-L T -4878
-L Y -4389
-Y o -4389
-Y e -4389
-Y a -4389
-Y J -4389
-A W -2439
-W A -2439
-T A -4389
-V o -2925
-V e -2925
-V a -2925
-Y A -4389
-F A -2925
-F . -3903
-F , -3903
-A T -4389
-A Y -4389
-v . -3903
-v , -3903
-y . -3903
-y , -3903
-T . -3903
-T , -3903
-L W -2439
-P A -2925
-V J -3903
-V . -3903
-V , -3903
-Y . -3903
-Y , -3903
-W o -1950
-W e -1950
-W a -1950
-W . -3414
-W , -3414
-r . -2439
-r , -2439
-w . -3414
-w , -3414
-Y u -2925
-A v -2439
-A y -1950
-A w -2439
-o . -2925
-o , -2925
-p . -2925
-p , -2925
-e . -2925
-e , -2925
-b . -2925
-b , -2925
-O T -1950
-O V -1461
-O Y -1950
-O . -2925
-O , -2925
-L y -2439
-L O -1950
-L G -1950
-L C -1950
-L Q -1950
-P J -2439
-V y -1461
-V u -1461
-V O -1461
-V G -1461
-V C -1461
-V Q -1461
-D T -1950
-D V -1461
-D Y -1950
-D . -2925
-D , -2925
-Y O -1950
-Y G -1950
-Y C -1950
-Y Q -1950
-F o -1461
-F e -1461
-F a -1461
-c . -2439
-c , -2439
-O A -1461
-O W -975
-L U -1461
-R T -1461
-R V -1461
-R Y -1461
-R W -975
-G T -1461
-P o -1461
-P g -1461
-P e -1461
-P a -1461
-C A -1461
-C . -2439
-C , -2439
-D A -1461
-D W -975
-B T -1461
-B Y -1461
-B . -1950
-B , -1950
-F J -2439
-A O -1461
-A G -1461
-A C -1461
-A U -1461
-A Q -1461
-W r -975
-W y -975
-W u -975
-W O -975
-W G -975
-W C -975
-W J -2439
-W Q -975
-J A -1461
-J . -2439
-J , -2439
-U A -1461
-U . -2439
-U , -2439
-Q W -975
-f . -1950
-f , -1950
-T O -1950
-T G -1950
-T C -1950
-T Q -1950
-O X -1461
-L o -1950
-L e -1950
-L q -1950
-G V -1461
-G Y -1461
-G W -975
-G . -975
-G , -975
-P T -486
-P V -486
-P Y -486
-C T -1461
-C V -1461
-C Y -1461
-D X -1461
-B V -1461
-B X -975
-B A -975
-B W -975
-S . -1950
-S , -1950
-X o -1461
-X e -1461
-X y -1461
-X O -1461
-X G -1461
-X C -1461
-X Q -1461
-A o -1461
-A e -1461
-K o -1461
-K e -1461
-K y -1461
-K w -1461
-K O -1461
-K G -1461
-K C -1461
-K Q -1461
-o v -975
-o y -486
-o x -975
-o w -975
-h v -975
-h y -486
-n v -975
-n y -486
-m v -975
-m y -486
-r g -486
-g . -975
-g , -975
-p v -975
-p y -486
-p x -975
-c v -975
-c y -486
-c w -975
-v o -975
-v g -975
-v c -975
-v d -975
-v a -975
-v q -975
-e v -975
-e y -486
-b v -975
-b y -486
-b w -975
-s . -1461
-s , -1461
-y o -975
-y g -975
-y c -975
-y d -975
-y a -975
-y q -975
-f g -486
-x o -975
-x g -975
-x c -975
-x e -975
-x d -975
-x a -975
-x q -975
-a v -975
-a y -486
-a w -975
-w o -975
-w g -975
-w c -975
-w d -975
-w a -975
-w q -975
-T i -975
-T S -975
-L a -975
-L S -975
-P s -486
-P Z -486
-P X -486
-P W -486
-C X -1461
-C W -975
-C J -975
-V i -975
-V S -975
-S T -975
-S V -975
-S Y -975
-S X -975
-S A -975
-S W -975
-Y i -975
-Y S -975
-X a -975
-X u -1461
-X S -975
-A t -975
-A g -1461
-A c -1461
-A d -1461
-A a -975
-A u -1461
-A q -1461
-A S -975
-W i -975
-W S -975
-K c -1461
-K u -1461
-K S -975
-t g -486
-t . -975
-t , -975
-o f -486
-h w -975
-h . -975
-h , -975
-n w -975
-n . -975
-n , -975
-m w -975
-m . -975
-m , -975
-l . -975
-l , -975
-r o -486
-r c -486
-r e -486
-r d -486
-r a -486
-r q -486
-i . -975
-i , -975
-p f -486
-p w -975
-c f -486
-c x -975
-v e -975
-v s -486
-e f -486
-e x -975
-e w -975
-z . -975
-z , -975
-d . -975
-d , -975
-b f -486
-s v -486
-s y -486
-s f -486
-s x -486
-s w -486
-y e -975
-y s -486
-f o -486
-f c -486
-f e -486
-f d -486
-f s -486
-f a -486
-f q -486
-x s -486
-x . -975
-x , -975
-a . -975
-a , -975
-w e -975
-w s -486
-j . -975
-j , -975
-u . -975
-k o -975
-k g -975
-k c -975
-k e -975
-k d -975
-k a -975
-k q -975
-k . -975
-k , -975
-O Z -486
-O J -975
-H . -975
-H , -975
-N . -975
-N , -975
-M . -975
-M , -975
-L . -975
-L , -975
-R . -975
-R , -975
-I . -975
-I , -975
-C Z -486
-E . -975
-E , -975
-Z o -486
-Z e -486
-Z d -486
-Z s -486
-Z y -486
-Z a -486
-Z w -486
-Z u -486
-Z O -486
-Z G -486
-Z C -486
-Z S -486
-Z Q -486
-Z . -975
-Z , -975
-D Z -486
-D J -975
-B Z -486
-B J -975
-S Z -486
-S J -975
-X . -975
-X , -975
-A s -486
-A . -975
-A , -975
-J J -975
-U J -975
-K a -975
-K . -975
-K , -975
-t o -486
-t c -486
-t e -486
-t d -486
-t s -486
-t a -486
-t q -486
-o z -486
-h f -486
-n f -486
-m f -486
-r s -486
-p z -486
-c z -486
-e z -486
-z o -486
-z g -486
-z c -486
-z e -486
-z d -486
-z s -486
-z a -486
-z q -486
-b z -486
-s z -486
-a f -486
-k s -486
-A f -486
-K T -486
-K V -486
-K Y -486
-K W -486
-K U -486
-L cq -6342
-L ' -6342
-T char173 -4878
-T hy -4878
-T - -4878
-T en -4878
-T em -4878
-A cq -2925
-A ' -2925
-char173 T -4878
-hy T -4878
-- T -4878
-en T -4878
-em T -4878
-Y char173 -2925
-Y hy -2925
-Y - -2925
-Y en -2925
-Y em -2925
-p cq -1950
-p ' -1950
-c cq -1461
-c ' -1461
-e cq -1950
-e ' -1950
-b cq -1950
-b ' -1950
-a cq -1461
-a ' -1461
-V char173 -1461
-V hy -1461
-V - -1461
-V en -1461
-V em -1461
-h cq -1461
-h ' -1461
-n cq -1461
-n ' -1461
-m cq -1461
-m ' -1461
-W char173 -975
-W hy -975
-W - -975
-W en -975
-W em -975
-cq d -3414
-' d -3414
-s cq -486
-s ' -486
-L char173 -1950
-L hy -1950
-L - -1950
-L en -1950
-L em -1950
-X char173 -1461
-X hy -1461
-X - -1461
-X en -1461
-X em -1461
-A char173 -1461
-A hy -1461
-A - -1461
-A en -1461
-A em -1461
-K char173 -1461
-K hy -1461
-K - -1461
-K en -1461
-K em -1461
-cq s -1950
-' s -1950
-char173 X -1461
-hy X -1461
-- X -1461
-char173 A -1461
-hy A -1461
-- A -1461
-en X -1461
-en A -1461
-em X -1461
-K cq -486
-K ' -486
-t g -486
-b f -486
-Z char173 -486
-Z hy -486
-Z - -486
-Z en -486
-Z em -486
-cq t -975
-' t -975
-cq n -1461
-' n -1461
-cq m -1461
-' m -1461
-cq r -1461
-' r -1461
-cq v -1461
-' v -1461
-charset
-! 8781,18165 2 3617
-dq 13173,18237 2 3618
-" "
-sh 16587,18105 2 3619
-# "
-Do 16587,18825,720 2 3620
-$ "
-% 26346,18720,840 2 3621
-& 20004,18495,360 2 3622
-cq 8781,18135 2 51751
-' "
-( 8781,18135,2550 2 3624
-) 8781,18135,2550 2 3625
-* 16587,18495 2 3626
-+ 26346,14775,105 0 3627
-, 8781,3030,3075 0 3628
-char173 8781,7755 0 3629
-hy "
-- "
-. 8781,3030 0 3630
-sl 8781,18135,1380 2 3631
-/ "
-0 16587,18465,360 2 3632
-1 16587,18105 2 3633
-2 16587,18465 2 3634
-3 16587,18465,360 2 3635
-4 16587,18105 2 3636
-5 16587,18105,360 2 3637
-6 16587,18465,360 2 3638
-7 16587,18105 2 3639
-8 16587,18465,360 2 3640
-9 16587,18465,360 2 3641
-: 8781,12630 0 3642
-; 8781,12630,3075 0 3643
-< 26346,16068 0 3644
-= 26346,10566 0 3645
-> 26346,16068 0 3646
-? 13662,18315 2 3647
-at 26352,21030,2745 2 3648
-@ "
-A 19515,18135 2 3649
-B 16587,18135 2 3650
-C 18540,18495,360 2 3651
-D 19029,18135 2 3652
-E 15126,18135 2 3653
-F 14637,18135 2 3654
-G 19515,18495,360 2 3655
-H 19029,18135 2 3656
-I 7317,18135 2 3657
-J 14637,18135,360 2 3658
-K 17565,18135 2 3659
-L 14148,18135 2 3660
-M 23907,18135 2 3661
-N 19029,18135 2 3662
-O 20004,18495,360 2 3663
-P 15612,18135 2 3664
-Q 20490,18495,360 2 3665
-R 17076,18135 2 3666
-S 17076,18495,360 2 3667
-T 16587,18135 2 3668
-U 19029,18135,360 2 3669
-V 19029,18135 2 3670
-W 26346,18135 2 3671
-X 19029,18135 2 3672
-Y 18051,18135 2 3673
-Z 16101,18135 2 3674
-lB 8781,18135,2370 2 3675
-[ "
-rs 8781,18135,1380 2 3676
-\ "
-rB 8781,18135,2370 2 3677
-] "
-ha 13173,19758 2 51875
-_ 13173,191367,6588 3 3679
-oq 8781,18135 2 51808
-` "
-a 14148,12990,360 0 3681
-b 15126,18165,360 2 3682
-c 14148,12990,360 0 3683
-d 15126,18165,360 2 3684
-e 14148,12990,360 0 3685
-f 9759,18315 2 3686
-g 15126,12990,5088 1 3687
-h 15126,18165 2 3688
-i 6342,18165 2 3689
-j 6342,18165,4995 3 3690
-k 14148,18165 2 3691
-l 6342,18165 2 3692
-m 22932,12990 0 3693
-n 15126,12990 0 3694
-o 15126,12990,360 0 3695
-p 15126,12990,4680 1 3696
-q 15126,12990,4680 1 3697
-r 9270,12990 0 3698
-s 13173,12990,360 0 3699
-t 9759,15963,360 0 3700
-u 15126,12630,360 0 3701
-v 14637,12630 0 3702
-w 22932,12630 0 3703
-x 14637,12630 0 3704
-y 14637,12630,4680 1 3705
-z 12684,12630 0 3706
-lC 11712,20130,6075 3 3707
-{ "
-ba 13173,19758,6588 3 3708
-| "
-rC 11712,20130,6075 3 3709
-} "
-ti 26346,8952 0 51876
-char192 19515,23085 2 3776
-`A "
-char194 19515,23085 2 3778
-^A "
-char200 15126,23085 2 3784
-`E "
-char202 15126,23085 2 3786
-^E "
-char203 15126,22755 2 3787
-:E "
-char206 7317,23085 2 3790
-^I "
-char207 7317,22755 2 3791
-:I "
-char180 16587,18075 2 3764
-aa "
-ga 16587,18075 2 3680
-a^ 16587,17985 2 3678
-^ "
-char168 16587,17775 2 3752
-ad "
-a~ 16587,18294 2 3710
-~ "
-char217 19029,23085,360 2 3801
-`U "
-char219 19029,23085,360 2 3803
-^U "
-char221 18051,23085 2 3805
-'Y "
-char253 14637,18075,4680 3 3837
-'y "
-char176 16587,18465 2 3760
-de "
-char199 18540,18495,5025 3 3783
-,C "
-char231 14148,12990,5025 1 3815
-,c "
-char209 19029,22959 2 3793
-~N "
-char241 15126,18294 2 3825
-~n "
-char161 8781,12645,5520 1 3745
-r! "
-char191 13662,12516,5799 1 3775
-r? "
-char164 16587,15684 0 3748
-Cs "
-char163 16587,18465 2 3747
-Po "
-char165 16587,18105 2 3749
-Ye "
-char167 16587,18495,360 2 3751
-sc "
-Fn 16587,18315 2 51871
-char162 16587,18825,720 2 3746
-ct "
-char226 14148,17985,360 2 3810
-^a "
-char234 14148,17985,360 2 3818
-^e "
-char244 15126,17985,360 2 3828
-^o "
-char251 15126,17985,360 2 3835
-^u "
-char225 14148,18075,360 2 3809
-'a "
-char233 14148,18075,360 2 3817
-'e "
-char243 15126,18075,360 2 3827
-'o "
-char250 15126,18075,360 2 3834
-'u "
-char224 14148,18075,360 2 3808
-`a "
-char232 14148,18075,360 2 3816
-`e "
-char242 15126,18075,360 2 3826
-`o "
-char249 15126,18075,360 2 3833
-`u "
-char228 14148,17775,360 2 3812
-:a "
-char235 14148,17775,360 2 3819
-:e "
-char246 15126,17775,360 2 3830
-:o "
-char252 15126,17775,360 2 3836
-:u "
-char197 19515,25923 2 3781
-oA "
-char238 6342,17985 2 3822
-^i "
-char216 20004,18495,375 2 3800
-/O "
-char198 25857,18165 2 3782
-AE "
-char229 14148,20412,360 2 3813
-oa "
-char237 6342,18075 2 3821
-'i "
-char248 15126,13008,408 0 3832
-/o "
-char230 22443,12990,360 0 3814
-ae "
-char196 19515,22755 2 3780
-:A "
-char236 6342,18075 2 3820
-`i "
-char214 20004,22755,360 2 3798
-:O "
-char220 19029,22755,360 2 3804
-:U "
-char201 15126,23085 2 3785
-'E "
-char239 6342,17775 2 3823
-:i "
-char223 16101,18165,360 2 3807
-ss "
-char212 20004,23085,360 2 3796
-^O "
-char193 19515,23085 2 3777
-'A "
-char195 19515,22959 2 3779
-~A "
-char227 14148,18294,360 2 3811
-~a "
-char208 19029,18135 2 3792
--D "
-char240 15126,18315,360 2 3824
-Sd "
-char205 7317,23085 2 3789
-'I "
-char204 7317,23085 2 3788
-`I "
-char211 20004,23085,360 2 3795
-'O "
-char210 20004,23085,360 2 3794
-`O "
-char213 20004,22959,360 2 3797
-~O "
-char245 15126,18294,360 2 3829
-~o "
-vS 17076,23085,360 2 51795
-vs 13173,17985,360 2 51827
-char218 19029,23085,360 2 3802
-'U "
-:Y 18051,22755 2 51801
-char255 14637,17775,4680 3 3839
-:y "
-char222 15612,18135 2 3806
-TP "
-char254 15126,18165,4680 3 3838
-Tp "
-char181 14637,12630,4350 0 3765
-char182 16587,19635,4200 2 3766
-ps "
-char190 26346,18465,1020 2 3774
-34 "
-\- 26346,8100 0 51757
-char188 26346,18465,1020 2 3772
-14 "
-char189 26346,18465,1020 2 3773
-12 "
-char170 10734,18465 2 3754
-Of "
-char186 10734,18465 2 3770
-Om "
-char171 14637,11085 0 3755
-Fo "
-char187 14637,11085 0 3771
-Fc "
-char177 26346,14985 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 26346,11607 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,18465 2 3762
-S2 "
-char179 10245,18465 2 3763
-S3 "
-char184 16587,194958,5025 3 3768
-ac "
-char185 10245,18345 2 3769
-S1 "
-char215 26346,14010 0 3799
-char247 26346,12315 0 3831
-char183 8781,10509 0 3767
-pc "
-fm 8781,18105 2 51873
-sd 16587,18105 2 51874
-dg 16587,18135 2 51755
-tm 16128,17850 2 51796
-ah 16587,17985 2 51935
-ao 16587,20412 2 51930
-f/ 1464,18465,1020 2 51759
-em 26346,7425 0 51789
-en 16587,7425 0 51790
-dd 16587,18135 2 51773
-.i 6342,12630 0 51957
-aq 8781,18237 2 3623
-bu 13173,14226 0 51889
-'C 18540,23085,360 2 20166
-'c 14148,18075,360 2 20198
-lq 13173,18135 2 51838
-rq 13173,18135 2 51746
-Bq 13173,3015,3060 0 51772
-vz 12684,17985 2 51834
-fi 16101,18315 2 51881
-fl 16101,18315 2 51882
-ff 18051,18315 2 51883
-Fi 24396,18315 2 51884
-Fl 24396,18315 2 51885
-ij 12684,18165,4995 3 51958
-bq 8781,3015,3060 0 51756
-%0 26346,18720,840 2 51901
-char175 16587,16845 2 3759
-a- "
-ab 16587,17985 2 51926
-a. 16587,17775 2 51927
-oe 23907,12990,360 0 51823
-OE 26346,18270,135 2 51791
-fo 9759,11085 0 51886
-fc 9759,11085 0 51887
-sq 19029,15624 0 51899
-/L 14148,18135 2 51944
-/l 6342,18165 2 51960
-a" 16587,18075 2 51933
-ho 16587,1425,4704 1 51934
-vZ 16101,23085 2 51802
-IJ 21354,18135,360 2 51942
diff --git a/contrib/groff/devlj4/generate/Makefile b/contrib/groff/devlj4/generate/Makefile
deleted file mode 100644
index e830e5f..0000000
--- a/contrib/groff/devlj4/generate/Makefile
+++ /dev/null
@@ -1,170 +0,0 @@
-# Copyright (C) 1994 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# Directory containing Autofont TFM files.
-# The TFM files I used are available for ftp as
-#
-# ftp://ftp.hp.com/pub/faxes/software/tfmlj4.exe
-#
-# This is a self-extracting MS-DOS archive (in ZIP format).
-
-# 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 439
-SFLAG=-s
-srcdir=generate
-TEXTMAP=$(srcdir)/text.map
-SPECIALMAP=$(srcdir)/special.map
-
-FONTS=\
- ALBB ALBR \
- AOB AOI AOR \
- CB CBI CI CR \
- GB GBI GI GR \
- LGB LGI LGR \
- OB OBI OI OR \
- TB TBI TI TR \
- UB UBI UI UR \
- UCB UCBI UCI UCR \
- CLARENDON CORONET MARIGOLD S
-
-all: $(FONTS)
-
-TR: $(AUTOFONT)/9nb00086.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00086.tfm $(TEXTMAP) $@
-
-TI: $(AUTOFONT)/9nb00084.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00084.tfm $(TEXTMAP) $@
-
-TB: $(AUTOFONT)/9nb00083.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00083.tfm $(TEXTMAP) $@
-
-TBI: $(AUTOFONT)/9nb00085.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00085.tfm $(TEXTMAP) $@
-
-CR: $(AUTOFONT)/9nb00064.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00064.tfm $(TEXTMAP) $@
-
-CI: $(AUTOFONT)/9nb00062.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00062.tfm $(TEXTMAP) $@
-
-CB: $(AUTOFONT)/9nb00061.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00061.tfm $(TEXTMAP) $@
-
-CBI: $(AUTOFONT)/9nb00063.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00063.tfm $(TEXTMAP) $@
-
-GR: $(AUTOFONT)/9nb00068.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00068.tfm $(TEXTMAP) $@
-
-GI: $(AUTOFONT)/9nb00066.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00066.tfm $(TEXTMAP) $@
-
-GB: $(AUTOFONT)/9nb00065.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00065.tfm $(TEXTMAP) $@
-
-GBI: $(AUTOFONT)/9nb00067.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00067.tfm $(TEXTMAP) $@
-
-OR: $(AUTOFONT)/9nb00076.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00076.tfm $(TEXTMAP) $@
-
-OI: $(AUTOFONT)/9nb00074.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00074.tfm $(TEXTMAP) $@
-
-OB: $(AUTOFONT)/9nb00073.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00073.tfm $(TEXTMAP) $@
-
-OBI: $(AUTOFONT)/9nb00075.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00075.tfm $(TEXTMAP) $@
-
-UR: $(AUTOFONT)/9nb00094.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00094.tfm $(TEXTMAP) $@
-
-UI: $(AUTOFONT)/9nb00092.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00092.tfm $(TEXTMAP) $@
-
-UB: $(AUTOFONT)/9nb00088.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00088.tfm $(TEXTMAP) $@
-
-UBI: $(AUTOFONT)/9nb00093.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00093.tfm $(TEXTMAP) $@
-
-UCR: $(AUTOFONT)/9nb00089.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00089.tfm $(TEXTMAP) $@
-
-UCI: $(AUTOFONT)/9nb00087.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00087.tfm $(TEXTMAP) $@
-
-UCB: $(AUTOFONT)/9nb00090.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00090.tfm $(TEXTMAP) $@
-
-UCBI: $(AUTOFONT)/9nb00091.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00091.tfm $(TEXTMAP) $@
-
-ALBR: $(AUTOFONT)/9nb00052.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00052.tfm $(TEXTMAP) $@
-
-ALBB: $(AUTOFONT)/9nb00051.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00051.tfm $(TEXTMAP) $@
-
-LGR: $(AUTOFONT)/9nb00071.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00071.tfm $(TEXTMAP) $@
-
-LGB: $(AUTOFONT)/9nb00069.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00069.tfm $(TEXTMAP) $@
-
-LGI: $(AUTOFONT)/9nb00070.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00070.tfm $(TEXTMAP) $@
-
-AOR: $(AUTOFONT)/9nb00055.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00055.tfm $(TEXTMAP) $@
-
-AOI: $(AUTOFONT)/9nb00054.tfm $(TEXTMAP)
- $(HPFTODIT) $(IFLAG) $(AUTOFONT)/9nb00054.tfm $(TEXTMAP) $@
-
-AOB: $(AUTOFONT)/9nb00053.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00053.tfm $(TEXTMAP) $@
-
-MARIGOLD: $(AUTOFONT)/9nb00072.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00072.tfm $(TEXTMAP) $@
-
-CORONET: $(AUTOFONT)/9nb00070.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00070.tfm $(TEXTMAP) $@
-
-CLARENDON: $(AUTOFONT)/9nb00060.tfm $(TEXTMAP)
- $(HPFTODIT) $(AUTOFONT)/9nb00060.tfm $(TEXTMAP) $@
-
-S: $(AUTOFONT)/9nb00086.tfm $(SPECIALMAP)
- $(HPFTODIT) $(SFLAG) $(AUTOFONT)/9nb00086.tfm $(SPECIALMAP) $@
-
-clean:
-
-realclean:
- -rm -f $(FONTS)
-
-extraclean: realclean
- -rm -f core *~ \#*
-
-.PHONY: clean realclean extraclean all
diff --git a/contrib/groff/devlj4/generate/special.map b/contrib/groff/devlj4/generate/special.map
deleted file mode 100644
index ea23337..0000000
--- a/contrib/groff/devlj4/generate/special.map
+++ /dev/null
@@ -1,178 +0,0 @@
-# Map MSL numbers to troff names for a special font.
-12 pl
-30 eq
-34 *A
-35 *B
-38 *E
-41 *Y
-42 *I
-44 *K
-46 *M
-47 *N
-48 *O
-49 *R
-53 *T
-57 *X
-59 *Z
-94 or
-96 ap
-183 mi
-191 +-
-194 no
-201 mu
-202 di
-206 DI
-207 CL
-205 HE
-208 SP
-220 va
-224 ua
-225 da
-226 ->
-227 <-
-229 <>
-292 if
-295 ca
-296 ==
-297 >=
-298 <=
-301 ~~
-302 md
-500 sr
-501 pt
-503 +e
-504 3d
-504 tf
-505 *G
-506 *D
-507 *H
-508 *L
-509 *C
-510 *P
-511 *S
-512 *U
-513 *F
-514 *Q
-515 *W
-516 gr
-517 pd
-518 ts
-519 !=
-522 *a
-523 *b
-524 *g
-525 *d
-526 *e
-527 *z
-528 *y
-529 *h
-530 *i
-531 *k
-532 *l
-533 *m
-534 *n
-535 *c
-536 *o
-537 *p
-538 *r
-539 *s
-540 *t
-541 *u
-542 *f
-543 *x
-544 *q
-545 *w
-546 +h
-547 +f
-548 +p
-549 ~=
-550 ne
-551 arrowverttp
-551 uA
-552 rA
-552 rh
-553 arrowvertbt
-553 dA
-554 lA
-554 lh
-555 vA
-556 hA
-560 radicalex
-561 fa
-562 te
-564 pp
-565 cu
-566 mo
-568 nm
-569 sb
-570 sp
-571 nb
-572 nc
-573 ib
-574 ip
-575 c+
-577 c*
-580 AN
-581 OR
-584 ci
-587 is
-589 /_
-590 es
-591 Ah
-595 Im
-596 Re
-598 bracketlefttp
-598 lc
-599 bracketleftbt
-599 lf
-600 bracelefttp
-600 parenlefttp
-600 lt
-601 braceleftmid
-601 lk
-602 braceleftbt
-602 parenleftbt
-602 lb
-605 arrowvertex
-608 bracketrighttp
-608 rc
-609 bracketrightbt
-609 rf
-610 bracerighttp
-610 parenrighttp
-610 rt
-611 bracerightmid
-611 rk
-612 bracerightbt
-612 parenrightbt
-612 rb
-613 braceleftex
-613 bracerightex
-613 bv
-614 barex
-614 bracketleftex
-614 bracketrightex
-614 parenleftex
-614 parenrightex
-620 -+
-621 la
-622 ra
-624 =~
-633 <<
-634 >>
-638 -h
-641 wp
-654 lz
-663 st
-664 **
-665 an
-680 AN
-1099 CR
-
-#637 digamma
-#655 parenrighttp
-#656 parenrightbt
-#642 sum
-#644 bardblex
-#646 parenlefttp
-#647 parenleftbt
diff --git a/contrib/groff/devlj4/generate/text.map b/contrib/groff/devlj4/generate/text.map
deleted file mode 100644
index 0175cbe..0000000
--- a/contrib/groff/devlj4/generate/text.map
+++ /dev/null
@@ -1,344 +0,0 @@
-# Map MSL numbers to troff names for a text font.
-1 !
-2 "
-2 dq
-3 #
-3 sh
-4 $
-4 Do
-5 %
-6 &
-8 '
-8 cq
-9 (
-10 )
-11 *
-12 +
-13 ,
-14 -
-14 hy
-14 char173
-15 .
-16 /
-16 sl
-17 0
-18 1
-19 2
-20 3
-21 4
-22 5
-23 6
-24 7
-25 8
-26 9
-27 :
-28 ;
-29 <
-30 =
-31 >
-32 ?
-33 @
-33 at
-34 A
-35 B
-36 C
-37 D
-38 E
-39 F
-40 G
-41 H
-42 I
-43 J
-44 K
-45 L
-46 M
-47 N
-48 O
-49 P
-50 Q
-51 R
-52 S
-53 T
-54 U
-55 V
-56 W
-57 X
-58 Y
-59 Z
-60 [
-60 lB
-61 \
-61 rs
-62 ]
-62 rB
-63 ha
-64 _
-66 `
-66 oq
-67 a
-68 b
-69 c
-70 d
-71 e
-72 f
-73 g
-74 h
-75 i
-76 j
-77 k
-78 l
-79 m
-80 n
-81 o
-82 p
-83 q
-84 r
-85 s
-86 t
-87 u
-88 v
-89 w
-90 x
-91 y
-92 z
-93 {
-93 lC
-94 |
-94 ba
-95 }
-95 rC
-96 ti
-99 `A
-99 char192
-100 ^A
-100 char194
-101 `E
-101 char200
-102 ^E
-102 char202
-103 :E
-103 char203
-104 ^I
-104 char206
-105 :I
-105 char207
-106 aa
-106 char180
-107 ga
-108 ^
-108 a^
-109 ad
-109 char168
-110 ~
-110 a~
-111 `U
-111 char217
-112 ^U
-112 char219
-114 'Y
-114 char221
-115 'y
-115 char253
-116 de
-116 char176
-117 ,C
-117 char199
-118 ,c
-118 char231
-119 ~N
-119 char209
-120 ~n
-120 char241
-121 r!
-121 char161
-122 r?
-122 char191
-123 Cs
-123 char164
-124 Po
-124 char163
-125 Ye
-125 char165
-126 sc
-126 char167
-127 Fn
-128 ct
-128 char162
-129 ^a
-129 char226
-130 ^e
-130 char234
-131 ^o
-131 char244
-132 ^u
-132 char251
-133 'a
-133 char225
-134 'e
-134 char233
-135 'o
-135 char243
-136 'u
-136 char250
-137 `a
-137 char224
-138 `e
-138 char232
-139 `o
-139 char242
-140 `u
-140 char249
-141 :a
-141 char228
-142 :e
-142 char235
-143 :o
-143 char246
-144 :u
-144 char252
-145 oA
-145 char197
-146 ^i
-146 char238
-147 /O
-147 char216
-148 AE
-148 char198
-149 oa
-149 char229
-150 'i
-150 char237
-151 /o
-151 char248
-152 ae
-152 char230
-153 :A
-153 char196
-154 `i
-154 char236
-155 :O
-155 char214
-156 :U
-156 char220
-157 'E
-157 char201
-158 :i
-158 char239
-159 ss
-159 char223
-160 ^O
-160 char212
-161 'A
-161 char193
-162 ~A
-162 char195
-163 ~a
-163 char227
-164 -D
-164 char208
-165 Sd
-165 char240
-166 'I
-166 char205
-167 `I
-167 char204
-168 'O
-168 char211
-169 `O
-169 char210
-170 ~O
-170 char213
-171 ~o
-171 char245
-172 vS
-173 vs
-174 'U
-174 char218
-175 :Y
-176 :y
-176 char255
-177 TP
-177 char222
-178 Tp
-178 char254
-180 char181
-181 ps
-181 char182
-182 34
-182 char190
-183 \-
-184 14
-184 char188
-185 12
-185 char189
-186 Of
-186 char170
-187 Om
-187 char186
-188 Fo
-188 char171
-190 Fc
-190 char187
-191 char177
-192 bb
-192 char166
-193 co
-193 char169
-194 no
-194 char172
-196 rg
-196 char174
-197 S2
-197 char178
-198 S3
-198 char179
-199 ac
-199 char184
-200 S1
-200 char185
-201 char215
-202 char247
-302 pc
-302 char183
-310 fm
-311 sd
-312 dg
-313 tm
-315 ah
-316 ao
-324 f/
-325 em
-326 en
-327 dd
-328 .i
-329 aq
-331 bu
-406 'C
-407 'c
-1017 lq
-1018 rq
-1019 Bq
-1031 vz
-1040 fi
-1041 fl
-1042 ff
-1043 Fi
-1044 Fl
-1047 ij
-1067 bq
-1068 %0
-1084 a-
-1084 char175
-1086 ab
-1088 a.
-1090 oe
-1091 OE
-1092 fo
-1093 fc
-1094 sq
-1095 /L
-1096 /l
-1097 a"
-1098 ho
-1106 vZ
-1107 IJ
diff --git a/contrib/groff/devps/AB b/contrib/groff/devps/AB
deleted file mode 100644
index f00cf9a..0000000
--- a/contrib/groff/devps/AB
+++ /dev/null
@@ -1,574 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -70
-. cq -70
-. rq -70
-lq A -50
-` ` -80
-` oq -80
-oq ` -80
-oq oq -80
-` A -50
-oq A -50
-' v -10
-cq v -10
-' t 10
-cq t 10
-' 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 char173 -60
-r g 1
-r e -4
-r d -6
-r , -75
-r c -7
-s . 20
-s , 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 0000 -- asciicircum
-ti 600,347 0 0001 -- asciitilde
-vS 520,944,15 2 0002 -- Scaron
-vZ 500,944 2 0003 -- Zcaron
-vs 440,774,18 2 0004 -- scaron
-vz 460,774 2 0005 -- zcaron
-:Y 620,939 2 0006 -- Ydieresis
-tm 1000,740 2 0007 -- trademark
-aq 220,740 2 0010 -- quotesingle
-space 280 0 0040
-! 280,740 2 0041 -- exclam
-" 360,740 2 0042 -- quotedbl
-dq "
-# 560,700 0 0043 -- numbersign
-sh "
-$ 560,857,86 2 0044 -- dollar
-Do "
-% 860,755,15 2 0045 -- percent
-& 680,755,15 2 0046 -- ampersand
-' 280,740 2 0047 -- quoteright
-cq "
-( 380,754,157 2 0050 -- parenleft
-) 380,754,157 2 0051 -- parenright
-* 440,755 2 0052 -- asterisk
-+ 600,506 0 0053 -- plus
-, 280,133,141 0 0054 -- comma
-- 420,348 0 0055 -- hyphen
-hy "
-char173 "
-. 280,133 0 0056 -- period
-/ 460,740,100 2 0057 -- slash
-sl "
-0 560,755,15 2 0060 -- zero
-1 560,740 2 0061 -- one
-2 560,755 2 0062 -- two
-3 560,755,15 2 0063 -- three
-4 560,740 2 0064 -- four
-5 560,740,15 2 0065 -- five
-6 560,739,15 2 0066 -- six
-7 560,740 2 0067 -- seven
-8 560,755,15 2 0070 -- eight
-9 560,754 2 0071 -- nine
-: 280,555 0 0072 -- colon
-; 280,555,141 0 0073 -- semicolon
-< 600,514,8 0 0074 -- less
-= 600,425 0 0075 -- equal
-> 600,514,8 0 0076 -- greater
-? 560,755 2 0077 -- question
-@ 740,712,12 0 0100 -- at
-at "
-A 740,740 2 0101 -- A
-B 580,740 2 0102 -- B
-C 780,755,15 2 0103 -- C
-D 700,740 2 0104 -- D
-E 520,740 2 0105 -- E
-F 480,740 2 0106 -- F
-G 840,755,15 2 0107 -- G
-H 680,740 2 0110 -- H
-I 280,740 2 0111 -- I
-J 480,740,15 2 0112 -- J
-K 620,740 2 0113 -- K
-L 440,740 2 0114 -- L
-M 900,740 2 0115 -- M
-N 740,740 2 0116 -- N
-O 840,755,15 2 0117 -- O
-P 560,740 2 0120 -- P
-Q 840,755,15 2 0121 -- Q
-R 580,740 2 0122 -- R
-S 520,755,15 2 0123 -- S
-T 420,740 2 0124 -- T
-U 640,740,15 2 0125 -- U
-V 700,740 2 0126 -- V
-W 900,740 2 0127 -- W
-X 680,740 2 0130 -- X
-Y 620,740 2 0131 -- Y
-Z 500,740 2 0132 -- Z
-[ 320,754,157 2 0133 -- bracketleft
-lB "
-\ 640,740,100 2 0134 -- backslash
-rs "
-] 320,754,157 2 0135 -- bracketright
-rB "
-a^ 540,774 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 280,740 2 0140 -- quoteleft
-oq "
-a 660,574,18 0 0141 -- a
-b 660,740,18 2 0142 -- b
-c 640,574,18 0 0143 -- c
-d 660,740,18 2 0144 -- d
-e 640,577,18 0 0145 -- e
-f 280,755 2 0146 -- f
-g 660,574,226 1 0147 -- g
-h 600,740 2 0150 -- h
-i 240,740 2 0151 -- i
-j 260,740,185 3 0152 -- j
-k 580,740 2 0153 -- k
-l 240,740 2 0154 -- l
-m 940,574 0 0155 -- m
-n 600,574 0 0156 -- n
-o 640,574,18 0 0157 -- o
-p 660,574,185 1 0160 -- p
-q 660,574,185 1 0161 -- q
-r 320,574 0 0162 -- r
-s 440,574,18 0 0163 -- s
-t 300,740 2 0164 -- t
-u 600,555,18 0 0165 -- u
-v 560,555 0 0166 -- v
-w 800,555 0 0167 -- w
-x 560,555 0 0170 -- x
-y 580,555,185 1 0171 -- y
-z 460,555 0 0172 -- z
-lC 340,747,191 3 0173 -- braceleft
-{ "
-ba 600,740,100 2 0174 -- bar
-| "
-rC 340,747,191 3 0175 -- braceright
-} "
-a~ 480,767 2 0176 -- tilde
-~ "
-bq 280,133,141 0 0200 -- quotesinglbase
-Fo 460,469 0 0201 -- guillemotleft
-char171 "
-Fc 460,469 0 0202 -- guillemotright
-char187 "
-bu 600,532 0 0203 -- bullet
-Fn 560,824,151 2 0204 -- florin
-f/ 160,740 2 0205 -- fraction
-%0 1280,755,15 2 0206 -- perthousand
-dg 560,740,142 2 0207 -- dagger
-dd 560,740,142 2 0210 -- daggerdbl
-en 500,348 0 0211 -- endash
-em 1000,348 0 0212 -- emdash
-fi 520,755 2 0214 -- fi
-fl 520,755 2 0215 -- fl
-.i 240,555 0 0220 -- dotlessi
-ga 420,851 2 0222 -- grave
-a" 700,862 2 0223 -- hungarumlaut
-a. 280,769 2 0224 -- dotaccent
-ab 480,770 2 0225 -- breve
-ah 540,774 2 0226 -- caron
-ao 360,834 2 0227 -- ring
-ho 340,9,195 1 0230 -- ogonek
-lq 480,740 2 0231 -- quotedblleft
-rq 480,740 2 0232 -- quotedblright
-oe 1080,574,18 0 0233 -- oe
-/l 320,740 2 0234 -- lslash
-Bq 480,133,141 0 0235 -- quotedblbase
-OE 1060,755,15 2 0236 -- OE
-/L 480,740 2 0237 -- Lslash
-r! 280,555,185 1 0241 -- exclamdown
-char161 "
-ct 560,715 0 0242 -- cent
-char162 "
-Po 560,755 2 0243 -- sterling
-char163 "
-Cs 560,577 0 0244 -- currency
-char164 "
-Ye 560,740 2 0245 -- yen
-char165 "
-bb 600,740,100 2 0246 -- brokenbar
-char166 "
-sc 560,755,158 2 0247 -- section
-char167 "
-ad 500,769 2 0250 -- dieresis
-char168 "
-co 740,752,12 2 0251 -- copyright
-char169 "
-Of 360,755 2 0252 -- ordfeminine
-char170 "
-fo 240,469 0 0253 -- guilsinglleft
-no 600,425 0 0254 -- logicalnot
-char172 "
-\- 600,313 0 0255 -- minus
-rg 740,752,12 2 0256 -- registered
-char174 "
-a- 420,759 2 0257 -- macron
-char175 "
-de 400,712 0 0260 -- degree
-char176 "
-char177 600,556,62 0 0261 -- plusminus
-S2 336,749 2 0262 -- twosuperior
-char178 "
-S3 336,749 2 0263 -- threesuperior
-char179 "
-aa 420,849 2 0264 -- acute
-char180 "
-char181 576,555,187 1 0265 -- mu
-ps 600,740,103 2 0266 -- paragraph
-char182 "
-pc 280,320 0 0267 -- periodcentered
-char183 "
-ac 340,6,251 1 0270 -- cedilla
-char184 "
-S1 336,740 2 0271 -- onesuperior
-char185 "
-Om 360,755 2 0272 -- ordmasculine
-char186 "
-fc 240,469 0 0273 -- guilsinglright
-14 840,740 2 0274 -- onequarter
-char188 "
-12 840,740 2 0275 -- onehalf
-char189 "
-34 840,749 2 0276 -- threequarters
-char190 "
-r? 560,555,200 1 0277 -- questiondown
-char191 "
-`A 740,1021 2 0300 -- Agrave
-char192 "
-'A 740,1019 2 0301 -- Aacute
-char193 "
-^A 740,944 2 0302 -- Acircumflex
-char194 "
-~A 740,937 2 0303 -- Atilde
-char195 "
-:A 740,939 2 0304 -- Adieresis
-char196 "
-oA 740,969 2 0305 -- Aring
-char197 "
-AE 900,740 2 0306 -- AE
-char198 "
-,C 780,755,251 3 0307 -- Ccedilla
-char199 "
-`E 520,1021 2 0310 -- Egrave
-char200 "
-'E 520,1019 2 0311 -- Eacute
-char201 "
-^E 520,944 2 0312 -- Ecircumflex
-char202 "
-:E 520,939 2 0313 -- Edieresis
-char203 "
-`I 280,1021 2 0314 -- Igrave
-char204 "
-'I 280,1019 2 0315 -- Iacute
-char205 "
-^I 280,944 2 0316 -- Icircumflex
-char206 "
-:I 280,939 2 0317 -- Idieresis
-char207 "
--D 742,740 2 0320 -- Eth
-char208 "
-~N 740,937 2 0321 -- Ntilde
-char209 "
-`O 840,1021,15 2 0322 -- Ograve
-char210 "
-'O 840,1019,15 2 0323 -- Oacute
-char211 "
-^O 840,944,15 2 0324 -- Ocircumflex
-char212 "
-~O 840,937,15 2 0325 -- Otilde
-char213 "
-:O 840,939,15 2 0326 -- Odieresis
-char214 "
-char215 600,494 0 0327 -- multiply
-/O 840,814,71 2 0330 -- Oslash
-char216 "
-`U 640,1021,15 2 0331 -- Ugrave
-char217 "
-'U 640,1019,15 2 0332 -- Uacute
-char218 "
-^U 640,944,15 2 0333 -- Ucircumflex
-char219 "
-:U 640,939,15 2 0334 -- Udieresis
-char220 "
-'Y 620,1019 2 0335 -- Yacute
-char221 "
-TP 560,740 2 0336 -- Thorn
-char222 "
-ss 600,755,18 2 0337 -- germandbls
-char223 "
-`a 660,851,18 2 0340 -- agrave
-char224 "
-'a 660,849,18 2 0341 -- aacute
-char225 "
-^a 660,774,18 2 0342 -- acircumflex
-char226 "
-~a 660,767,18 2 0343 -- atilde
-char227 "
-:a 660,769,18 2 0344 -- adieresis
-char228 "
-oa 660,834,18 2 0345 -- aring
-char229 "
-ae 1080,574,18 0 0346 -- ae
-char230 "
-,c 640,574,251 1 0347 -- ccedilla
-char231 "
-`e 640,851,18 2 0350 -- egrave
-char232 "
-'e 640,849,18 2 0351 -- eacute
-char233 "
-^e 640,774,18 2 0352 -- ecircumflex
-char234 "
-:e 640,769,18 2 0353 -- edieresis
-char235 "
-`i 240,851 2 0354 -- igrave
-char236 "
-'i 240,849 2 0355 -- iacute
-char237 "
-^i 240,774 2 0356 -- icircumflex
-char238 "
-:i 240,769 2 0357 -- idieresis
-char239 "
-Sd 640,754,18 2 0360 -- eth
-char240 "
-~n 600,767 2 0361 -- ntilde
-char241 "
-`o 640,851,18 2 0362 -- ograve
-char242 "
-'o 640,849,18 2 0363 -- oacute
-char243 "
-^o 640,774,18 2 0364 -- ocircumflex
-char244 "
-~o 640,767,18 2 0365 -- otilde
-char245 "
-:o 640,769,18 2 0366 -- odieresis
-char246 "
-char247 600,526,20 0 0367 -- divide
-/o 660,608,50 0 0370 -- oslash
-char248 "
-`u 600,851,18 2 0371 -- ugrave
-char249 "
-'u 600,849,18 2 0372 -- uacute
-char250 "
-^u 600,774,18 2 0373 -- ucircumflex
-char251 "
-:u 600,769,18 2 0374 -- udieresis
-char252 "
-'y 580,849,185 3 0375 -- yacute
-char253 "
-Tp 660,740,185 3 0376 -- thorn
-char254 "
-:y 580,769,185 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/ABI b/contrib/groff/devps/ABI
deleted file mode 100644
index d236b63..0000000
--- a/contrib/groff/devps/ABI
+++ /dev/null
@@ -1,575 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -70
-. cq -70
-. rq -70
-lq A -50
-` ` -80
-` oq -80
-oq ` -80
-oq oq -80
-` A -50
-oq A -50
-' v -10
-cq v -10
-' t 10
-cq t 10
-' 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 char173 -60
-r g 1
-r e -4
-r d -6
-r , -75
-r c -7
-s . 20
-s , 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 0000 -- asciicircum
-ti 600,347,0,29,-64,29 0 0001 -- asciitilde
-vS 520,944,15,165,1,82 2 0002 -- Scaron
-vZ 500,944,0,200,31,82 2 0003 -- Zcaron
-vs 440,774,18,173,1,82 2 0004 -- scaron
-vz 460,774,0,188,30,82 2 0005 -- zcaron
-:Y 620,939,0,189,-85,82 2 0006 -- Ydieresis
-tm 1000,740,0,8,-81,8 2 0007 -- trademark
-aq 220,740,0,144,-102,82 2 0010 -- quotesingle
-space 280 0 0040
-! 280,740,0,113,-23,82 2 0041 -- exclam
-" 360,740,0,168,-77,82 2 0042 -- quotedbl
-dq "
-# 560,700,0,108,-16,82 0 0043 -- numbersign
-sh "
-$ 560,857,86,72,-49,72 2 0044 -- dollar
-Do "
-% 860,755,15,46,-89,46 2 0045 -- percent
-& 680,755,15,112,-21,82 2 0046 -- ampersand
-' 280,740,0,112,-109,82 2 0047 -- quoteright
-cq "
-( 380,754,157,160,-70,82 2 0050 -- parenleft
-) 380,754,157,48,42,48 2 0051 -- parenright
-* 440,755,0,102,-124,82 2 0052 -- asterisk
-+ 600,506,0,60,-34,60 0 0053 -- plus
-, 280,133,141,1,2,1 0 0054 -- comma
-- 420,348,0,43,-64,43 0 0055 -- hyphen
-hy "
-char173 "
-. 280,133,0,1,-23,1 0 0056 -- period
-/ 460,740,100,181,63,82 2 0057 -- slash
-sl "
-0 560,755,15,118,-20,82 2 0060 -- zero
-1 560,740,0,0,-180 2 0061 -- one
-2 560,755,0,112,6,82 2 0062 -- two
-3 560,755,15,75,-17,75 2 0063 -- three
-4 560,740,0,94,14,82 2 0064 -- four
-5 560,740,15,90,-14,82 2 0065 -- five
-6 560,739,15,77,-14,77 2 0066 -- six
-7 560,740,0,125,-33,82 2 0067 -- seven
-8 560,755,15,80,-21,80 2 0070 -- eight
-9 560,754,0,123,-60,82 2 0071 -- nine
-: 280,555,0,79,-23,79 0 0072 -- colon
-; 280,555,141,79,2,79 0 0073 -- semicolon
-< 600,514,8,99,-34,82 0 0074 -- less
-= 600,425,0,81,-13,81 0 0075 -- equal
-> 600,514,8,60,5,60 0 0076 -- greater
-? 560,755,0,83,-85,82 2 0077 -- question
-@ 740,712,12,142,-59,82 0 0100 -- at
-at "
-A 740,740,0,42,43,42 2 0101 -- A
-B 580,740,0,80,-20,80 2 0102 -- B
-C 780,755,15,134,-47,82 2 0103 -- C
-D 700,740,0,82,-13,82 2 0104 -- D
-E 520,740,0,126,-11,82 2 0105 -- E
-F 480,740,0,145,-11,82 2 0106 -- F
-G 840,755,15,97,-39,82 2 0107 -- G
-H 680,740,0,117,-21,82 2 0110 -- H
-I 280,740,0,116,-22,82 2 0111 -- I
-J 480,740,15,116,16,82 2 0112 -- J
-K 620,740,0,187,-39,82 2 0113 -- K
-L 440,740,0,69,-22,69 2 0114 -- L
-M 900,740,0,124,-13,82 2 0115 -- M
-N 740,740,0,118,-20,82 2 0116 -- N
-O 840,755,15,92,-45,82 2 0117 -- O
-P 560,740,0,135,-22,82 2 0120 -- P
-Q 840,755,15,92,-44,82 2 0121 -- Q
-R 580,740,0,126,-14,82 2 0122 -- R
-S 520,755,15,108,1,82 2 0123 -- S
-T 420,740,0,185,-69,82 2 0124 -- T
-U 640,740,15,132,-47,82 2 0125 -- U
-V 700,740,0,182,-95,82 2 0126 -- V
-W 900,740,0,186,-94,82 2 0127 -- W
-X 680,740,0,183,46,82 2 0130 -- X
-Y 620,740,0,189,-85,82 2 0131 -- Y
-Z 500,740,0,149,31,82 2 0132 -- Z
-[ 320,754,157,154,-39,82 2 0133 -- bracketleft
-lB "
-\ 640,740,100,0,-183 2 0134 -- backslash
-rs "
-] 320,754,157,72,43,72 2 0135 -- bracketright
-rB "
-a^ 540,774,0,98,-139,82 2 0136 -- circumflex
-^ "
-_ 500,0,125,36,73,36 0 0137 -- underscore
-` 280,740,0,111,-108,82 2 0140 -- quoteleft
-oq "
-a 660,574,18,106,-23,82 0 0141 -- a
-b 660,740,18,79,3,79 2 0142 -- b
-c 640,574,18,89,-34,82 0 0143 -- c
-d 660,740,18,145,-30,82 2 0144 -- d
-e 640,577,18,77,-27,77 0 0145 -- e
-f 280,755,0,190,-12,82 2 0146 -- f
-g 660,574,226,116,17,82 1 0147 -- g
-h 600,740,0,64,-4,64 2 0150 -- h
-i 240,740,0,133,-3,82 2 0151 -- i
-j 260,740,185,132,68,82 3 0152 -- j
-k 580,740,0,118,-30,82 2 0153 -- k
-l 240,740,0,134,-4,82 2 0154 -- l
-m 940,574,0,64,-4,64 0 0155 -- m
-n 600,574,0,63,-4,63 0 0156 -- n
-o 640,574,18,82,-21,82 0 0157 -- o
-p 660,574,185,76,37,76 1 0160 -- p
-q 660,574,185,106,-28,82 1 0161 -- q
-r 320,574,0,153,-13,82 0 0162 -- r
-s 440,574,18,93,1,82 0 0163 -- s
-t 300,740,0,152,-36,82 2 0164 -- t
-u 600,555,18,97,-37,82 0 0165 -- u
-v 560,555,0,149,-56,82 0 0166 -- v
-w 800,555,0,142,-64,82 0 0167 -- w
-x 560,555,0,122,47,82 0 0170 -- x
-y 580,555,185,144,-25,82 1 0171 -- y
-z 460,555,0,118,30,82 0 0172 -- z
-lC 340,747,191,165,10,82 3 0173 -- braceleft
-{ "
-ba 600,740,100,0,-164 2 0174 -- bar
-| "
-rC 340,747,191,115,62,82 3 0175 -- braceright
-} "
-a~ 480,767,0,134,-128,82 2 0176 -- tilde
-~ "
-bq 280,133,141,0,3 0 0200 -- quotesinglbase
-Fo 460,469,0,77,-55,77 0 0201 -- guillemotleft
-char171 "
-Fc 460,469,0,53,-31,53 0 0202 -- guillemotright
-char187 "
-bu 600,532,0,0,-165 0 0203 -- bullet
-Fn 560,824,151,154,77,82 2 0204 -- florin
-f/ 160,740,0,309,173,82 2 0205 -- fraction
-%0 1280,755,15,26,-89,26 2 0206 -- perthousand
-dg 560,740,142,102,-83,82 2 0207 -- dagger
-dd 560,740,142,108,-13,82 2 0210 -- daggerdbl
-en 500,348,0,79,-28,79 0 0211 -- endash
-em 1000,348,0,79,-28,79 0 0212 -- emdash
-fi 520,755,0,128,-22,82 2 0214 -- fi
-fl 520,755,0,128,-22,82 2 0215 -- fl
-.i 240,555,0,99,-3,82 0 0220 -- dotlessi
-ga 420,851,0,92,-139,82 2 0222 -- grave
-a" 700,862,0,104,-208,82 2 0223 -- hungarumlaut
-a. 280,769,0,120,-142,82 2 0224 -- dotaccent
-ab 480,770,0,152,-135,82 2 0225 -- breve
-ah 540,774,0,123,-164,82 2 0226 -- caron
-ao 360,834,0,114,-156,82 2 0227 -- ring
-ho 340,9,195,0,-9 1 0230 -- ogonek
-lq 480,740,0,116,-106,82 2 0231 -- quotedblleft
-rq 480,740,0,117,-107,82 2 0232 -- quotedblright
-oe 1080,574,18,78,-26,78 0 0233 -- oe
-/l 320,740,0,134,-24,82 2 0234 -- lslash
-Bq 480,133,141,5,5,5 0 0235 -- quotedblbase
-OE 1060,755,15,134,-48,82 2 0236 -- OE
-/L 480,740,0,54,-18,54 2 0237 -- Lslash
-r! 280,555,185,80,10,80 1 0241 -- exclamdown
-char161 "
-ct 560,715,0,89,-60,82 0 0242 -- cent
-char162 "
-Po 560,755,0,105,12,82 2 0243 -- sterling
-char163 "
-Cs 560,577,0,118,-3,82 0 0244 -- currency
-char164 "
-Ye 560,740,0,197,-33,82 2 0245 -- yen
-char165 "
-bb 600,740,100,0,-164 2 0246 -- brokenbar
-char166 "
-sc 560,755,158,92,-15,82 2 0247 -- section
-char167 "
-ad 500,769,0,115,-146,82 2 0250 -- dieresis
-char168 "
-co 740,752,12,137,0,82 2 0251 -- copyright
-char169 "
-Of 360,755,0,162,-77,82 2 0252 -- ordfeminine
-char170 "
-fo 240,469,0,87,-44,82 0 0253 -- guilsinglleft
-no 600,425,0,81,-55,81 0 0254 -- logicalnot
-char172 "
-\- 600,313,0,60,-34,60 0 0255 -- minus
-rg 740,752,12,137,0,82 2 0256 -- registered
-char174 "
-a- 420,759,0,120,-142,82 2 0257 -- macron
-char175 "
-de 400,712,0,101,-110,82 0 0260 -- degree
-char176 "
-char177 600,556,62,76,13,76 0 0261 -- plusminus
-S2 336,749,0,150,-23,82 2 0262 -- twosuperior
-char178 "
-S3 336,749,0,127,-37,82 2 0263 -- threesuperior
-char179 "
-aa 420,849,0,138,-174,82 2 0264 -- acute
-char180 "
-char181 576,555,187,116,47,82 1 0265 -- mu
-ps 600,740,103,194,-40,82 2 0266 -- paragraph
-char182 "
-pc 280,320,0,35,-58,35 0 0267 -- periodcentered
-char183 "
-ac 340,6,251,0,-17 1 0270 -- cedilla
-char184 "
-S1 336,740,0,74,-132,74 2 0271 -- onesuperior
-char185 "
-Om 360,755,0,141,-81,82 2 0272 -- ordmasculine
-char186 "
-fc 240,469,0,63,-20,63 0 0273 -- guilsinglright
-14 840,740,0,0,-137 2 0274 -- onequarter
-char188 "
-12 840,740,0,40,-107,40 2 0275 -- onehalf
-char189 "
-34 840,749,0,46,-47,46 2 0276 -- threequarters
-char190 "
-r? 560,555,200,17,-19,17 1 0277 -- questiondown
-char191 "
-`A 740,1021,0,42,43,42 2 0300 -- Agrave
-char192 "
-'A 740,1019,0,42,43,42 2 0301 -- Aacute
-char193 "
-^A 740,944,0,42,43,42 2 0302 -- Acircumflex
-char194 "
-~A 740,937,0,42,43,42 2 0303 -- Atilde
-char195 "
-:A 740,939,0,42,43,42 2 0304 -- Adieresis
-char196 "
-oA 740,969,0,42,43,42 2 0305 -- Aring
-char197 "
-AE 900,740,0,111,55,82 2 0306 -- AE
-char198 "
-,C 780,755,251,134,-47,82 3 0307 -- Ccedilla
-char199 "
-`E 520,1021,0,126,-11,82 2 0310 -- Egrave
-char200 "
-'E 520,1019,0,126,-11,82 2 0311 -- Eacute
-char201 "
-^E 520,944,0,139,-11,82 2 0312 -- Ecircumflex
-char202 "
-:E 520,939,0,136,-11,82 2 0313 -- Edieresis
-char203 "
-`I 280,1021,0,168,-22,82 2 0314 -- Igrave
-char204 "
-'I 280,1019,0,264,-22,82 2 0315 -- Iacute
-char205 "
-^I 280,944,0,259,-22,82 2 0316 -- Icircumflex
-char206 "
-:I 280,939,0,256,-22,82 2 0317 -- Idieresis
-char207 "
--D 742,740,0,74,-33,74 2 0320 -- Eth
-char208 "
-~N 740,937,0,118,-20,82 2 0321 -- Ntilde
-char209 "
-`O 840,1021,15,92,-45,82 2 0322 -- Ograve
-char210 "
-'O 840,1019,15,92,-45,82 2 0323 -- Oacute
-char211 "
-^O 840,944,15,92,-45,82 2 0324 -- Ocircumflex
-char212 "
-~O 840,937,15,92,-45,82 2 0325 -- Otilde
-char213 "
-:O 840,939,15,92,-45,82 2 0326 -- Odieresis
-char214 "
-char215 600,494,0,67,-26,67 0 0327 -- multiply
-/O 840,814,71,101,-44,82 2 0330 -- Oslash
-char216 "
-`U 640,1021,15,132,-47,82 2 0331 -- Ugrave
-char217 "
-'U 640,1019,15,132,-47,82 2 0332 -- Uacute
-char218 "
-^U 640,944,15,132,-47,82 2 0333 -- Ucircumflex
-char219 "
-:U 640,939,15,132,-47,82 2 0334 -- Udieresis
-char220 "
-'Y 620,1019,0,189,-85,82 2 0335 -- Yacute
-char221 "
-TP 560,740,0,109,-22,82 2 0336 -- Thorn
-char222 "
-ss 600,755,18,79,-1,79 2 0337 -- germandbls
-char223 "
-`a 660,851,18,106,-23,82 2 0340 -- agrave
-char224 "
-'a 660,849,18,106,-23,82 2 0341 -- aacute
-char225 "
-^a 660,774,18,106,-23,82 2 0342 -- acircumflex
-char226 "
-~a 660,767,18,106,-23,82 2 0343 -- atilde
-char227 "
-:a 660,769,18,106,-23,82 2 0344 -- adieresis
-char228 "
-oa 660,834,18,106,-23,82 2 0345 -- aring
-char229 "
-ae 1080,574,18,75,-25,75 0 0346 -- ae
-char230 "
-,c 640,574,251,89,-33,82 1 0347 -- ccedilla
-char231 "
-`e 640,851,18,77,-27,77 2 0350 -- egrave
-char232 "
-'e 640,849,18,77,-27,77 2 0351 -- eacute
-char233 "
-^e 640,774,18,77,-27,77 2 0352 -- ecircumflex
-char234 "
-:e 640,769,18,77,-27,77 2 0353 -- edieresis
-char235 "
-`i 240,851,0,157,-3,82 2 0354 -- igrave
-char236 "
-'i 240,849,0,253,-3,82 2 0355 -- iacute
-char237 "
-^i 240,774,0,248,11,82 2 0356 -- icircumflex
-char238 "
-:i 240,769,0,245,-3,82 2 0357 -- idieresis
-char239 "
-Sd 640,754,18,109,-23,82 2 0360 -- eth
-char240 "
-~n 600,767,0,74,-4,74 2 0361 -- ntilde
-char241 "
-`o 640,851,18,82,-21,82 2 0362 -- ograve
-char242 "
-'o 640,849,18,82,-21,82 2 0363 -- oacute
-char243 "
-^o 640,774,18,82,-21,82 2 0364 -- ocircumflex
-char244 "
-~o 640,767,18,82,-21,82 2 0365 -- otilde
-char245 "
-:o 640,769,18,82,-21,82 2 0366 -- odieresis
-char246 "
-char247 600,526,20,60,-34,60 0 0367 -- divide
-/o 660,608,50,75,-31,75 0 0370 -- oslash
-char248 "
-`u 600,851,18,97,-37,82 2 0371 -- ugrave
-char249 "
-'u 600,849,18,97,-37,82 2 0372 -- uacute
-char250 "
-^u 600,774,18,97,-37,82 2 0373 -- ucircumflex
-char251 "
-:u 600,769,18,97,-37,82 2 0374 -- udieresis
-char252 "
-'y 580,849,185,144,-25,82 3 0375 -- yacute
-char253 "
-Tp 660,740,185,76,37,76 3 0376 -- thorn
-char254 "
-:y 580,769,185,144,-25,82 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/AI b/contrib/groff/devps/AI
deleted file mode 100644
index be0e099..0000000
--- a/contrib/groff/devps/AI
+++ /dev/null
@@ -1,575 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -120
-. cq -120
-. rq -120
-lq ` -35
-lq oq -35
-lq A -100
-` ` -203
-` oq -203
-oq ` -203
-oq oq -203
-` A -100
-oq A -100
-' v -30
-cq v -30
-' t 10
-cq t 10
-' 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 char173 -60
-r g -15
-r e -4
-r d -6
-r , -75
-r c -20
-r a -20
-s . 20
-s , 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 0000 -- asciicircum
-ti 606,319,0,28,-64,28 0 0001 -- asciitilde
-vS 498,927,13,145,-7,81 2 0002 -- Scaron
-vZ 480,927,0,166,38,81 2 0003 -- Zcaron
-vs 388,764,13,170,1,81 2 0004 -- scaron
-vz 425,764,0,152,40,81 2 0005 -- zcaron
-:Y 592,928,0,187,-88,81 2 0006 -- Ydieresis
-tm 1000,740,0,3,-87,3 2 0007 -- trademark
-aq 198,740,0,129,-103,81 2 0010 -- quotesingle
-space 277 0 0040
-! 295,740,0,77,-61,77 2 0041 -- exclam
-" 309,740,0,151,-80,81 2 0042 -- quotedbl
-dq "
-# 554,740,0,116,-21,81 2 0043 -- numbersign
-sh "
-$ 554,811,70,77,-57,77 2 0044 -- dollar
-Do "
-% 775,751,13,62,-74,62 2 0045 -- percent
-& 757,753,12,68,-42,68 2 0046 -- ampersand
-' 351,740,0,92,-145,81 2 0047 -- quoteright
-cq "
-( 369,757,205,176,-39,81 3 0050 -- parenleft
-) 369,757,205,63,74,63 3 0051 -- parenright
-* 425,740,0,104,-120,81 2 0052 -- asterisk
-+ 606,506,0,52,-42,52 0 0053 -- plus
-, 277,126,67,0,48 0 0054 -- comma
-- 332,315,0,78,-26,78 0 0055 -- hyphen
-hy "
-char173 "
-. 277,126,0,0,-52 0 0056 -- period
-/ 437,740,100,153,25,81 2 0057 -- slash
-sl "
-0 554,753,13,118,-21,81 2 0060 -- zero
-1 554,740,0,0,-210 2 0061 -- one
-2 554,753,0,111,10,81 2 0062 -- two
-3 554,753,13,61,-23,61 2 0063 -- three
-4 554,740,0,94,11,81 2 0064 -- four
-5 554,740,13,101,-19,81 2 0065 -- five
-6 554,739,13,76,-15,76 2 0066 -- six
-7 554,740,0,124,-60,81 2 0067 -- seven
-8 554,753,13,76,-27,76 2 0070 -- eight
-9 554,752,0,122,-61,81 2 0071 -- nine
-: 277,548,0,51,-52,51 0 0072 -- colon
-; 277,548,67,51,48,51 0 0073 -- semicolon
-< 606,514,8,93,-37,81 0 0074 -- less
-= 606,388,0,71,-23,71 0 0075 -- equal
-> 606,514,8,57,-1,57 0 0076 -- greater
-? 591,752,0,87,-108,81 2 0077 -- question
-@ 867,753,13,71,-76,71 2 0100 -- at
-at "
-A 740,740,0,39,38,39 2 0101 -- A
-B 574,740,0,82,-24,81 2 0102 -- B
-C 813,752,13,107,-55,81 2 0103 -- C
-D 744,740,0,79,-24,79 2 0104 -- D
-E 536,740,0,126,-20,81 2 0105 -- E
-F 485,740,0,146,-20,81 2 0106 -- F
-G 872,753,13,69,-53,69 2 0107 -- G
-H 683,740,0,111,-26,81 2 0110 -- H
-I 226,740,0,111,-26,81 2 0111 -- I
-J 482,740,13,107,13,81 2 0112 -- J
-K 591,740,0,187,-31,81 2 0113 -- K
-L 462,740,0,62,-32,62 2 0114 -- L
-M 919,740,0,111,-26,81 2 0115 -- M
-N 740,740,0,111,-25,81 2 0116 -- N
-O 869,753,13,82,-55,81 2 0117 -- O
-P 592,740,0,122,-25,81 2 0120 -- P
-Q 871,753,13,91,-52,81 2 0121 -- Q
-R 607,740,0,112,-20,81 2 0122 -- R
-S 498,753,13,113,-7,81 2 0123 -- S
-T 426,740,0,180,-81,81 2 0124 -- T
-U 655,740,13,111,-68,81 2 0125 -- U
-V 702,740,0,178,-95,81 2 0126 -- V
-W 960,740,0,177,-98,81 2 0127 -- W
-X 609,740,0,165,42,81 2 0130 -- X
-Y 592,740,0,187,-88,81 2 0131 -- Y
-Z 480,740,0,166,38,81 2 0132 -- Z
-[ 351,753,179,176,-95,81 2 0133 -- bracketleft
-lB "
-\ 605,740,100,0,-205 2 0134 -- backslash
-rs "
-] 351,753,179,11,69,11 2 0135 -- bracketright
-rB "
-a^ 502,764,0,94,-142,81 2 0136 -- circumflex
-^ "
-_ 500,0,125,36,73,36 0 0137 -- underscore
-` 351,740,0,57,-182,57 2 0140 -- quoteleft
-oq "
-a 683,561,13,89,-38,81 0 0141 -- a
-b 682,740,13,71,-18,71 2 0142 -- b
-c 647,561,13,81,-37,81 0 0143 -- c
-d 685,740,13,120,-35,81 2 0144 -- d
-e 650,561,13,64,-34,64 0 0145 -- e
-f 314,753,0,190,-54,81 2 0146 -- f
-g 673,561,215,84,-6,81 1 0147 -- g
-h 610,740,0,46,-12,46 2 0150 -- h
-i 200,740,0,122,-15,81 2 0151 -- i
-j 203,740,192,121,130,81 3 0152 -- j
-k 502,740,0,136,-20,81 2 0153 -- k
-l 200,740,0,122,-15,81 2 0154 -- l
-m 938,561,0,50,-16,50 0 0155 -- m
-n 610,561,0,49,-15,49 0 0156 -- n
-o 655,561,13,64,-38,64 0 0157 -- o
-p 682,561,192,67,22,67 1 0160 -- p
-q 682,561,192,85,-33,81 1 0161 -- q
-r 301,561,0,144,-15,81 0 0162 -- r
-s 388,561,13,86,1,81 0 0163 -- s
-t 339,740,0,142,-54,81 2 0164 -- t
-u 608,547,13,84,-50,81 0 0165 -- u
-v 554,547,0,143,-58,81 0 0166 -- v
-w 831,547,0,140,-64,81 0 0167 -- w
-x 480,547,0,139,38,81 0 0170 -- x
-y 536,547,192,138,-47,81 1 0171 -- y
-z 425,547,0,123,40,81 0 0172 -- z
-lC 351,740,189,167,-65,81 2 0173 -- braceleft
-{ "
-ba 672,740,100,0,-230 2 0174 -- bar
-| "
-rC 351,740,189,37,65,37 2 0175 -- braceright
-} "
-a~ 439,754,0,131,-129,81 2 0176 -- tilde
-~ "
-bq 354,126,68,0,-26 0 0200 -- quotesinglbase
-Fo 425,481,0,94,-42,81 0 0201 -- guillemotleft
-char171 "
-Fc 425,481,0,62,-10,62 0 0202 -- guillemotright
-char187 "
-bu 606,532,0,0,-167 0 0203 -- bullet
-Fn 554,818,153,165,89,81 2 0204 -- florin
-f/ 166,740,0,301,163,81 2 0205 -- fraction
-%0 1174,751,13,58,-78,58 2 0206 -- perthousand
-dg 553,740,133,90,-96,81 2 0207 -- dagger
-dd 553,740,133,90,-22,81 2 0210 -- daggerdbl
-en 500,315,0,73,-31,73 0 0211 -- endash
-em 1000,315,0,73,-31,73 0 0212 -- emdash
-fi 487,753,0,122,-54,81 2 0214 -- fi
-fl 485,753,0,122,-54,81 2 0215 -- fl
-.i 200,547,0,86,-15,81 0 0220 -- dotlessi
-ga 378,786,0,97,-154,81 2 0222 -- grave
-a" 552,800,0,92,-189,81 2 0223 -- hungarumlaut
-a. 222,765,0,118,-142,81 2 0224 -- dotaccent
-ab 453,754,0,138,-142,81 2 0225 -- breve
-ah 502,764,0,113,-160,81 2 0226 -- caron
-ao 332,807,0,119,-141,81 2 0227 -- ring
-ho 302,0,191,0,-3 1 0230 -- ogonek
-lq 502,740,0,55,-184,55 2 0231 -- quotedblleft
-rq 484,740,0,108,-147,81 2 0232 -- quotedblright
-oe 1137,561,13,73,-30,73 0 0233 -- oe
-/l 300,740,0,104,-45,81 2 0234 -- lslash
-Bq 502,126,68,0,-26 0 0235 -- quotedblbase
-OE 1194,753,13,135,-57,81 2 0236 -- OE
-/L 517,740,0,62,-57,62 2 0237 -- Lslash
-r! 295,548,192,41,-24,41 1 0241 -- exclamdown
-char161 "
-ct 554,707,0,92,-65,81 0 0242 -- cent
-char162 "
-Po 554,753,0,110,21,81 2 0243 -- sterling
-char163 "
-Cs 554,580,0,141,26,81 0 0244 -- currency
-char164 "
-Ye 554,740,0,183,-25,81 2 0245 -- yen
-char165 "
-bb 672,740,100,0,-230 2 0246 -- brokenbar
-char166 "
-sc 615,753,141,32,-68,32 2 0247 -- section
-char167 "
-ad 369,765,0,118,-141,81 2 0250 -- dieresis
-char168 "
-co 747,752,12,133,-3,81 2 0251 -- copyright
-char169 "
-Of 369,753,0,175,-52,81 2 0252 -- ordfeminine
-char170 "
-fo 251,481,0,94,-42,81 0 0253 -- guilsinglleft
-no 606,388,0,71,-60,71 0 0254 -- logicalnot
-char172 "
-\- 606,287,0,52,-42,52 0 0255 -- minus
-rg 747,752,12,133,-3,81 2 0256 -- registered
-char174 "
-a- 485,736,0,112,-147,81 0 0257 -- macron
-char175 "
-de 400,709,0,101,-108,81 0 0260 -- degree
-char176 "
-char177 606,518,24,62,3,62 0 0261 -- plusminus
-S2 332,747,0,151,-24,81 2 0262 -- twosuperior
-char178 "
-S3 332,747,0,126,-48,81 2 0263 -- threesuperior
-char179 "
-aa 375,786,0,119,-153,81 2 0264 -- acute
-char180 "
-char181 608,547,184,70,4,70 0 0265 -- mu
-ps 564,740,110,174,-69,81 2 0266 -- paragraph
-char182 "
-pc 277,316,0,8,-87,8 0 0267 -- periodcentered
-char183 "
-ac 324,0,222,0,-2 1 0270 -- cedilla
-char184 "
-S1 332,740,0,53,-140,53 2 0271 -- onesuperior
-char185 "
-Om 369,753,0,147,-66,81 2 0272 -- ordmasculine
-char186 "
-fc 251,481,0,62,-10,62 0 0273 -- guilsinglright
-14 831,740,0,0,-133 2 0274 -- onequarter
-char188 "
-12 831,740,0,29,-114,29 2 0275 -- onehalf
-char189 "
-34 831,747,0,44,-76,44 2 0276 -- threequarters
-char190 "
-r? 591,548,205,0,-14 1 0277 -- questiondown
-char191 "
-`A 740,949,0,39,38,39 2 0300 -- Agrave
-char192 "
-'A 740,949,0,39,38,39 2 0301 -- Aacute
-char193 "
-^A 740,927,0,39,38,39 2 0302 -- Acircumflex
-char194 "
-~A 740,917,0,39,38,39 2 0303 -- Atilde
-char195 "
-:A 740,928,0,39,38,39 2 0304 -- Adieresis
-char196 "
-oA 740,955,0,39,38,39 2 0305 -- Aring
-char197 "
-AE 992,740,0,102,70,81 2 0306 -- AE
-char198 "
-,C 813,752,222,107,-55,81 3 0307 -- Ccedilla
-char199 "
-`E 536,949,0,126,-20,81 2 0310 -- Egrave
-char200 "
-'E 536,949,0,126,-20,81 2 0311 -- Eacute
-char201 "
-^E 536,927,0,126,-20,81 2 0312 -- Ecircumflex
-char202 "
-:E 536,928,0,126,-20,81 2 0313 -- Edieresis
-char203 "
-`I 226,949,0,164,-26,81 2 0314 -- Igrave
-char204 "
-'I 226,949,0,264,-26,81 2 0315 -- Iacute
-char205 "
-^I 226,927,0,263,-26,81 2 0316 -- Icircumflex
-char206 "
-:I 226,928,0,220,-26,81 2 0317 -- Idieresis
-char207 "
--D 790,740,0,73,-54,73 2 0320 -- Eth
-char208 "
-~N 740,917,0,111,-25,81 2 0321 -- Ntilde
-char209 "
-`O 869,949,13,82,-55,81 2 0322 -- Ograve
-char210 "
-'O 869,949,13,82,-55,81 2 0323 -- Oacute
-char211 "
-^O 869,927,13,82,-55,81 2 0324 -- Ocircumflex
-char212 "
-~O 869,917,13,82,-55,81 2 0325 -- Otilde
-char213 "
-:O 869,928,13,82,-55,81 2 0326 -- Odieresis
-char214 "
-char215 606,482,0,56,-37,56 0 0327 -- multiply
-/O 868,819,83,111,-26,81 2 0330 -- Oslash
-char216 "
-`U 655,949,13,111,-68,81 2 0331 -- Ugrave
-char217 "
-'U 655,949,13,111,-68,81 2 0332 -- Uacute
-char218 "
-^U 655,927,13,111,-68,81 2 0333 -- Ucircumflex
-char219 "
-:U 655,928,13,111,-68,81 2 0334 -- Udieresis
-char220 "
-'Y 592,949,0,187,-88,81 2 0335 -- Yacute
-char221 "
-TP 592,740,0,79,-10,79 2 0336 -- Thorn
-char222 "
-ss 554,753,13,74,-11,74 2 0337 -- germandbls
-char223 "
-`a 683,786,13,89,-38,81 2 0340 -- agrave
-char224 "
-'a 683,786,13,89,-38,81 2 0341 -- aacute
-char225 "
-^a 683,764,13,89,-38,81 2 0342 -- acircumflex
-char226 "
-~a 683,754,13,89,-38,81 2 0343 -- atilde
-char227 "
-:a 683,765,13,89,-38,81 2 0344 -- adieresis
-char228 "
-oa 683,807,13,89,-38,81 2 0345 -- aring
-char229 "
-ae 1157,561,13,62,-30,62 0 0346 -- ae
-char230 "
-,c 647,561,222,81,-37,81 1 0347 -- ccedilla
-char231 "
-`e 650,786,13,64,-34,64 2 0350 -- egrave
-char232 "
-'e 650,786,13,64,-34,64 2 0351 -- eacute
-char233 "
-^e 650,764,13,64,-34,64 2 0352 -- ecircumflex
-char234 "
-:e 650,765,13,64,-34,64 2 0353 -- edieresis
-char235 "
-`i 200,786,0,146,-15,81 2 0354 -- igrave
-char236 "
-'i 200,786,0,247,-15,81 2 0355 -- iacute
-char237 "
-^i 200,764,0,245,9,81 2 0356 -- icircumflex
-char238 "
-:i 200,765,0,203,-15,81 2 0357 -- idieresis
-char239 "
-Sd 655,753,12,70,-38,70 2 0360 -- eth
-char240 "
-~n 610,754,0,49,-15,49 2 0361 -- ntilde
-char241 "
-`o 655,786,13,64,-38,64 2 0362 -- ograve
-char242 "
-'o 655,786,13,64,-38,64 2 0363 -- oacute
-char243 "
-^o 655,764,13,64,-38,64 2 0364 -- ocircumflex
-char244 "
-~o 655,754,13,64,-38,64 2 0365 -- otilde
-char245 "
-:o 655,765,13,64,-38,64 2 0366 -- odieresis
-char246 "
-char247 606,519,13,52,-42,52 0 0367 -- divide
-/o 653,614,64,100,-1,81 0 0370 -- oslash
-char248 "
-`u 608,786,13,84,-50,81 2 0371 -- ugrave
-char249 "
-'u 608,786,13,84,-50,81 2 0372 -- uacute
-char250 "
-^u 608,764,13,84,-50,81 2 0373 -- ucircumflex
-char251 "
-:u 608,765,13,84,-50,81 2 0374 -- udieresis
-char252 "
-'y 536,786,192,138,-47,81 3 0375 -- yacute
-char253 "
-Tp 682,740,192,67,22,67 3 0376 -- thorn
-char254 "
-:y 536,765,192,138,-47,81 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/AR b/contrib/groff/devps/AR
deleted file mode 100644
index 9dff2dc..0000000
--- a/contrib/groff/devps/AR
+++ /dev/null
@@ -1,574 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -120
-. cq -120
-. rq -120
-lq ` -35
-lq oq -35
-lq A -100
-` ` -203
-` oq -203
-oq ` -203
-oq oq -203
-` A -100
-oq A -100
-' v -30
-cq v -30
-' t 10
-cq t 10
-' 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 char173 -60
-r g -15
-r e -4
-r d -6
-r , -75
-r c -20
-r a -20
-s . 20
-s , 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 0000 -- asciicircum
-ti 606,319 0 0001 -- asciitilde
-vS 498,927,13 2 0002 -- Scaron
-vZ 480,927 2 0003 -- Zcaron
-vs 388,764,13 2 0004 -- scaron
-vz 425,764 2 0005 -- zcaron
-:Y 592,928 2 0006 -- Ydieresis
-tm 1000,740 2 0007 -- trademark
-aq 198,740 2 0010 -- quotesingle
-space 277 0 0040
-! 295,740 2 0041 -- exclam
-" 309,740 2 0042 -- quotedbl
-dq "
-# 554,740 2 0043 -- numbersign
-sh "
-$ 554,811,70 2 0044 -- dollar
-Do "
-% 775,751,13 2 0045 -- percent
-& 757,753,12 2 0046 -- ampersand
-' 351,740 2 0047 -- quoteright
-cq "
-( 369,757,205 3 0050 -- parenleft
-) 369,757,205 3 0051 -- parenright
-* 425,740 2 0052 -- asterisk
-+ 606,506 0 0053 -- plus
-, 277,126,67 0 0054 -- comma
-- 332,315 0 0055 -- hyphen
-hy "
-char173 "
-. 277,126 0 0056 -- period
-/ 437,740,100 2 0057 -- slash
-sl "
-0 554,753,13 2 0060 -- zero
-1 554,740 2 0061 -- one
-2 554,753 2 0062 -- two
-3 554,753,13 2 0063 -- three
-4 554,740 2 0064 -- four
-5 554,740,13 2 0065 -- five
-6 554,739,13 2 0066 -- six
-7 554,740 2 0067 -- seven
-8 554,753,13 2 0070 -- eight
-9 554,752 2 0071 -- nine
-: 277,548 0 0072 -- colon
-; 277,548,67 0 0073 -- semicolon
-< 606,514,8 0 0074 -- less
-= 606,388 0 0075 -- equal
-> 606,514,8 0 0076 -- greater
-? 591,752 2 0077 -- question
-@ 867,753,13 2 0100 -- at
-at "
-A 740,740 2 0101 -- A
-B 574,740 2 0102 -- B
-C 813,752,13 2 0103 -- C
-D 744,740 2 0104 -- D
-E 536,740 2 0105 -- E
-F 485,740 2 0106 -- F
-G 872,753,13 2 0107 -- G
-H 683,740 2 0110 -- H
-I 226,740 2 0111 -- I
-J 482,740,13 2 0112 -- J
-K 591,740 2 0113 -- K
-L 462,740 2 0114 -- L
-M 919,740 2 0115 -- M
-N 740,740 2 0116 -- N
-O 869,753,13 2 0117 -- O
-P 592,740 2 0120 -- P
-Q 871,753,13 2 0121 -- Q
-R 607,740 2 0122 -- R
-S 498,753,13 2 0123 -- S
-T 426,740 2 0124 -- T
-U 655,740,13 2 0125 -- U
-V 702,740 2 0126 -- V
-W 960,740 2 0127 -- W
-X 609,740 2 0130 -- X
-Y 592,740 2 0131 -- Y
-Z 480,740 2 0132 -- Z
-[ 351,753,179 2 0133 -- bracketleft
-lB "
-\ 605,740,100 2 0134 -- backslash
-rs "
-] 351,753,179 2 0135 -- bracketright
-rB "
-a^ 502,764 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 351,740 2 0140 -- quoteleft
-oq "
-a 683,561,13 0 0141 -- a
-b 682,740,13 2 0142 -- b
-c 647,561,13 0 0143 -- c
-d 685,740,13 2 0144 -- d
-e 650,561,13 0 0145 -- e
-f 314,753 2 0146 -- f
-g 673,561,215 1 0147 -- g
-h 610,740 2 0150 -- h
-i 200,740 2 0151 -- i
-j 203,740,192 3 0152 -- j
-k 502,740 2 0153 -- k
-l 200,740 2 0154 -- l
-m 938,561 0 0155 -- m
-n 610,561 0 0156 -- n
-o 655,561,13 0 0157 -- o
-p 682,561,192 1 0160 -- p
-q 682,561,192 1 0161 -- q
-r 301,561 0 0162 -- r
-s 388,561,13 0 0163 -- s
-t 339,740 2 0164 -- t
-u 608,547,13 0 0165 -- u
-v 554,547 0 0166 -- v
-w 831,547 0 0167 -- w
-x 480,547 0 0170 -- x
-y 536,547,192 1 0171 -- y
-z 425,547 0 0172 -- z
-lC 351,740,189 2 0173 -- braceleft
-{ "
-ba 672,740,100 2 0174 -- bar
-| "
-rC 351,740,189 2 0175 -- braceright
-} "
-a~ 439,754 2 0176 -- tilde
-~ "
-bq 354,126,68 0 0200 -- quotesinglbase
-Fo 425,481 0 0201 -- guillemotleft
-char171 "
-Fc 425,481 0 0202 -- guillemotright
-char187 "
-bu 606,532 0 0203 -- bullet
-Fn 554,818,153 2 0204 -- florin
-f/ 166,740 2 0205 -- fraction
-%0 1174,751,13 2 0206 -- perthousand
-dg 553,740,133 2 0207 -- dagger
-dd 553,740,133 2 0210 -- daggerdbl
-en 500,315 0 0211 -- endash
-em 1000,315 0 0212 -- emdash
-fi 487,753 2 0214 -- fi
-fl 485,753 2 0215 -- fl
-.i 200,547 0 0220 -- dotlessi
-ga 378,786 2 0222 -- grave
-a" 552,800 2 0223 -- hungarumlaut
-a. 222,765 2 0224 -- dotaccent
-ab 453,754 2 0225 -- breve
-ah 502,764 2 0226 -- caron
-ao 332,807 2 0227 -- ring
-ho 302,0,191 1 0230 -- ogonek
-lq 502,740 2 0231 -- quotedblleft
-rq 484,740 2 0232 -- quotedblright
-oe 1137,561,13 0 0233 -- oe
-/l 300,740 2 0234 -- lslash
-Bq 502,126,68 0 0235 -- quotedblbase
-OE 1194,753,13 2 0236 -- OE
-/L 517,740 2 0237 -- Lslash
-r! 295,548,192 1 0241 -- exclamdown
-char161 "
-ct 554,707 0 0242 -- cent
-char162 "
-Po 554,753 2 0243 -- sterling
-char163 "
-Cs 554,580 0 0244 -- currency
-char164 "
-Ye 554,740 2 0245 -- yen
-char165 "
-bb 672,740,100 2 0246 -- brokenbar
-char166 "
-sc 615,753,141 2 0247 -- section
-char167 "
-ad 369,765 2 0250 -- dieresis
-char168 "
-co 747,752,12 2 0251 -- copyright
-char169 "
-Of 369,753 2 0252 -- ordfeminine
-char170 "
-fo 251,481 0 0253 -- guilsinglleft
-no 606,388 0 0254 -- logicalnot
-char172 "
-\- 606,287 0 0255 -- minus
-rg 747,752,12 2 0256 -- registered
-char174 "
-a- 485,736 0 0257 -- macron
-char175 "
-de 400,709 0 0260 -- degree
-char176 "
-char177 606,518,24 0 0261 -- plusminus
-S2 332,747 2 0262 -- twosuperior
-char178 "
-S3 332,747 2 0263 -- threesuperior
-char179 "
-aa 375,786 2 0264 -- acute
-char180 "
-char181 608,547,184 0 0265 -- mu
-ps 564,740,110 2 0266 -- paragraph
-char182 "
-pc 277,316 0 0267 -- periodcentered
-char183 "
-ac 324,0,222 1 0270 -- cedilla
-char184 "
-S1 332,740 2 0271 -- onesuperior
-char185 "
-Om 369,753 2 0272 -- ordmasculine
-char186 "
-fc 251,481 0 0273 -- guilsinglright
-14 831,740 2 0274 -- onequarter
-char188 "
-12 831,740 2 0275 -- onehalf
-char189 "
-34 831,747 2 0276 -- threequarters
-char190 "
-r? 591,548,205 1 0277 -- questiondown
-char191 "
-`A 740,949 2 0300 -- Agrave
-char192 "
-'A 740,949 2 0301 -- Aacute
-char193 "
-^A 740,927 2 0302 -- Acircumflex
-char194 "
-~A 740,917 2 0303 -- Atilde
-char195 "
-:A 740,928 2 0304 -- Adieresis
-char196 "
-oA 740,955 2 0305 -- Aring
-char197 "
-AE 992,740 2 0306 -- AE
-char198 "
-,C 813,752,222 3 0307 -- Ccedilla
-char199 "
-`E 536,949 2 0310 -- Egrave
-char200 "
-'E 536,949 2 0311 -- Eacute
-char201 "
-^E 536,927 2 0312 -- Ecircumflex
-char202 "
-:E 536,928 2 0313 -- Edieresis
-char203 "
-`I 226,949 2 0314 -- Igrave
-char204 "
-'I 226,949 2 0315 -- Iacute
-char205 "
-^I 226,927 2 0316 -- Icircumflex
-char206 "
-:I 226,928 2 0317 -- Idieresis
-char207 "
--D 790,740 2 0320 -- Eth
-char208 "
-~N 740,917 2 0321 -- Ntilde
-char209 "
-`O 869,949,13 2 0322 -- Ograve
-char210 "
-'O 869,949,13 2 0323 -- Oacute
-char211 "
-^O 869,927,13 2 0324 -- Ocircumflex
-char212 "
-~O 869,917,13 2 0325 -- Otilde
-char213 "
-:O 869,928,13 2 0326 -- Odieresis
-char214 "
-char215 606,482 0 0327 -- multiply
-/O 868,819,83 2 0330 -- Oslash
-char216 "
-`U 655,949,13 2 0331 -- Ugrave
-char217 "
-'U 655,949,13 2 0332 -- Uacute
-char218 "
-^U 655,927,13 2 0333 -- Ucircumflex
-char219 "
-:U 655,928,13 2 0334 -- Udieresis
-char220 "
-'Y 592,949 2 0335 -- Yacute
-char221 "
-TP 592,740 2 0336 -- Thorn
-char222 "
-ss 554,753,13 2 0337 -- germandbls
-char223 "
-`a 683,786,13 2 0340 -- agrave
-char224 "
-'a 683,786,13 2 0341 -- aacute
-char225 "
-^a 683,764,13 2 0342 -- acircumflex
-char226 "
-~a 683,754,13 2 0343 -- atilde
-char227 "
-:a 683,765,13 2 0344 -- adieresis
-char228 "
-oa 683,807,13 2 0345 -- aring
-char229 "
-ae 1157,561,13 0 0346 -- ae
-char230 "
-,c 647,561,222 1 0347 -- ccedilla
-char231 "
-`e 650,786,13 2 0350 -- egrave
-char232 "
-'e 650,786,13 2 0351 -- eacute
-char233 "
-^e 650,764,13 2 0352 -- ecircumflex
-char234 "
-:e 650,765,13 2 0353 -- edieresis
-char235 "
-`i 200,786 2 0354 -- igrave
-char236 "
-'i 200,786 2 0355 -- iacute
-char237 "
-^i 200,764 2 0356 -- icircumflex
-char238 "
-:i 200,765 2 0357 -- idieresis
-char239 "
-Sd 655,753,12 2 0360 -- eth
-char240 "
-~n 610,754 2 0361 -- ntilde
-char241 "
-`o 655,786,13 2 0362 -- ograve
-char242 "
-'o 655,786,13 2 0363 -- oacute
-char243 "
-^o 655,764,13 2 0364 -- ocircumflex
-char244 "
-~o 655,754,13 2 0365 -- otilde
-char245 "
-:o 655,765,13 2 0366 -- odieresis
-char246 "
-char247 606,519,13 0 0367 -- divide
-/o 653,614,64 0 0370 -- oslash
-char248 "
-`u 608,786,13 2 0371 -- ugrave
-char249 "
-'u 608,786,13 2 0372 -- uacute
-char250 "
-^u 608,764,13 2 0373 -- ucircumflex
-char251 "
-:u 608,765,13 2 0374 -- udieresis
-char252 "
-'y 536,786,192 3 0375 -- yacute
-char253 "
-Tp 682,740,192 3 0376 -- thorn
-char254 "
-:y 536,765,192 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/BMB b/contrib/groff/devps/BMB
deleted file mode 100644
index 186ec7b..0000000
--- a/contrib/groff/devps/BMB
+++ /dev/null
@@ -1,441 +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 char173 -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 char173 -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 char173 -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 char173 -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 char173 -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 0000 -- asciicircum
-ti 600,368 0 0001 -- asciitilde
-vS 660,896,17 2 0002 -- Scaron
-vZ 640,896 2 0003 -- Zcaron
-vs 520,717,8 2 0004 -- scaron
-vz 560,717 2 0005 -- zcaron
-:Y 700,877 2 0006 -- Ydieresis
-tm 980,681 2 0007 -- trademark
-aq 240,698 2 0010 -- quotesingle
-space 340 0 0040
-! 360,698,8 2 0041 -- exclam
-" 420,698 2 0042 -- quotedbl
-dq "
-# 660,681 2 0043 -- numbersign
-sh "
-$ 660,805,119 2 0044 -- dollar
-Do "
-% 940,698,8 2 0045 -- percent
-& 800,698,17 2 0046 -- ampersand
-' 320,698 2 0047 -- quoteright
-cq "
-( 320,749,150 2 0050 -- parenleft
-) 320,749,150 2 0051 -- parenright
-* 460,697 2 0052 -- asterisk
-+ 600,514 0 0053 -- plus
-, 340,162,124 0 0054 -- comma
-- 360,318 0 0055 -- hyphen
-hy "
-char173 "
-. 340,172,8 0 0056 -- period
-/ 600,725,149 2 0057 -- slash
-sl "
-0 660,698,17 2 0060 -- zero
-1 660,681 2 0061 -- one
-2 660,698 2 0062 -- two
-3 660,698,17 2 0063 -- three
-4 660,681 2 0064 -- four
-5 660,723,17 2 0065 -- five
-6 660,698,17 2 0066 -- six
-7 660,681 2 0067 -- seven
-8 660,698,17 2 0070 -- eight
-9 660,698,17 2 0071 -- nine
-: 340,515,8 0 0072 -- colon
-; 340,515,124 0 0073 -- semicolon
-< 600,542,9 0 0074 -- less
-= 600,421 0 0075 -- equal
-> 600,542,9 0 0076 -- greater
-? 660,698,8 2 0077 -- question
-@ 820,698,17 2 0100 -- at
-at "
-A 720,681 2 0101 -- A
-B 720,681 2 0102 -- B
-C 740,698,17 2 0103 -- C
-D 780,681 2 0104 -- D
-E 720,681 2 0105 -- E
-F 680,681 2 0106 -- F
-G 780,698,17 2 0107 -- G
-H 820,681 2 0110 -- H
-I 400,681 2 0111 -- I
-J 640,681,17 2 0112 -- J
-K 800,681 2 0113 -- K
-L 640,681 2 0114 -- L
-M 940,681 2 0115 -- M
-N 740,681 2 0116 -- N
-O 800,698,17 2 0117 -- O
-P 660,681 2 0120 -- P
-Q 800,698,226 3 0121 -- Q
-R 780,681 2 0122 -- R
-S 660,698,17 2 0123 -- S
-T 700,681 2 0124 -- T
-U 740,681,17 2 0125 -- U
-V 720,681 2 0126 -- V
-W 940,681 2 0127 -- W
-X 780,681 2 0130 -- X
-Y 700,681 2 0131 -- Y
-Z 640,681 2 0132 -- Z
-[ 300,725,138 2 0133 -- bracketleft
-lB "
-\ 600,725 2 0134 -- backslash
-rs "
-] 300,725,138 2 0135 -- bracketright
-rB "
-a^ 500,731 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 320,698 2 0140 -- quoteleft
-oq "
-a 580,515,8 0 0141 -- a
-b 600,725,8 2 0142 -- b
-c 580,515,8 0 0143 -- c
-d 640,725,8 2 0144 -- d
-e 580,515,8 0 0145 -- e
-f 380,741 2 0146 -- f
-g 580,595,243 1 0147 -- g
-h 680,725 2 0150 -- h
-i 360,729 2 0151 -- i
-j 340,729,221 3 0152 -- j
-k 660,725 2 0153 -- k
-l 340,725 2 0154 -- l
-m 1000,515 0 0155 -- m
-n 680,515 0 0156 -- n
-o 620,515,8 0 0157 -- o
-p 640,515,212 1 0160 -- p
-q 620,515,212 1 0161 -- q
-r 460,502 0 0162 -- r
-s 520,515,8 0 0163 -- s
-t 460,660,8 2 0164 -- t
-u 660,502,8 0 0165 -- u
-v 600,502 0 0166 -- v
-w 800,502 0 0167 -- w
-x 600,502 0 0170 -- x
-y 620,502,221 1 0171 -- y
-z 560,502 0 0172 -- z
-lC 320,726,139 2 0173 -- braceleft
-{ "
-ba 600,750,250 3 0174 -- bar
-| "
-rC 320,725,140 2 0175 -- braceright
-} "
-a~ 480,691 2 0176 -- tilde
-~ "
-bq 320,144,114 0 0200 -- quotesinglbase
-Fo 400,457 0 0201 -- guillemotleft
-char171 "
-Fc 400,457 0 0202 -- guillemotright
-char187 "
-bu 460,511 0 0203 -- bullet
-Fn 660,749,209 2 0204 -- florin
-f/ 120,681 2 0205 -- fraction
-%0 1360,698,8 2 0206 -- perthousand
-dg 440,698,156 2 0207 -- dagger
-dd 380,698,156 2 0210 -- daggerdbl
-en 500,318 0 0211 -- endash
-em 1000,318 0 0212 -- emdash
-fi 740,741 2 0214 -- fi
-fl 740,741 2 0215 -- fl
-.i 360,502 0 0220 -- dotlessi
-ga 400,730 2 0222 -- grave
-a" 440,741 2 0223 -- hungarumlaut
-a. 320,730 2 0224 -- dotaccent
-ab 500,722 2 0225 -- breve
-ah 500,717 2 0226 -- caron
-ao 340,755 2 0227 -- ring
-ho 320,0,163 0 0230 -- ogonek
-lq 540,698 2 0231 -- quotedblleft
-rq 540,698 2 0232 -- quotedblright
-oe 940,515,8 0 0233 -- oe
-/l 340,725 2 0234 -- lslash
-Bq 540,144,114 0 0235 -- quotedblbase
-OE 1220,698,17 2 0236 -- OE
-/L 640,681 2 0237 -- Lslash
-r! 360,515,191 0 0241 -- exclamdown
-char161 "
-ct 660,674 2 0242 -- cent
-char162 "
-Po 660,698,17 2 0243 -- sterling
-char163 "
-Cs 660,593 0 0244 -- currency
-char164 "
-Ye 660,681 2 0245 -- yen
-char165 "
-bb 600,675,175 2 0246 -- brokenbar
-char166 "
-sc 600,698,153 2 0247 -- section
-char167 "
-ad 500,698 2 0250 -- dieresis
-char168 "
-co 740,698,17 2 0251 -- copyright
-char169 "
-Of 400,698 2 0252 -- ordfeminine
-char170 "
-fo 220,457 0 0253 -- guilsinglleft
-no 600,421 0 0254 -- logicalnot
-char172 "
-\- 600,323 0 0255 -- minus
-rg 740,698,17 2 0256 -- registered
-char174 "
-a- 460,663 2 0257 -- macron
-char175 "
-de 400,698 2 0260 -- degree
-char176 "
-char177 600,514 0 0261 -- plusminus
-S2 396,698 2 0262 -- twosuperior
-char178 "
-S3 396,698 2 0263 -- threesuperior
-char179 "
-aa 400,731 2 0264 -- acute
-char180 "
-char181 660,502,221 1 0265 -- mu
-ps 800,681 2 0266 -- paragraph
-char182 "
-pc 340,355 0 0267 -- periodcentered
-char183 "
-ac 360,0,213 1 0270 -- cedilla
-char184 "
-S1 396,687 2 0271 -- onesuperior
-char185 "
-Om 400,698 2 0272 -- ordmasculine
-char186 "
-fc 220,457 0 0273 -- guilsinglright
-14 990,681 2 0274 -- onequarter
-char188 "
-12 990,681 2 0275 -- onehalf
-char189 "
-34 990,692 2 0276 -- threequarters
-char190 "
-r? 660,515,191 0 0277 -- questiondown
-char191 "
-`A 720,909 2 0300 -- Agrave
-char192 "
-'A 720,910 2 0301 -- Aacute
-char193 "
-^A 720,910 2 0302 -- Acircumflex
-char194 "
-~A 720,870 2 0303 -- Atilde
-char195 "
-:A 720,877 2 0304 -- Adieresis
-char196 "
-oA 720,934 2 0305 -- Aring
-char197 "
-AE 1140,681 2 0306 -- AE
-char198 "
-,C 740,698,213 3 0307 -- Ccedilla
-char199 "
-`E 720,909 2 0310 -- Egrave
-char200 "
-'E 720,910 2 0311 -- Eacute
-char201 "
-^E 720,910 2 0312 -- Ecircumflex
-char202 "
-:E 720,877 2 0313 -- Edieresis
-char203 "
-`I 400,909 2 0314 -- Igrave
-char204 "
-'I 400,910 2 0315 -- Iacute
-char205 "
-^I 400,910 2 0316 -- Icircumflex
-char206 "
-:I 400,877 2 0317 -- Idieresis
-char207 "
--D 780,681 2 0320 -- Eth
-char208 "
-~N 740,870 2 0321 -- Ntilde
-char209 "
-`O 800,909,17 2 0322 -- Ograve
-char210 "
-'O 800,910,17 2 0323 -- Oacute
-char211 "
-^O 800,910,17 2 0324 -- Ocircumflex
-char212 "
-~O 800,870,17 2 0325 -- Otilde
-char213 "
-:O 800,877,17 2 0326 -- Odieresis
-char214 "
-char215 600,514 0 0327 -- multiply
-/O 800,781,110 2 0330 -- Oslash
-char216 "
-`U 740,909,17 2 0331 -- Ugrave
-char217 "
-'U 740,910,17 2 0332 -- Uacute
-char218 "
-^U 740,910,17 2 0333 -- Ucircumflex
-char219 "
-:U 740,877,17 2 0334 -- Udieresis
-char220 "
-'Y 700,910 2 0335 -- Yacute
-char221 "
-TP 660,681 2 0336 -- Thorn
-char222 "
-ss 660,699,91 2 0337 -- germandbls
-char223 "
-`a 580,730,8 2 0340 -- agrave
-char224 "
-'a 580,731,8 2 0341 -- aacute
-char225 "
-^a 580,731,8 2 0342 -- acircumflex
-char226 "
-~a 580,691,8 2 0343 -- atilde
-char227 "
-:a 580,698,8 2 0344 -- adieresis
-char228 "
-oa 580,755,8 2 0345 -- aring
-char229 "
-ae 880,515,8 0 0346 -- ae
-char230 "
-,c 580,515,213 1 0347 -- ccedilla
-char231 "
-`e 580,730,8 2 0350 -- egrave
-char232 "
-'e 580,731,8 2 0351 -- eacute
-char233 "
-^e 580,731,8 2 0352 -- ecircumflex
-char234 "
-:e 580,698,8 2 0353 -- edieresis
-char235 "
-`i 360,730 2 0354 -- igrave
-char236 "
-'i 360,731 2 0355 -- iacute
-char237 "
-^i 360,731 2 0356 -- icircumflex
-char238 "
-:i 360,698 2 0357 -- idieresis
-char239 "
-Sd 620,741,8 2 0360 -- eth
-char240 "
-~n 680,691 2 0361 -- ntilde
-char241 "
-`o 620,730,8 2 0362 -- ograve
-char242 "
-'o 620,731,8 2 0363 -- oacute
-char243 "
-^o 620,731,8 2 0364 -- ocircumflex
-char244 "
-~o 620,691,8 2 0365 -- otilde
-char245 "
-:o 620,698,8 2 0366 -- odieresis
-char246 "
-char247 600,521 0 0367 -- divide
-/o 620,551,40 0 0370 -- oslash
-char248 "
-`u 660,730,8 2 0371 -- ugrave
-char249 "
-'u 660,731,8 2 0372 -- uacute
-char250 "
-^u 660,731,8 2 0373 -- ucircumflex
-char251 "
-:u 660,698,8 2 0374 -- udieresis
-char252 "
-'y 620,731,221 3 0375 -- yacute
-char253 "
-Tp 640,725,212 3 0376 -- thorn
-char254 "
-:y 620,698,221 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/BMBI b/contrib/groff/devps/BMBI
deleted file mode 100644
index 43d2bdd..0000000
--- a/contrib/groff/devps/BMBI
+++ /dev/null
@@ -1,444 +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 char173 -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 char173 -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 char173 -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 char173 -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 char173 -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 0000 -- asciicircum
-ti 620,368,0,35,-51,35 0 0001 -- asciitilde
-vS 700,915,17,81,-9,73 2 0002 -- Scaron
-vZ 680,915,0,110,27,73 2 0003 -- Zcaron
-vs 540,749,8,83,18,73 2 0004 -- scaron
-vz 560,749,8,76,14,73 2 0005 -- zcaron
-:Y 660,900,0,207,-22,73 2 0006 -- Ydieresis
-tm 940,681,0,92,8,73 2 0007 -- trademark
-aq 180,696,0,165,-76,73 2 0010 -- quotesingle
-space 340 0 0040
-! 320,698,8,96,-36,73 2 0041 -- exclam
-" 380,697,0,177,-90,73 2 0042 -- quotedbl
-dq "
-# 680,681,0,19,-107,19 2 0043 -- numbersign
-sh "
-$ 680,790,164,67,5,67 2 0044 -- dollar
-Do "
-% 880,698,17,69,-56,69 2 0045 -- percent
-& 980,698,17,86,2,73 2 0046 -- ampersand
-' 320,698,0,79,-121,73 2 0047 -- quoteright
-cq "
-( 260,741,134,178,19,73 2 0050 -- parenleft
-) 260,741,134,112,85,73 2 0051 -- parenright
-* 460,698,0,98,-76,73 2 0052 -- asterisk
-+ 600,514,0,45,-41,45 0 0053 -- plus
-, 340,185,124,8,-50,8 0 0054 -- comma
-- 280,313,0,89,-9,73 0 0055 -- hyphen
-hy "
-char173 "
-. 340,177,8,6,-56,6 0 0056 -- period
-/ 360,742,106,192,41,73 2 0057 -- slash
-sl "
-0 680,698,17,73,-37,73 2 0060 -- zero
-1 680,681,0,0,-73 2 0061 -- one
-2 680,698,0,44,-17,44 2 0062 -- two
-3 680,698,17,53,-22,53 2 0063 -- three
-4 680,681,0,78,-13,73 2 0064 -- four
-5 680,681,17,39,-28,39 2 0065 -- five
-6 680,698,17,74,-38,73 2 0066 -- six
-7 680,681,0,109,-73,73 2 0067 -- seven
-8 680,698,17,56,-18,56 2 0070 -- eight
-9 680,698,17,82,-21,73 2 0071 -- nine
-: 340,515,8,66,-56,66 0 0072 -- colon
-; 340,515,124,62,-50,62 0 0073 -- semicolon
-< 620,540,9,18,-29,18 0 0074 -- less
-= 600,421,0,45,-41,45 0 0075 -- equal
-> 620,540,9,28,-39,28 0 0076 -- greater
-? 620,698,8,98,-95,73 2 0077 -- question
-@ 780,698,17,60,-30,60 2 0100 -- at
-at "
-A 720,681,0,99,77,73 2 0101 -- A
-B 720,681,0,92,36,73 2 0102 -- B
-C 700,698,17,104,-28,73 2 0103 -- C
-D 760,681,0,95,36,73 2 0104 -- D
-E 720,681,0,107,36,73 2 0105 -- E
-F 660,681,0,153,36,73 2 0106 -- F
-G 760,698,17,118,-27,73 2 0107 -- G
-H 800,681,0,160,36,73 2 0110 -- H
-I 380,681,0,155,36,73 2 0111 -- I
-J 620,681,17,151,42,73 2 0112 -- J
-K 780,681,0,149,36,73 2 0113 -- K
-L 640,681,0,135,36,73 2 0114 -- L
-M 860,681,0,160,36,73 2 0115 -- M
-N 740,681,0,155,36,73 2 0116 -- N
-O 760,698,17,96,-28,73 2 0117 -- O
-P 640,681,0,134,56,73 2 0120 -- P
-Q 760,698,213,95,13,73 3 0121 -- Q
-R 740,681,0,75,36,73 2 0122 -- R
-S 700,698,17,81,-9,73 2 0123 -- S
-T 700,681,0,152,-20,73 2 0124 -- T
-U 740,681,17,165,-62,73 2 0125 -- U
-V 660,681,0,209,-22,73 2 0126 -- V
-W 1000,681,0,140,-22,73 2 0127 -- W
-X 740,681,0,145,57,73 2 0130 -- X
-Y 660,681,0,207,-22,73 2 0131 -- Y
-Z 680,681,0,110,27,73 2 0132 -- Z
-[ 260,741,118,164,41,73 2 0133 -- bracketleft
-lB "
-\ 580,741,0,45,-23,45 2 0134 -- backslash
-rs "
-] 260,741,118,137,68,73 2 0135 -- bracketright
-rB "
-a^ 480,749,0,93,-133,73 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 320,698,0,63,-105,63 2 0140 -- quoteleft
-oq "
-a 680,515,8,105,-34,73 0 0141 -- a
-b 600,732,8,83,-7,73 2 0142 -- b
-c 560,515,8,87,-8,73 0 0143 -- c
-d 680,732,8,84,-10,73 2 0144 -- d
-e 560,515,8,86,-9,73 0 0145 -- e
-f 420,741,213,271,242,73 3 0146 -- f
-g 620,515,213,99,29,73 1 0147 -- g
-h 700,732,8,86,-43,73 2 0150 -- h
-i 380,755,8,90,-33,73 2 0151 -- i
-j 320,755,213,122,210,73 3 0152 -- j
-k 700,732,8,82,-47,73 2 0153 -- k
-l 380,732,8,80,-59,73 2 0154 -- l
-m 960,515,8,86,-33,73 0 0155 -- m
-n 680,515,8,85,-33,73 0 0156 -- n
-o 600,515,8,77,-9,73 0 0157 -- o
-p 660,515,213,72,74,72 1 0160 -- p
-q 620,515,213,70,-10,70 1 0161 -- q
-r 500,515,0,132,-34,73 0 0162 -- r
-s 540,515,8,83,18,73 0 0163 -- s
-t 440,658,8,98,-56,73 2 0164 -- t
-u 680,507,8,90,-33,73 0 0165 -- u
-v 540,515,8,82,-6,73 0 0166 -- v
-w 860,515,8,81,-6,73 0 0167 -- w
-x 620,515,8,84,40,73 0 0170 -- x
-y 600,507,213,92,25,73 1 0171 -- y
-z 560,515,8,76,14,73 0 0172 -- z
-lC 300,742,123,163,1,73 2 0173 -- braceleft
-{ "
-ba 620,750,250,0,-253 3 0174 -- bar
-| "
-rC 300,751,114,106,58,73 2 0175 -- braceright
-} "
-a~ 480,709,0,103,-128,73 2 0176 -- tilde
-~ "
-bq 300,166,112,34,-56,34 0 0200 -- quotesinglbase
-Fo 380,503,0,76,-12,73 0 0201 -- guillemotleft
-char171 "
-Fc 380,503,0,76,-12,73 0 0202 -- guillemotright
-char187 "
-bu 360,511,0,94,-10,73 0 0203 -- bullet
-Fn 680,741,199,113,78,73 2 0204 -- florin
-f/ 120,681,0,312,194,73 2 0205 -- fraction
-%0 1360,698,17,23,-56,23 2 0206 -- perthousand
-dg 420,698,137,96,-39,73 2 0207 -- dagger
-dd 420,698,137,116,-29,73 2 0210 -- daggerdbl
-en 500,311,0,123,10,73 0 0211 -- endash
-em 1000,311,0,123,10,73 0 0212 -- emdash
-fi 820,741,213,80,241,73 3 0214 -- fi
-fl 820,741,213,80,241,73 3 0215 -- fl
-.i 380,507,8,90,-33,73 0 0220 -- dotlessi
-ga 380,771,0,94,-143,73 2 0222 -- grave
-a" 560,775,0,106,-131,73 2 0223 -- hungarumlaut
-a. 380,734,0,15,-130,15 2 0224 -- dotaccent
-ab 460,707,0,106,-127,73 2 0225 -- breve
-ah 480,749,0,93,-133,73 2 0226 -- caron
-ao 360,775,0,96,-135,73 2 0227 -- ring
-ho 320,0,182,0,-18 0 0230 -- ogonek
-lq 520,698,0,75,-106,73 2 0231 -- quotedblleft
-rq 520,698,0,90,-121,73 2 0232 -- quotedblright
-oe 920,515,8,91,2,73 0 0233 -- oe
-/l 380,732,8,82,-13,73 2 0234 -- lslash
-Bq 520,166,112,25,-56,25 0 0235 -- quotedblbase
-OE 1180,698,17,115,-44,73 2 0236 -- OE
-/L 640,681,0,134,36,73 2 0237 -- Lslash
-r! 320,515,191,74,-14,73 0 0241 -- exclamdown
-char161 "
-ct 680,718,0,0,-111 2 0242 -- cent
-char162 "
-Po 680,698,17,157,50,73 2 0243 -- sterling
-char163 "
-Cs 680,571,0,7,-98,7 0 0244 -- currency
-char164 "
-Ye 680,681,0,152,-42,73 2 0245 -- yen
-char165 "
-bb 620,675,175,0,-253 2 0246 -- brokenbar
-char166 "
-sc 620,698,137,68,4,68 2 0247 -- section
-char167 "
-ad 520,734,0,99,-130,73 2 0250 -- dieresis
-char168 "
-co 780,698,17,53,-33,53 2 0251 -- copyright
-char169 "
-Of 440,685,0,105,-68,73 2 0252 -- ordfeminine
-char170 "
-fo 220,503,0,79,-12,73 0 0253 -- guilsinglleft
-no 620,421,0,15,-31,15 0 0254 -- logicalnot
-char172 "
-\- 600,323,0,45,-41,45 0 0255 -- minus
-rg 780,698,17,53,-33,53 2 0256 -- registered
-char174 "
-a- 480,691,0,101,-127,73 2 0257 -- macron
-char175 "
-de 400,698,0,80,-80,73 2 0260 -- degree
-char176 "
-char177 600,514,0,45,-41,45 0 0261 -- plusminus
-S2 408,698,0,127,-41,73 2 0262 -- twosuperior
-char178 "
-S3 408,698,0,125,-36,73 2 0263 -- threesuperior
-char179 "
-aa 340,771,0,117,-126,73 2 0264 -- acute
-char180 "
-char181 680,507,213,90,-4,73 1 0265 -- mu
-ps 680,681,0,85,-87,73 2 0266 -- paragraph
-char182 "
-pc 340,358,0,26,-76,26 0 0267 -- periodcentered
-char183 "
-ac 360,0,220,0,-18 1 0270 -- cedilla
-char184 "
-S1 408,688,0,48,-68,48 2 0271 -- onesuperior
-char185 "
-Om 440,685,0,65,-77,65 2 0272 -- ordmasculine
-char186 "
-fc 220,503,0,79,-12,73 0 0273 -- guilsinglright
-14 1020,681,0,84,-68,73 2 0274 -- onequarter
-char188 "
-12 1020,681,0,66,-68,66 2 0275 -- onehalf
-char189 "
-34 1020,691,0,84,-36,73 2 0276 -- threequarters
-char190 "
-r? 620,515,189,36,-33,36 0 0277 -- questiondown
-char191 "
-`A 720,937,0,99,77,73 2 0300 -- Agrave
-char192 "
-'A 720,937,0,99,77,73 2 0301 -- Aacute
-char193 "
-^A 720,915,0,99,77,73 2 0302 -- Acircumflex
-char194 "
-~A 720,875,0,99,77,73 2 0303 -- Atilde
-char195 "
-:A 720,900,0,99,77,73 2 0304 -- Adieresis
-char196 "
-oA 720,941,0,99,77,73 2 0305 -- Aring
-char197 "
-AE 1140,681,0,117,77,73 2 0306 -- AE
-char198 "
-,C 700,698,220,104,-28,73 3 0307 -- Ccedilla
-char199 "
-`E 720,937,0,107,36,73 2 0310 -- Egrave
-char200 "
-'E 720,937,0,107,36,73 2 0311 -- Eacute
-char201 "
-^E 720,915,0,107,36,73 2 0312 -- Ecircumflex
-char202 "
-:E 720,900,0,107,36,73 2 0313 -- Edieresis
-char203 "
-`I 380,937,0,155,36,73 2 0314 -- Igrave
-char204 "
-'I 380,937,0,155,36,73 2 0315 -- Iacute
-char205 "
-^I 380,915,0,163,36,73 2 0316 -- Icircumflex
-char206 "
-:I 380,900,0,169,36,73 2 0317 -- Idieresis
-char207 "
--D 760,681,0,95,36,73 2 0320 -- Eth
-char208 "
-~N 740,875,0,155,36,73 2 0321 -- Ntilde
-char209 "
-`O 760,937,17,96,-28,73 2 0322 -- Ograve
-char210 "
-'O 760,937,17,96,-28,73 2 0323 -- Oacute
-char211 "
-^O 760,915,17,96,-28,73 2 0324 -- Ocircumflex
-char212 "
-~O 760,875,17,96,-28,73 2 0325 -- Otilde
-char213 "
-:O 760,900,17,96,-28,73 2 0326 -- Odieresis
-char214 "
-char215 600,514,0,45,-41,45 0 0327 -- multiply
-/O 760,725,29,137,29,73 2 0330 -- Oslash
-char216 "
-`U 740,937,17,165,-62,73 2 0331 -- Ugrave
-char217 "
-'U 740,937,17,165,-62,73 2 0332 -- Uacute
-char218 "
-^U 740,915,17,165,-62,73 2 0333 -- Ucircumflex
-char219 "
-:U 740,900,17,165,-62,73 2 0334 -- Udieresis
-char220 "
-'Y 660,937,0,207,-22,73 2 0335 -- Yacute
-char221 "
-TP 640,681,0,111,56,73 2 0336 -- Thorn
-char222 "
-ss 660,741,213,92,281,73 3 0337 -- germandbls
-char223 "
-`a 680,771,8,105,-34,73 2 0340 -- agrave
-char224 "
-'a 680,771,8,105,-34,73 2 0341 -- aacute
-char225 "
-^a 680,749,8,105,-34,73 2 0342 -- acircumflex
-char226 "
-~a 680,709,8,105,-34,73 2 0343 -- atilde
-char227 "
-:a 680,734,8,105,-34,73 2 0344 -- adieresis
-char228 "
-oa 680,775,8,105,-34,73 2 0345 -- aring
-char229 "
-ae 880,515,8,83,11,73 0 0346 -- ae
-char230 "
-,c 560,515,220,87,-8,73 1 0347 -- ccedilla
-char231 "
-`e 560,771,8,86,-9,73 2 0350 -- egrave
-char232 "
-'e 560,771,8,86,-9,73 2 0351 -- eacute
-char233 "
-^e 560,749,8,86,-9,73 2 0352 -- ecircumflex
-char234 "
-:e 560,734,8,86,-9,73 2 0353 -- edieresis
-char235 "
-`i 380,771,8,94,-33,73 2 0354 -- igrave
-char236 "
-'i 380,771,8,90,-33,73 2 0355 -- iacute
-char237 "
-^i 380,749,8,103,-33,73 2 0356 -- icircumflex
-char238 "
-:i 380,734,8,149,-33,73 2 0357 -- idieresis
-char239 "
-Sd 600,741,8,112,-9,73 2 0360 -- eth
-char240 "
-~n 680,709,8,85,-33,73 2 0361 -- ntilde
-char241 "
-`o 600,771,8,77,-9,73 2 0362 -- ograve
-char242 "
-'o 600,771,8,77,-9,73 2 0363 -- oacute
-char243 "
-^o 600,749,8,77,-9,73 2 0364 -- ocircumflex
-char244 "
-~o 600,709,8,77,-9,73 2 0365 -- otilde
-char245 "
-:o 600,734,8,77,-9,73 2 0366 -- odieresis
-char246 "
-char247 600,521,0,45,-41,45 0 0367 -- divide
-/o 600,571,54,111,33,73 0 0370 -- oslash
-char248 "
-`u 680,771,8,90,-33,73 2 0371 -- ugrave
-char249 "
-'u 680,771,8,90,-33,73 2 0372 -- uacute
-char250 "
-^u 680,749,8,90,-33,73 2 0373 -- ucircumflex
-char251 "
-:u 680,734,8,90,-33,73 2 0374 -- udieresis
-char252 "
-'y 600,771,213,92,25,73 3 0375 -- yacute
-char253 "
-Tp 660,732,213,72,74,72 3 0376 -- thorn
-char254 "
-:y 600,734,213,92,25,73 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/BMI b/contrib/groff/devps/BMI
deleted file mode 100644
index 9b90a65..0000000
--- a/contrib/groff/devps/BMI
+++ /dev/null
@@ -1,437 +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 char173 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 char173 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 char173 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 char173 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 char173 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 0000 -- asciicircum
-ti 600,386,0,45,-41,45 0 0001 -- asciitilde
-vS 640,861,17,78,-11,70 2 0002 -- Scaron
-vZ 580,861,0,165,42,70 2 0003 -- Zcaron
-vs 540,684,8,57,-15,57 2 0004 -- scaron
-vz 520,684,8,91,12,70 2 0005 -- zcaron
-:Y 660,865,0,199,-37,70 2 0006 -- Ydieresis
-tm 980,681,0,35,-19,35 2 0007 -- trademark
-aq 200,698,0,97,-49,70 2 0010 -- quotesingle
-space 300 0 0040
-! 320,698,8,72,-53,70 2 0041 -- exclam
-" 360,698,0,92,-57,70 2 0042 -- quotedbl
-dq "
-# 620,681,0,28,-57,28 2 0043 -- numbersign
-sh "
-$ 620,762,85,49,-28,49 2 0044 -- dollar
-Do "
-% 800,691,8,61,-6,61 2 0045 -- percent
-& 820,698,18,78,-15,70 2 0046 -- ampersand
-' 280,698,0,58,-98,58 2 0047 -- quoteright
-cq "
-( 280,727,146,153,-46,70 2 0050 -- parenleft
-) 280,727,146,49,58,49 2 0051 -- parenright
-* 440,698,0,115,-89,70 2 0052 -- asterisk
-+ 600,548,0,45,-41,45 0 0053 -- plus
-, 300,112,115,0,-38 0 0054 -- comma
-- 320,325,0,66,-28,66 0 0055 -- hyphen
-hy "
-char173 "
-. 300,127,8,0,-46 0 0056 -- period
-/ 600,717,149,12,-54,12 2 0057 -- slash
-sl "
-0 620,698,17,76,-36,70 2 0060 -- zero
-1 620,681,0,0,-104 2 0061 -- one
-2 620,698,0,66,-16,66 2 0062 -- two
-3 620,698,17,52,-5,52 2 0063 -- three
-4 620,681,0,64,-19,64 2 0064 -- four
-5 620,681,17,44,-20,44 2 0065 -- five
-6 620,698,17,87,-39,70 2 0066 -- six
-7 620,681,0,102,-93,70 2 0067 -- seven
-8 620,698,17,85,-11,70 2 0070 -- eight
-9 620,698,17,79,-27,70 2 0071 -- nine
-: 300,494,8,42,-46,42 0 0072 -- colon
-; 300,494,114,42,-38,42 0 0073 -- semicolon
-< 600,561,0,38,-29,38 0 0074 -- less
-= 600,433,0,45,-41,45 0 0075 -- equal
-> 600,561,0,52,-43,52 0 0076 -- greater
-? 540,698,8,114,-64,70 2 0077 -- question
-@ 780,698,17,72,-52,70 2 0100 -- at
-at "
-A 700,681,0,70,75,70 2 0101 -- A
-B 720,681,0,76,29,70 2 0102 -- B
-C 720,698,17,76,-38,70 2 0103 -- C
-D 740,681,0,92,29,70 2 0104 -- D
-E 680,681,0,106,29,70 2 0105 -- E
-F 620,681,0,173,29,70 2 0106 -- F
-G 760,698,17,103,-38,70 2 0107 -- G
-H 800,681,0,138,29,70 2 0110 -- H
-I 320,681,0,142,29,70 2 0111 -- I
-J 560,681,17,156,52,70 2 0112 -- J
-K 720,681,0,134,29,70 2 0113 -- K
-L 580,681,0,126,29,70 2 0114 -- L
-M 860,681,0,146,32,70 2 0115 -- M
-N 720,681,0,153,32,70 2 0116 -- N
-O 760,698,17,89,-38,70 2 0117 -- O
-P 600,681,0,131,29,70 2 0120 -- P
-Q 780,698,191,82,-11,70 2 0121 -- Q
-R 700,681,0,86,29,70 2 0122 -- R
-S 640,698,17,78,-11,70 2 0123 -- S
-T 600,681,0,175,0,70 2 0124 -- T
-U 720,681,17,172,-68,70 2 0125 -- U
-V 680,681,0,185,-37,70 2 0126 -- V
-W 960,681,0,185,-37,70 2 0127 -- W
-X 700,681,0,165,75,70 2 0130 -- X
-Y 660,681,0,199,-37,70 2 0131 -- Y
-Z 580,681,0,165,42,70 2 0132 -- Z
-[ 260,717,136,141,-6,70 2 0133 -- bracketleft
-lB "
-\ 600,717,0,0,-34 2 0134 -- backslash
-rs "
-] 260,717,136,99,35,70 2 0135 -- bracketright
-rB "
-a^ 440,685,0,89,-126,70 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 280,698,0,100,-141,70 2 0140 -- quoteleft
-oq "
-a 620,494,8,116,-21,70 0 0141 -- a
-b 600,717,8,71,-38,70 2 0142 -- b
-c 480,494,8,92,-15,70 0 0143 -- c
-d 640,717,8,105,-15,70 2 0144 -- d
-e 540,494,8,85,-15,70 0 0145 -- e
-f 340,725,218,267,210,70 3 0146 -- f
-g 560,494,221,71,46,70 1 0147 -- g
-h 620,717,8,119,-38,70 2 0150 -- h
-i 280,663,8,121,-38,70 2 0151 -- i
-j 280,663,221,78,250,70 3 0152 -- j
-k 600,717,8,107,-38,70 2 0153 -- k
-l 280,717,8,112,-50,70 2 0154 -- l
-m 880,494,8,122,-38,70 0 0155 -- m
-n 620,494,8,103,-38,70 0 0156 -- n
-o 540,494,8,82,-15,70 0 0157 -- o
-p 600,494,212,70,74,70 1 0160 -- p
-q 560,494,212,74,-15,70 1 0161 -- q
-r 400,494,0,131,-38,70 0 0162 -- r
-s 540,494,8,57,-15,57 0 0163 -- s
-t 340,664,8,121,-38,70 2 0164 -- t
-u 620,484,8,116,-38,70 0 0165 -- u
-v 540,494,8,72,-38,70 0 0166 -- v
-w 880,494,8,63,-38,63 0 0167 -- w
-x 540,494,8,136,41,70 0 0170 -- x
-y 600,484,221,59,-10,59 1 0171 -- y
-z 520,494,8,91,12,70 0 0172 -- z
-lC 360,717,191,132,-72,70 2 0173 -- braceleft
-{ "
-ba 600,750,250,0,-244 3 0174 -- bar
-| "
-rC 380,717,191,3,37,3 2 0175 -- braceright
-} "
-a~ 440,671,0,98,-130,70 2 0176 -- tilde
-~ "
-bq 320,113,114,0,-37 0 0200 -- quotesinglbase
-Fo 300,434,0,63,-20,63 0 0201 -- guillemotleft
-char171 "
-Fc 300,434,0,53,-10,53 0 0202 -- guillemotright
-char187 "
-bu 460,511,0,34,-50,34 0 0203 -- bullet
-Fn 620,725,218,122,76,70 3 0204 -- florin
-f/ 20,681,0,353,278,70 2 0205 -- fraction
-%0 1180,691,8,69,-6,69 2 0206 -- perthousand
-dg 620,698,130,0,-142 2 0207 -- dagger
-dd 620,698,122,0,-94 2 0210 -- daggerdbl
-en 500,325,0,111,17,70 0 0211 -- endash
-em 1000,325,0,111,17,70 0 0212 -- emdash
-fi 640,725,222,119,209,70 3 0214 -- fi
-fl 660,725,218,103,209,70 3 0215 -- fl
-.i 280,484,8,121,-38,70 0 0220 -- dotlessi
-ga 340,706,0,87,-132,70 2 0222 -- grave
-a" 340,738,0,112,-117,70 2 0223 -- hungarumlaut
-a. 260,664,0,80,-119,70 2 0224 -- dotaccent
-ab 440,680,0,110,-141,70 2 0225 -- breve
-ah 440,684,0,91,-128,70 2 0226 -- caron
-ao 300,706,0,84,-128,70 2 0227 -- ring
-ho 260,0,173,0,-1 0 0230 -- ogonek
-lq 440,698,0,103,-141,70 2 0231 -- quotedblleft
-rq 440,698,0,61,-98,61 2 0232 -- quotedblright
-oe 900,494,8,98,-15,70 0 0233 -- oe
-/l 340,717,8,108,0,70 2 0234 -- lslash
-Bq 480,113,114,0,-37 0 0235 -- quotedblbase
-OE 1180,698,17,107,-38,70 2 0236 -- OE
-/L 580,681,0,126,29,70 2 0237 -- Lslash
-r! 320,494,213,31,-23,31 1 0241 -- exclamdown
-char161 "
-ct 620,715,29,26,-98,26 2 0242 -- cent
-char162 "
-Po 620,698,17,132,46,70 2 0243 -- sterling
-char163 "
-Cs 620,591,0,35,-50,35 0 0244 -- currency
-char164 "
-Ye 620,681,0,165,-21,70 2 0245 -- yen
-char165 "
-bb 600,675,175,0,-244 2 0246 -- brokenbar
-char166 "
-sc 620,698,178,68,12,68 2 0247 -- section
-char167 "
-ad 420,688,0,97,-135,70 2 0250 -- dieresis
-char168 "
-co 740,698,17,94,-34,70 2 0251 -- copyright
-char169 "
-Of 440,698,0,123,-80,70 2 0252 -- ordfeminine
-char170 "
-fo 180,434,0,78,-25,70 0 0253 -- guilsinglleft
-no 600,433,0,45,-41,45 0 0254 -- logicalnot
-char172 "
-\- 600,335,0,45,-41,45 0 0255 -- minus
-rg 740,698,17,94,-34,70 2 0256 -- registered
-char174 "
-a- 440,658,0,94,-128,70 0 0257 -- macron
-char175 "
-de 400,698,0,70,-70,70 2 0260 -- degree
-char176 "
-char177 600,548,0,45,-41,45 0 0261 -- plusminus
-S2 372,698,0,117,-18,70 2 0262 -- twosuperior
-char178 "
-S3 372,698,0,117,-20,70 2 0263 -- threesuperior
-char179 "
-aa 320,706,0,103,-128,70 2 0264 -- acute
-char180 "
-char181 620,484,221,116,-3,70 1 0265 -- mu
-ps 620,681,0,148,-62,70 2 0266 -- paragraph
-char182 "
-pc 300,364,0,22,-87,22 0 0267 -- periodcentered
-char183 "
-ac 320,0,178,0,5 0 0270 -- cedilla
-char184 "
-S1 372,688,0,17,-64,17 2 0271 -- onesuperior
-char185 "
-Om 400,698,0,105,-89,70 2 0272 -- ordmasculine
-char186 "
-fc 180,434,0,73,-20,70 0 0273 -- guilsinglright
-14 930,681,0,33,-41,33 2 0274 -- onequarter
-char188 "
-12 930,681,0,45,-41,45 2 0275 -- onehalf
-char189 "
-34 930,691,0,33,-49,33 2 0276 -- threequarters
-char190 "
-r? 540,494,212,18,32,18 1 0277 -- questiondown
-char191 "
-`A 700,883,0,70,75,70 2 0300 -- Agrave
-char192 "
-'A 700,883,0,70,75,70 2 0301 -- Aacute
-char193 "
-^A 700,862,0,70,75,70 2 0302 -- Acircumflex
-char194 "
-~A 700,848,0,70,75,70 2 0303 -- Atilde
-char195 "
-:A 700,865,0,70,75,70 2 0304 -- Adieresis
-char196 "
-oA 700,883,0,70,75,70 2 0305 -- Aring
-char197 "
-AE 1220,681,0,99,95,70 2 0306 -- AE
-char198 "
-,C 720,698,178,76,-38,70 2 0307 -- Ccedilla
-char199 "
-`E 680,883,0,106,29,70 2 0310 -- Egrave
-char200 "
-'E 680,883,0,106,29,70 2 0311 -- Eacute
-char201 "
-^E 680,862,0,106,29,70 2 0312 -- Ecircumflex
-char202 "
-:E 680,865,0,106,29,70 2 0313 -- Edieresis
-char203 "
-`I 320,883,0,142,29,70 2 0314 -- Igrave
-char204 "
-'I 320,883,0,142,29,70 2 0315 -- Iacute
-char205 "
-^I 320,862,0,179,29,70 2 0316 -- Icircumflex
-char206 "
-:I 320,865,0,177,29,70 2 0317 -- Idieresis
-char207 "
--D 740,681,0,92,29,70 2 0320 -- Eth
-char208 "
-~N 720,848,0,153,32,70 2 0321 -- Ntilde
-char209 "
-`O 760,883,17,89,-38,70 2 0322 -- Ograve
-char210 "
-'O 760,883,17,89,-38,70 2 0323 -- Oacute
-char211 "
-^O 760,862,17,89,-38,70 2 0324 -- Ocircumflex
-char212 "
-~O 760,848,17,89,-38,70 2 0325 -- Otilde
-char213 "
-:O 760,865,17,89,-38,70 2 0326 -- Odieresis
-char214 "
-char215 600,548,0,45,-41,45 0 0327 -- multiply
-/O 760,777,95,89,-38,70 2 0330 -- Oslash
-char216 "
-`U 720,883,17,172,-68,70 2 0331 -- Ugrave
-char217 "
-'U 720,883,17,172,-68,70 2 0332 -- Uacute
-char218 "
-^U 720,862,17,172,-68,70 2 0333 -- Ucircumflex
-char219 "
-:U 720,865,17,172,-68,70 2 0334 -- Udieresis
-char220 "
-'Y 660,883,0,199,-37,70 2 0335 -- Yacute
-char221 "
-TP 600,681,0,106,29,70 2 0336 -- Thorn
-char222 "
-ss 620,698,111,83,171,70 2 0337 -- germandbls
-char223 "
-`a 620,706,8,116,-21,70 2 0340 -- agrave
-char224 "
-'a 620,706,8,116,-21,70 2 0341 -- aacute
-char225 "
-^a 620,685,8,116,-21,70 2 0342 -- acircumflex
-char226 "
-~a 620,671,8,116,-21,70 2 0343 -- atilde
-char227 "
-:a 620,688,8,116,-21,70 2 0344 -- adieresis
-char228 "
-oa 620,706,8,116,-21,70 2 0345 -- aring
-char229 "
-ae 880,494,8,88,-21,70 0 0346 -- ae
-char230 "
-,c 480,494,178,92,-15,70 0 0347 -- ccedilla
-char231 "
-`e 540,706,8,85,-15,70 2 0350 -- egrave
-char232 "
-'e 540,706,8,85,-15,70 2 0351 -- eacute
-char233 "
-^e 540,685,8,85,-15,70 2 0352 -- ecircumflex
-char234 "
-:e 540,688,8,85,-15,70 2 0353 -- edieresis
-char235 "
-`i 280,706,8,121,-38,70 2 0354 -- igrave
-char236 "
-'i 280,706,8,121,-38,70 2 0355 -- iacute
-char237 "
-^i 280,685,8,149,-26,70 2 0356 -- icircumflex
-char238 "
-:i 280,688,8,147,-38,70 2 0357 -- idieresis
-char239 "
-Sd 540,725,8,152,-15,70 2 0360 -- eth
-char240 "
-~n 620,671,8,103,-38,70 2 0361 -- ntilde
-char241 "
-`o 540,706,8,82,-15,70 2 0362 -- ograve
-char242 "
-'o 540,706,8,82,-15,70 2 0363 -- oacute
-char243 "
-^o 540,685,8,82,-15,70 2 0364 -- ocircumflex
-char244 "
-~o 540,671,8,82,-15,70 2 0365 -- otilde
-char245 "
-:o 540,688,8,82,-15,70 2 0366 -- odieresis
-char246 "
-char247 600,548,0,45,-41,45 0 0367 -- divide
-/o 540,532,49,81,-15,70 0 0370 -- oslash
-char248 "
-`u 620,706,8,116,-38,70 2 0371 -- ugrave
-char249 "
-'u 620,706,8,116,-38,70 2 0372 -- uacute
-char250 "
-^u 620,685,8,116,-38,70 2 0373 -- ucircumflex
-char251 "
-:u 620,688,8,116,-38,70 2 0374 -- udieresis
-char252 "
-'y 600,706,221,59,-10,59 3 0375 -- yacute
-char253 "
-Tp 600,717,212,70,74,70 3 0376 -- thorn
-char254 "
-:y 600,688,221,59,-10,59 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/BMR b/contrib/groff/devps/BMR
deleted file mode 100644
index 615b7cc..0000000
--- a/contrib/groff/devps/BMR
+++ /dev/null
@@ -1,433 +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 char173 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 char173 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 char173 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 char173 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 char173 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 0000 -- asciicircum
-ti 600,352 0 0001 -- asciitilde
-vS 660,849,17 2 0002 -- Scaron
-vZ 640,849 2 0003 -- Zcaron
-vs 520,672,8 2 0004 -- scaron
-vz 480,672 2 0005 -- zcaron
-:Y 640,851 2 0006 -- Ydieresis
-tm 980,681 2 0007 -- trademark
-aq 220,698 2 0010 -- quotesingle
-space 320 0 0040
-! 300,698,8 2 0041 -- exclam
-" 380,698 2 0042 -- quotedbl
-dq "
-# 620,681 2 0043 -- numbersign
-sh "
-$ 620,791,109 2 0044 -- dollar
-Do "
-% 900,698,8 2 0045 -- percent
-& 800,698,17 2 0046 -- ampersand
-' 220,698 2 0047 -- quoteright
-cq "
-( 300,727,145 2 0050 -- parenleft
-) 300,727,146 2 0051 -- parenright
-* 440,698 2 0052 -- asterisk
-+ 600,513 0 0053 -- plus
-, 320,114,114 0 0054 -- comma
-- 400,292 0 0055 -- hyphen
-hy "
-char173 "
-. 320,123,8 0 0056 -- period
-/ 600,717,149 2 0057 -- slash
-sl "
-0 620,698,17 2 0060 -- zero
-1 620,681 2 0061 -- one
-2 620,698 2 0062 -- two
-3 620,698,17 2 0063 -- three
-4 620,681 2 0064 -- four
-5 620,717,17 2 0065 -- five
-6 620,698,17 2 0066 -- six
-7 620,681 2 0067 -- seven
-8 620,698,17 2 0070 -- eight
-9 620,698,17 2 0071 -- nine
-: 320,494,8 0 0072 -- colon
-; 320,494,114 0 0073 -- semicolon
-< 600,526,2 0 0074 -- less
-= 600,398 0 0075 -- equal
-> 600,526,2 0 0076 -- greater
-? 540,698,8 2 0077 -- question
-@ 820,698,17 2 0100 -- at
-at "
-A 680,681 2 0101 -- A
-B 740,681 2 0102 -- B
-C 740,698,17 2 0103 -- C
-D 800,681 2 0104 -- D
-E 720,681 2 0105 -- E
-F 640,681 2 0106 -- F
-G 800,698,17 2 0107 -- G
-H 800,681 2 0110 -- H
-I 340,681 2 0111 -- I
-J 600,681,17 2 0112 -- J
-K 720,681 2 0113 -- K
-L 600,681 2 0114 -- L
-M 920,681 2 0115 -- M
-N 740,681 2 0116 -- N
-O 800,698,17 2 0117 -- O
-P 620,681 2 0120 -- P
-Q 820,698,189 2 0121 -- Q
-R 720,681 2 0122 -- R
-S 660,698,17 2 0123 -- S
-T 620,681 2 0124 -- T
-U 780,681,17 2 0125 -- U
-V 700,681 2 0126 -- V
-W 960,681 2 0127 -- W
-X 720,681 2 0130 -- X
-Y 640,681 2 0131 -- Y
-Z 640,681 2 0132 -- Z
-[ 300,717,136 2 0133 -- bracketleft
-lB "
-\ 600,717 2 0134 -- backslash
-rs "
-] 300,717,136 2 0135 -- bracketright
-rB "
-a^ 420,685 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 220,698 2 0140 -- quoteleft
-oq "
-a 580,494,8 0 0141 -- a
-b 620,717,8 2 0142 -- b
-c 520,494,8 0 0143 -- c
-d 620,717,8 2 0144 -- d
-e 520,494,8 0 0145 -- e
-f 320,734 2 0146 -- f
-g 540,567,243 1 0147 -- g
-h 660,717 2 0150 -- h
-i 300,654 0 0151 -- i
-j 300,654,251 1 0152 -- j
-k 620,717 2 0153 -- k
-l 300,717 2 0154 -- l
-m 940,494 0 0155 -- m
-n 660,494 0 0156 -- n
-o 560,494,8 0 0157 -- o
-p 620,494,228 1 0160 -- p
-q 580,494,228 1 0161 -- q
-r 440,494 0 0162 -- r
-s 520,494,8 0 0163 -- s
-t 380,667,8 2 0164 -- t
-u 680,484,8 0 0165 -- u
-v 520,484 0 0166 -- v
-w 780,484 0 0167 -- w
-x 560,484 0 0170 -- x
-y 540,484,236 1 0171 -- y
-z 480,484 0 0172 -- z
-lC 280,717,136 2 0173 -- braceleft
-{ "
-ba 600,750,250 3 0174 -- bar
-| "
-rC 280,717,136 2 0175 -- braceright
-} "
-a~ 440,661 0 0176 -- tilde
-~ "
-bq 220,110,108 0 0200 -- quotesinglbase
-Fo 360,437 0 0201 -- guillemotleft
-char171 "
-Fc 360,437 0 0202 -- guillemotright
-char187 "
-bu 460,511 0 0203 -- bullet
-Fn 620,749,155 2 0204 -- florin
-f/ 140,681 2 0205 -- fraction
-%0 1280,698,8 2 0206 -- perthousand
-dg 540,698,156 2 0207 -- dagger
-dd 540,698,156 2 0210 -- daggerdbl
-en 500,292 0 0211 -- endash
-em 1000,292 0 0212 -- emdash
-fi 620,734 2 0214 -- fi
-fl 620,734 2 0215 -- fl
-.i 300,484 0 0220 -- dotlessi
-ga 340,689 2 0222 -- grave
-a" 380,698 2 0223 -- hungarumlaut
-a. 260,672 2 0224 -- dotaccent
-ab 460,687 2 0225 -- breve
-ah 420,672 2 0226 -- caron
-ao 320,731 2 0227 -- ring
-ho 320,0,145 0 0230 -- ogonek
-lq 400,698 2 0231 -- quotedblleft
-rq 400,698 2 0232 -- quotedblright
-oe 900,494,8 0 0233 -- oe
-/l 320,717 2 0234 -- lslash
-Bq 400,110,108 0 0235 -- quotedblbase
-OE 1240,698,17 2 0236 -- OE
-/L 600,681 2 0237 -- Lslash
-r! 300,494,214 0 0241 -- exclamdown
-char161 "
-ct 620,651 0 0242 -- cent
-char162 "
-Po 620,698,17 2 0243 -- sterling
-char163 "
-Cs 620,591 0 0244 -- currency
-char164 "
-Ye 620,681 2 0245 -- yen
-char165 "
-bb 600,675,175 2 0246 -- brokenbar
-char166 "
-sc 520,698,178 2 0247 -- section
-char167 "
-ad 420,674 2 0250 -- dieresis
-char168 "
-co 740,698,17 2 0251 -- copyright
-char169 "
-Of 420,698 2 0252 -- ordfeminine
-char170 "
-fo 240,437 0 0253 -- guilsinglleft
-no 600,398 0 0254 -- logicalnot
-char172 "
-\- 600,300 0 0255 -- minus
-rg 740,698,17 2 0256 -- registered
-char174 "
-a- 440,635 0 0257 -- macron
-char175 "
-de 400,698 2 0260 -- degree
-char176 "
-char177 600,513 0 0261 -- plusminus
-S2 372,698 2 0262 -- twosuperior
-char178 "
-S3 372,698 2 0263 -- threesuperior
-char179 "
-aa 340,689 2 0264 -- acute
-char180 "
-char181 680,484,251 1 0265 -- mu
-ps 600,681 2 0266 -- paragraph
-char182 "
-pc 320,327 0 0267 -- periodcentered
-char183 "
-ac 320,0,200 0 0270 -- cedilla
-char184 "
-S1 372,688 2 0271 -- onesuperior
-char185 "
-Om 420,698 2 0272 -- ordmasculine
-char186 "
-fc 240,437 0 0273 -- guilsinglright
-14 930,681 2 0274 -- onequarter
-char188 "
-12 930,681 2 0275 -- onehalf
-char189 "
-34 930,691 2 0276 -- threequarters
-char190 "
-r? 540,494,217 0 0277 -- questiondown
-char191 "
-`A 680,866 2 0300 -- Agrave
-char192 "
-'A 680,866 2 0301 -- Aacute
-char193 "
-^A 680,862 2 0302 -- Acircumflex
-char194 "
-~A 680,838 2 0303 -- Atilde
-char195 "
-:A 680,851 2 0304 -- Adieresis
-char196 "
-oA 680,908 2 0305 -- Aring
-char197 "
-AE 1260,681 2 0306 -- AE
-char198 "
-,C 740,698,200 2 0307 -- Ccedilla
-char199 "
-`E 720,866 2 0310 -- Egrave
-char200 "
-'E 720,866 2 0311 -- Eacute
-char201 "
-^E 720,862 2 0312 -- Ecircumflex
-char202 "
-:E 720,851 2 0313 -- Edieresis
-char203 "
-`I 340,866 2 0314 -- Igrave
-char204 "
-'I 340,866 2 0315 -- Iacute
-char205 "
-^I 340,862 2 0316 -- Icircumflex
-char206 "
-:I 340,851 2 0317 -- Idieresis
-char207 "
--D 800,681 2 0320 -- Eth
-char208 "
-~N 740,838 2 0321 -- Ntilde
-char209 "
-`O 800,866,17 2 0322 -- Ograve
-char210 "
-'O 800,866,17 2 0323 -- Oacute
-char211 "
-^O 800,862,17 2 0324 -- Ocircumflex
-char212 "
-~O 800,838,17 2 0325 -- Otilde
-char213 "
-:O 800,851,17 2 0326 -- Odieresis
-char214 "
-char215 600,513 0 0327 -- multiply
-/O 800,733,53 2 0330 -- Oslash
-char216 "
-`U 780,866,17 2 0331 -- Ugrave
-char217 "
-'U 780,866,17 2 0332 -- Uacute
-char218 "
-^U 780,862,17 2 0333 -- Ucircumflex
-char219 "
-:U 780,851,17 2 0334 -- Udieresis
-char220 "
-'Y 640,866 2 0335 -- Yacute
-char221 "
-TP 620,681 2 0336 -- Thorn
-char222 "
-ss 660,698,110 2 0337 -- germandbls
-char223 "
-`a 580,689,8 2 0340 -- agrave
-char224 "
-'a 580,689,8 2 0341 -- aacute
-char225 "
-^a 580,685,8 2 0342 -- acircumflex
-char226 "
-~a 580,661,8 0 0343 -- atilde
-char227 "
-:a 580,674,8 2 0344 -- adieresis
-char228 "
-oa 580,731,8 2 0345 -- aring
-char229 "
-ae 860,494,8 0 0346 -- ae
-char230 "
-,c 520,494,200 0 0347 -- ccedilla
-char231 "
-`e 520,689,8 2 0350 -- egrave
-char232 "
-'e 520,689,8 2 0351 -- eacute
-char233 "
-^e 520,685,8 2 0352 -- ecircumflex
-char234 "
-:e 520,674,8 2 0353 -- edieresis
-char235 "
-`i 300,689 2 0354 -- igrave
-char236 "
-'i 300,689 2 0355 -- iacute
-char237 "
-^i 300,685 2 0356 -- icircumflex
-char238 "
-:i 300,674 2 0357 -- idieresis
-char239 "
-Sd 560,734,8 2 0360 -- eth
-char240 "
-~n 660,661 0 0361 -- ntilde
-char241 "
-`o 560,689,8 2 0362 -- ograve
-char242 "
-'o 560,689,8 2 0363 -- oacute
-char243 "
-^o 560,685,8 2 0364 -- ocircumflex
-char244 "
-~o 560,661,8 0 0365 -- otilde
-char245 "
-:o 560,674,8 2 0366 -- odieresis
-char246 "
-char247 600,514 0 0367 -- divide
-/o 560,534,40 0 0370 -- oslash
-char248 "
-`u 680,689,8 2 0371 -- ugrave
-char249 "
-'u 680,689,8 2 0372 -- uacute
-char250 "
-^u 680,685,8 2 0373 -- ucircumflex
-char251 "
-:u 680,674,8 2 0374 -- udieresis
-char252 "
-'y 540,689,236 3 0375 -- yacute
-char253 "
-Tp 620,717,228 3 0376 -- thorn
-char254 "
-:y 540,674,236 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/CB b/contrib/groff/devps/CB
deleted file mode 100644
index 6c01b8d..0000000
--- a/contrib/groff/devps/CB
+++ /dev/null
@@ -1,339 +0,0 @@
-name CB
-internalname Courier-Bold
-spacewidth 600
-encoding text.enc
-charset
-ha 600,616 2 0000 -- asciicircum
-ti 600,356 0 0001 -- asciitilde
-vS 600,790,22 2 0002 -- Scaron
-vZ 600,790 2 0003 -- Zcaron
-vs 600,667,17 2 0004 -- scaron
-vz 600,667 2 0005 -- zcaron
-:Y 600,748 2 0006 -- Ydieresis
-tm 600,562 2 0007 -- trademark
-aq 600,562 2 0010 -- quotesingle
-space 600 0 0040
-! 600,572,15 2 0041 -- exclam
-" 600,562 2 0042 -- quotedbl
-dq "
-# 600,651,45 2 0043 -- numbersign
-sh "
-$ 600,666,126 2 0044 -- dollar
-Do "
-% 600,616,15 2 0045 -- percent
-& 600,543,15 0 0046 -- ampersand
-' 600,562 2 0047 -- quoteright
-cq "
-( 600,616,102 2 0050 -- parenleft
-) 600,616,102 2 0051 -- parenright
-* 600,601 2 0052 -- asterisk
-+ 600,478 0 0053 -- plus
-, 600,174,111 0 0054 -- comma
-- 600,313 0 0055 -- hyphen
-hy "
-char173 "
-. 600,171,15 0 0056 -- period
-/ 600,626,77 2 0057 -- slash
-sl "
-0 600,616,15 2 0060 -- zero
-1 600,616 2 0061 -- one
-2 600,616 2 0062 -- two
-3 600,616,15 2 0063 -- three
-4 600,616 2 0064 -- four
-5 600,601,15 2 0065 -- five
-6 600,616,15 2 0066 -- six
-7 600,601 2 0067 -- seven
-8 600,616,15 2 0070 -- eight
-9 600,616,15 2 0071 -- nine
-: 600,425,15 0 0072 -- colon
-; 600,425,111 0 0073 -- semicolon
-< 600,501 0 0074 -- less
-= 600,398 0 0075 -- equal
-> 600,501 0 0076 -- greater
-? 600,580,14 2 0077 -- question
-@ 600,616,15 2 0100 -- at
-at "
-A 600,562 2 0101 -- A
-B 600,562 2 0102 -- B
-C 600,580,18 2 0103 -- C
-D 600,562 2 0104 -- D
-E 600,562 2 0105 -- E
-F 600,562 2 0106 -- F
-G 600,580,18 2 0107 -- G
-H 600,562 2 0110 -- H
-I 600,562 2 0111 -- I
-J 600,562,18 2 0112 -- J
-K 600,562 2 0113 -- K
-L 600,562 2 0114 -- L
-M 600,562 2 0115 -- M
-N 600,562,12 2 0116 -- N
-O 600,580,18 2 0117 -- O
-P 600,562 2 0120 -- P
-Q 600,580,138 2 0121 -- Q
-R 600,562 2 0122 -- R
-S 600,582,22 2 0123 -- S
-T 600,562 2 0124 -- T
-U 600,562,18 2 0125 -- U
-V 600,562 2 0126 -- V
-W 600,562 2 0127 -- W
-X 600,562 2 0130 -- X
-Y 600,562 2 0131 -- Y
-Z 600,562 2 0132 -- Z
-[ 600,616,102 2 0133 -- bracketleft
-lB "
-\ 600,626,77 2 0134 -- backslash
-rs "
-] 600,616,102 2 0135 -- bracketright
-rB "
-a^ 600,657 2 0136 -- circumflex
-^ "
-_ 600,0,125 0 0137 -- underscore
-` 600,562 2 0140 -- quoteleft
-oq "
-a 600,454,15 0 0141 -- a
-b 600,626,15 2 0142 -- b
-c 600,459,15 0 0143 -- c
-d 600,626,15 2 0144 -- d
-e 600,454,15 0 0145 -- e
-f 600,626 2 0146 -- f
-g 600,454,146 1 0147 -- g
-h 600,626 2 0150 -- h
-i 600,658 2 0151 -- i
-j 600,658,146 3 0152 -- j
-k 600,626 2 0153 -- k
-l 600,626 2 0154 -- l
-m 600,454 0 0155 -- m
-n 600,454 0 0156 -- n
-o 600,454,15 0 0157 -- o
-p 600,454,142 1 0160 -- p
-q 600,454,142 1 0161 -- q
-r 600,454 0 0162 -- r
-s 600,459,17 0 0163 -- s
-t 600,562,15 2 0164 -- t
-u 600,439,15 0 0165 -- u
-v 600,439 0 0166 -- v
-w 600,439 0 0167 -- w
-x 600,439 0 0170 -- x
-y 600,439,142 1 0171 -- y
-z 600,439 0 0172 -- z
-lC 600,616,102 2 0173 -- braceleft
-{ "
-ba 600,750,250 3 0174 -- bar
-| "
-rC 600,616,102 2 0175 -- braceright
-} "
-a~ 600,636 2 0176 -- tilde
-~ "
-bq 600,143,142 1 0200 -- quotesinglbase
-Fo 600,446 0 0201 -- guillemotleft
-char171 "
-Fc 600,446 0 0202 -- guillemotright
-char187 "
-bu 600,430 0 0203 -- bullet
-Fn 600,616,131 2 0204 -- florin
-f/ 600,661,60 2 0205 -- fraction
-%0 600,616,15 2 0206 -- perthousand
-dg 600,580,70 2 0207 -- dagger
-dd 600,580,70 2 0210 -- daggerdbl
-en 600,313 0 0211 -- endash
-em 600,313 0 0212 -- emdash
-fi 600,626 2 0214 -- fi
-fl 600,626 2 0215 -- fl
-.i 600,439 0 0220 -- dotlessi
-ga 600,661 2 0222 -- grave
-a" 600,661 2 0223 -- hungarumlaut
-a. 600,625 2 0224 -- dotaccent
-ab 600,631 2 0225 -- breve
-ah 600,667 2 0226 -- caron
-ao 600,678 2 0227 -- ring
-ho 600,0,199 1 0230 -- ogonek
-lq 600,562 2 0231 -- quotedblleft
-rq 600,562 2 0232 -- quotedblright
-oe 600,454,15 0 0233 -- oe
-/l 600,626 2 0234 -- lslash
-Bq 600,143,142 1 0235 -- quotedblbase
-OE 600,562 2 0236 -- OE
-/L 600,562 2 0237 -- Lslash
-r! 600,449,146 1 0241 -- exclamdown
-char161 "
-ct 600,614,49 2 0242 -- cent
-char162 "
-Po 600,611,28 2 0243 -- sterling
-char163 "
-Cs 600,517 0 0244 -- currency
-char164 "
-Ye 600,562 2 0245 -- yen
-char165 "
-bb 600,675,175 3 0246 -- brokenbar
-char166 "
-sc 600,580,70 2 0247 -- section
-char167 "
-ad 600,625 2 0250 -- dieresis
-char168 "
-co 600,580,18 2 0251 -- copyright
-char169 "
-Of 600,580 2 0252 -- ordfeminine
-char170 "
-fo 600,446 0 0253 -- guilsinglleft
-no 600,413 0 0254 -- logicalnot
-char172 "
-\- 600,313 0 0255 -- minus
-rg 600,580,18 2 0256 -- registered
-char174 "
-a- 600,585 2 0257 -- macron
-char175 "
-de 600,616 2 0260 -- degree
-char176 "
-char177 600,515 0 0261 -- plusminus
-S2 600,616 2 0262 -- twosuperior
-char178 "
-S3 600,616 2 0263 -- threesuperior
-char179 "
-aa 600,661 2 0264 -- acute
-char180 "
-char181 600,439,142 1 0265 -- mu
-ps 600,580,70 2 0266 -- paragraph
-char182 "
-pc 600,351 0 0267 -- periodcentered
-char183 "
-ac 600,0,206 1 0270 -- cedilla
-char184 "
-S1 600,616 2 0271 -- onesuperior
-char185 "
-Om 600,580 2 0272 -- ordmasculine
-char186 "
-fc 600,446 0 0273 -- guilsinglright
-14 600,661,60 2 0274 -- onequarter
-char188 "
-12 600,661,60 2 0275 -- onehalf
-char189 "
-34 600,661,60 2 0276 -- threequarters
-char190 "
-r? 600,449,146 1 0277 -- questiondown
-char191 "
-`A 600,784 2 0300 -- Agrave
-char192 "
-'A 600,784 2 0301 -- Aacute
-char193 "
-^A 600,780 2 0302 -- Acircumflex
-char194 "
-~A 600,759 2 0303 -- Atilde
-char195 "
-:A 600,748 2 0304 -- Adieresis
-char196 "
-oA 600,801 2 0305 -- Aring
-char197 "
-AE 600,562 2 0306 -- AE
-char198 "
-,C 600,580,206 3 0307 -- Ccedilla
-char199 "
-`E 600,784 2 0310 -- Egrave
-char200 "
-'E 600,784 2 0311 -- Eacute
-char201 "
-^E 600,780 2 0312 -- Ecircumflex
-char202 "
-:E 600,748 2 0313 -- Edieresis
-char203 "
-`I 600,784 2 0314 -- Igrave
-char204 "
-'I 600,784 2 0315 -- Iacute
-char205 "
-^I 600,780 2 0316 -- Icircumflex
-char206 "
-:I 600,748 2 0317 -- Idieresis
-char207 "
--D 600,562 2 0320 -- Eth
-char208 "
-~N 600,759,12 2 0321 -- Ntilde
-char209 "
-`O 600,784,18 2 0322 -- Ograve
-char210 "
-'O 600,784,18 2 0323 -- Oacute
-char211 "
-^O 600,780,18 2 0324 -- Ocircumflex
-char212 "
-~O 600,759,18 2 0325 -- Otilde
-char213 "
-:O 600,748,18 2 0326 -- Odieresis
-char214 "
-char215 600,478 0 0327 -- multiply
-/O 600,584,22 2 0330 -- Oslash
-char216 "
-`U 600,784,18 2 0331 -- Ugrave
-char217 "
-'U 600,784,18 2 0332 -- Uacute
-char218 "
-^U 600,780,18 2 0333 -- Ucircumflex
-char219 "
-:U 600,748,18 2 0334 -- Udieresis
-char220 "
-'Y 600,784 2 0335 -- Yacute
-char221 "
-TP 600,562 2 0336 -- Thorn
-char222 "
-ss 600,626,15 2 0337 -- germandbls
-char223 "
-`a 600,661,15 2 0340 -- agrave
-char224 "
-'a 600,661,15 2 0341 -- aacute
-char225 "
-^a 600,657,15 2 0342 -- acircumflex
-char226 "
-~a 600,636,15 2 0343 -- atilde
-char227 "
-:a 600,625,15 2 0344 -- adieresis
-char228 "
-oa 600,678,15 2 0345 -- aring
-char229 "
-ae 600,454,15 0 0346 -- ae
-char230 "
-,c 600,459,206 1 0347 -- ccedilla
-char231 "
-`e 600,661,15 2 0350 -- egrave
-char232 "
-'e 600,661,15 2 0351 -- eacute
-char233 "
-^e 600,657,15 2 0352 -- ecircumflex
-char234 "
-:e 600,625,15 2 0353 -- edieresis
-char235 "
-`i 600,661 2 0354 -- igrave
-char236 "
-'i 600,661 2 0355 -- iacute
-char237 "
-^i 600,657 2 0356 -- icircumflex
-char238 "
-:i 600,625 2 0357 -- idieresis
-char239 "
-Sd 600,626,27 2 0360 -- eth
-char240 "
-~n 600,636 2 0361 -- ntilde
-char241 "
-`o 600,661,15 2 0362 -- ograve
-char242 "
-'o 600,661,15 2 0363 -- oacute
-char243 "
-^o 600,657,15 2 0364 -- ocircumflex
-char244 "
-~o 600,636,15 2 0365 -- otilde
-char245 "
-:o 600,625,15 2 0366 -- odieresis
-char246 "
-char247 600,500 0 0367 -- divide
-/o 600,463,24 0 0370 -- oslash
-char248 "
-`u 600,661,15 2 0371 -- ugrave
-char249 "
-'u 600,661,15 2 0372 -- uacute
-char250 "
-^u 600,657,15 2 0373 -- ucircumflex
-char251 "
-:u 600,625,15 2 0374 -- udieresis
-char252 "
-'y 600,661,142 3 0375 -- yacute
-char253 "
-Tp 600,626,142 3 0376 -- thorn
-char254 "
-:y 600,625,142 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/CBI b/contrib/groff/devps/CBI
deleted file mode 100644
index 72b5561..0000000
--- a/contrib/groff/devps/CBI
+++ /dev/null
@@ -1,340 +0,0 @@
-name CBI
-internalname Courier-BoldOblique
-slant 12
-spacewidth 600
-encoding text.enc
-charset
-ha 600,616,0,5,-121,5 2 0000 -- asciicircum
-ti 600,356,0,39,-70,39 0 0001 -- asciitilde
-vS 600,790,22,122,-4,75 2 0002 -- Scaron
-vZ 600,790,0,109,-12,75 2 0003 -- Zcaron
-vs 600,667,17,82,-17,75 2 0004 -- scaron
-vz 600,667,0,82,-31,75 2 0005 -- zcaron
-:Y 600,748,0,158,-59,75 2 0006 -- Ydieresis
-tm 600,562,0,318,-36,75 2 0007 -- trademark
-aq 600,562,0,0,-254 2 0010 -- quotesingle
-space 600 0 0040
-! 600,572,15,0,-166 2 0041 -- exclam
-" 600,562,0,34,-162,34 2 0042 -- quotedbl
-dq "
-# 600,651,45,90,-38,75 2 0043 -- numbersign
-sh "
-$ 600,666,126,79,-37,75 2 0044 -- dollar
-Do "
-% 600,616,15,74,-52,74 2 0045 -- percent
-& 600,543,15,44,-12,44 0 0046 -- ampersand
-' 600,562,0,0,-180 2 0047 -- quoteright
-cq "
-( 600,616,102,42,-216,42 2 0050 -- parenleft
-) 600,616,102,0,-67 2 0051 -- parenright
-* 600,601,0,47,-129,47 2 0052 -- asterisk
-+ 600,478,0,46,-64,46 0 0053 -- plus
-, 600,174,111,0,-49 0 0054 -- comma
-- 600,313,0,17,-93,17 0 0055 -- hyphen
-hy "
-char173 "
-. 600,171,15,0,-157 0 0056 -- period
-/ 600,626,77,76,-41,75 2 0057 -- slash
-sl "
-0 600,616,15,42,-86,42 2 0060 -- zero
-1 600,616,0,11,-43,11 2 0061 -- one
-2 600,616,0,43,-11,43 2 0062 -- two
-3 600,616,15,21,-22,21 2 0063 -- three
-4 600,616,0,8,-32,8 2 0064 -- four
-5 600,601,15,71,-27,71 2 0065 -- five
-6 600,616,15,102,-86,75 2 0066 -- six
-7 600,601,0,72,-97,72 2 0067 -- seven
-8 600,616,15,54,-65,54 2 0070 -- eight
-9 600,616,15,42,-26,42 2 0071 -- nine
-: 600,425,15,0,-156 0 0072 -- colon
-; 600,425,111,0,-49 0 0073 -- semicolon
-< 600,501,0,62,-71,62 0 0074 -- less
-= 600,398,0,64,-46,64 0 0075 -- equal
-> 600,501,0,39,-47,39 0 0076 -- greater
-? 600,580,14,41,-133,41 2 0077 -- question
-@ 600,616,15,91,-16,75 2 0100 -- at
-at "
-A 600,562,0,81,59,75 2 0101 -- A
-B 600,562,0,79,20,75 2 0102 -- B
-C 600,580,18,124,-25,75 2 0103 -- C
-D 600,562,0,114,20,75 2 0104 -- D
-E 600,562,0,119,25,75 2 0105 -- E
-F 600,562,0,133,11,75 2 0106 -- F
-G 600,580,18,124,-25,75 2 0107 -- G
-H 600,562,0,149,30,75 2 0110 -- H
-I 600,562,0,92,-27,75 2 0111 -- I
-J 600,562,18,170,-9,75 2 0112 -- J
-K 600,562,0,141,29,75 2 0113 -- K
-L 600,562,0,85,11,75 2 0114 -- L
-M 600,562,0,171,52,75 2 0115 -- M
-N 600,562,12,179,42,75 2 0116 -- N
-O 600,580,18,95,-24,75 2 0117 -- O
-P 600,562,0,92,2,75 2 0120 -- P
-Q 600,580,138,86,-34,75 2 0121 -- Q
-R 600,562,0,67,26,67 2 0122 -- R
-S 600,582,22,122,-4,75 2 0123 -- S
-T 600,562,0,128,-36,75 2 0124 -- T
-U 600,562,18,165,-51,75 2 0125 -- U
-V 600,562,0,182,-34,75 2 0126 -- V
-W 600,562,0,187,-34,75 2 0127 -- W
-X 600,562,0,139,38,75 2 0130 -- X
-Y 600,562,0,158,-59,75 2 0131 -- Y
-Z 600,562,0,86,-12,75 2 0132 -- Z
-[ 600,616,102,56,-173,56 2 0133 -- bracketleft
-lB "
-\ 600,626,77,0,-173 2 0134 -- backslash
-rs "
-] 600,616,102,0,-53 2 0135 -- bracketright
-rB "
-a^ 600,657,0,56,-162,56 2 0136 -- circumflex
-^ "
-_ 600,0,125,34,77,34 0 0137 -- underscore
-` 600,562,0,0,-247 2 0140 -- quoteleft
-oq "
-a 600,454,15,42,-12,42 0 0141 -- a
-b 600,626,15,86,37,75 2 0142 -- b
-c 600,459,15,81,-31,75 0 0143 -- c
-d 600,626,15,94,-11,75 2 0144 -- d
-e 600,454,15,54,-31,54 0 0145 -- e
-f 600,626,0,127,-33,75 2 0146 -- f
-g 600,454,146,123,9,75 1 0147 -- g
-h 600,626,0,64,32,64 2 0150 -- h
-i 600,658,0,0,-27 2 0151 -- i
-j 600,658,146,30,13,30 3 0152 -- j
-k 600,626,0,92,17,75 2 0153 -- k
-l 600,626,0,0,-27 2 0154 -- l
-m 600,454,0,98,72,75 0 0155 -- m
-n 600,454,0,64,32,64 0 0156 -- n
-o 600,454,15,72,-21,72 0 0157 -- o
-p 600,454,142,72,81,72 1 0160 -- p
-q 600,454,142,134,-11,75 1 0161 -- q
-r 600,454,0,104,3,75 0 0162 -- r
-s 600,459,17,57,-17,57 0 0163 -- s
-t 600,562,15,16,-68,16 2 0164 -- t
-u 600,439,15,41,-20,41 0 0165 -- u
-v 600,439,0,144,-20,75 0 0166 -- v
-w 600,439,0,161,-3,75 0 0167 -- w
-x 600,439,0,120,44,75 0 0170 -- x
-y 600,439,142,144,70,75 1 0171 -- y
-z 600,439,0,63,-31,63 0 0172 -- z
-lC 600,616,102,45,-154,45 2 0173 -- braceleft
-{ "
-ba 600,750,250,0,-152 3 0174 -- bar
-| "
-rC 600,616,102,0,-64 2 0175 -- braceright
-} "
-a~ 600,636,0,92,-150,75 2 0176 -- tilde
-~ "
-bq 600,143,142,0,-95 1 0200 -- quotesinglbase
-Fo 600,446,0,88,-13,75 0 0201 -- guillemotleft
-char171 "
-Fc 600,446,0,97,-22,75 0 0202 -- guillemotright
-char187 "
-bu 600,430,0,0,-147 0 0203 -- bullet
-Fn 600,616,131,151,106,75 2 0204 -- florin
-f/ 600,661,60,157,28,75 2 0205 -- fraction
-%0 600,616,15,192,94,75 2 0206 -- perthousand
-dg 600,580,70,36,-126,36 2 0207 -- dagger
-dd 600,580,70,36,-72,36 2 0210 -- daggerdbl
-en 600,313,0,52,-58,52 0 0211 -- endash
-em 600,313,0,127,17,75 0 0212 -- emdash
-fi 600,626,0,93,38,75 2 0214 -- fi
-fl 600,626,0,93,38,75 2 0215 -- fl
-.i 600,439,0,0,-27 0 0220 -- dotlessi
-ga 600,661,0,0,-222 2 0222 -- grave
-a" 600,661,0,178,-122,75 2 0223 -- hungarumlaut
-a. 600,625,0,0,-296 2 0224 -- dotaccent
-ab 600,631,0,101,-167,75 2 0225 -- breve
-ah 600,667,0,82,-188,75 2 0226 -- caron
-ao 600,678,0,0,-269 2 0227 -- ring
-ho 600,0,199,0,-94 1 0230 -- ogonek
-lq 600,562,0,44,-140,44 2 0231 -- quotedblleft
-rq 600,562,0,94,-70,75 2 0232 -- quotedblright
-oe 600,454,15,111,31,75 0 0233 -- oe
-/l 600,626,0,28,-27,28 2 0234 -- lslash
-Bq 600,143,142,9,15,9 1 0235 -- quotedblbase
-OE 600,562,0,150,24,75 2 0236 -- OE
-/L 600,562,0,85,11,75 2 0237 -- Lslash
-r! 600,449,146,0,-147 1 0241 -- exclamdown
-char161 "
-ct 600,614,49,54,-71,54 2 0242 -- cent
-char162 "
-Po 600,611,28,100,-57,75 2 0243 -- sterling
-char163 "
-Cs 600,517,0,93,-27,75 0 0244 -- currency
-char164 "
-Ye 600,562,0,159,-48,75 2 0245 -- yen
-char165 "
-bb 600,675,175,0,-168 3 0246 -- brokenbar
-char166 "
-sc 600,580,70,69,-24,69 2 0247 -- section
-char167 "
-ad 600,625,0,42,-194,42 2 0250 -- dieresis
-char168 "
-co 600,580,18,117,-3,75 2 0251 -- copyright
-char169 "
-Of 600,580,0,0,-139 2 0252 -- ordfeminine
-char170 "
-fo 600,446,0,0,-146 0 0253 -- guilsinglleft
-no 600,413,0,67,-85,67 0 0254 -- logicalnot
-char172 "
-\- 600,313,0,46,-64,46 0 0255 -- minus
-rg 600,580,18,117,-3,75 2 0256 -- registered
-char174 "
-a- 600,585,0,86,-145,75 2 0257 -- macron
-char175 "
-de 600,616,0,19,-123,19 2 0260 -- degree
-char176 "
-char177 600,515,0,64,-26,64 0 0261 -- plusminus
-S2 600,616,0,0,-142 2 0262 -- twosuperior
-char178 "
-S3 600,616,0,0,-143 2 0263 -- threesuperior
-char179 "
-aa 600,661,0,58,-263,58 2 0264 -- acute
-char180 "
-char181 600,439,142,41,0,41 1 0265 -- mu
-ps 600,580,70,149,-11,75 2 0266 -- paragraph
-char182 "
-pc 600,351,0,0,-199 0 0267 -- periodcentered
-char183 "
-ac 600,0,206,0,-119 1 0270 -- cedilla
-char184 "
-S1 600,616,0,0,-163 2 0271 -- onesuperior
-char185 "
-Om 600,580,0,0,-139 2 0272 -- ordmasculine
-char186 "
-fc 600,446,0,0,-116 0 0273 -- guilsinglright
-14 600,661,60,156,36,75 2 0274 -- onequarter
-char188 "
-12 600,661,60,165,27,75 2 0275 -- onehalf
-char189 "
-34 600,661,60,148,42,75 2 0276 -- threequarters
-char190 "
-r? 600,449,146,0,-51 1 0277 -- questiondown
-char191 "
-`A 600,784,0,81,59,75 2 0300 -- Agrave
-char192 "
-'A 600,784,0,115,59,75 2 0301 -- Aacute
-char193 "
-^A 600,780,0,81,59,75 2 0302 -- Acircumflex
-char194 "
-~A 600,759,0,88,59,75 2 0303 -- Atilde
-char195 "
-:A 600,748,0,81,59,75 2 0304 -- Adieresis
-char196 "
-oA 600,801,0,81,59,75 2 0305 -- Aring
-char197 "
-AE 600,562,0,157,79,75 2 0306 -- AE
-char198 "
-,C 600,580,206,124,-24,75 3 0307 -- Ccedilla
-char199 "
-`E 600,784,0,119,25,75 2 0310 -- Egrave
-char200 "
-'E 600,784,0,119,25,75 2 0311 -- Eacute
-char201 "
-^E 600,780,0,119,25,75 2 0312 -- Ecircumflex
-char202 "
-:E 600,748,0,119,25,75 2 0313 -- Edieresis
-char203 "
-`I 600,784,0,92,-27,75 2 0314 -- Igrave
-char204 "
-'I 600,784,0,92,-27,75 2 0315 -- Iacute
-char205 "
-^I 600,780,0,92,-27,75 2 0316 -- Icircumflex
-char206 "
-:I 600,748,0,92,-27,75 2 0317 -- Idieresis
-char207 "
--D 600,562,0,114,20,75 2 0320 -- Eth
-char208 "
-~N 600,759,12,179,42,75 2 0321 -- Ntilde
-char209 "
-`O 600,784,18,95,-24,75 2 0322 -- Ograve
-char210 "
-'O 600,784,18,95,-24,75 2 0323 -- Oacute
-char211 "
-^O 600,780,18,95,-24,75 2 0324 -- Ocircumflex
-char212 "
-~O 600,759,18,118,-24,75 2 0325 -- Otilde
-char213 "
-:O 600,748,18,95,-24,75 2 0326 -- Odieresis
-char214 "
-char215 600,478,0,56,-55,56 0 0327 -- multiply
-/O 600,584,22,122,2,75 2 0330 -- Oslash
-char216 "
-`U 600,784,18,165,-51,75 2 0331 -- Ugrave
-char217 "
-'U 600,784,18,165,-51,75 2 0332 -- Uacute
-char218 "
-^U 600,780,18,165,-51,75 2 0333 -- Ucircumflex
-char219 "
-:U 600,748,18,165,-51,75 2 0334 -- Udieresis
-char220 "
-'Y 600,784,0,158,-59,75 2 0335 -- Yacute
-char221 "
-TP 600,562,0,69,2,69 2 0336 -- Thorn
-char222 "
-ss 600,626,15,78,28,75 2 0337 -- germandbls
-char223 "
-`a 600,661,15,42,-12,42 2 0340 -- agrave
-char224 "
-'a 600,661,15,58,-12,58 2 0341 -- aacute
-char225 "
-^a 600,657,15,42,-12,42 2 0342 -- acircumflex
-char226 "
-~a 600,636,15,92,-12,75 2 0343 -- atilde
-char227 "
-:a 600,625,15,42,-12,42 2 0344 -- adieresis
-char228 "
-oa 600,678,15,42,-12,42 2 0345 -- aring
-char229 "
-ae 600,454,15,101,29,75 0 0346 -- ae
-char230 "
-,c 600,459,206,81,-31,75 1 0347 -- ccedilla
-char231 "
-`e 600,661,15,54,-31,54 2 0350 -- egrave
-char232 "
-'e 600,661,15,58,-31,58 2 0351 -- eacute
-char233 "
-^e 600,657,15,56,-31,56 2 0352 -- ecircumflex
-char234 "
-:e 600,625,15,54,-31,54 2 0353 -- edieresis
-char235 "
-`i 600,661,0,0,-27 2 0354 -- igrave
-char236 "
-'i 600,661,0,58,-27,58 2 0355 -- iacute
-char237 "
-^i 600,657,0,16,-27,16 2 0356 -- icircumflex
-char238 "
-:i 600,625,0,2,-27,2 2 0357 -- idieresis
-char239 "
-Sd 600,626,27,111,-43,75 2 0360 -- eth
-char240 "
-~n 600,636,0,92,32,75 2 0361 -- ntilde
-char241 "
-`o 600,661,15,72,-21,72 2 0362 -- ograve
-char242 "
-'o 600,661,15,72,-21,72 2 0363 -- oacute
-char243 "
-^o 600,657,15,72,-21,72 2 0364 -- ocircumflex
-char244 "
-~o 600,636,15,92,-21,75 2 0365 -- otilde
-char245 "
-:o 600,625,15,72,-21,72 2 0366 -- odieresis
-char246 "
-char247 600,500,0,46,-64,46 0 0367 -- divide
-/o 600,463,24,87,-5,75 0 0370 -- oslash
-char248 "
-`u 600,661,15,41,-20,41 2 0371 -- ugrave
-char249 "
-'u 600,661,15,58,-20,58 2 0372 -- uacute
-char250 "
-^u 600,657,15,41,-20,41 2 0373 -- ucircumflex
-char251 "
-:u 600,625,15,41,-20,41 2 0374 -- udieresis
-char252 "
-'y 600,661,142,144,70,75 3 0375 -- yacute
-char253 "
-Tp 600,626,142,72,81,72 3 0376 -- thorn
-char254 "
-:y 600,625,142,144,70,75 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/CI b/contrib/groff/devps/CI
deleted file mode 100644
index 63ea748..0000000
--- a/contrib/groff/devps/CI
+++ /dev/null
@@ -1,340 +0,0 @@
-name CI
-internalname Courier-Oblique
-slant 12
-spacewidth 600
-encoding text.enc
-charset
-ha 600,622,0,37,-125,37 2 0000 -- asciicircum
-ti 600,320,0,50,-66,50 0 0001 -- asciitilde
-vS 600,805,20,123,-26,72 2 0002 -- Scaron
-vZ 600,805,0,93,-36,72 2 0003 -- Zcaron
-vs 600,669,15,64,-28,64 2 0004 -- scaron
-vz 600,669,0,74,-49,72 2 0005 -- zcaron
-:Y 600,731,0,145,-83,72 2 0006 -- Ydieresis
-tm 600,562,0,192,-25,72 2 0007 -- trademark
-aq 600,562,0,0,-295 2 0010 -- quotesingle
-space 600 0 0040
-! 600,572,15,0,-193 2 0041 -- exclam
-" 600,562,0,0,-223 2 0042 -- quotedbl
-dq "
-# 600,639,32,46,-83,46 2 0043 -- numbersign
-sh "
-$ 600,662,126,46,-58,46 2 0044 -- dollar
-Do "
-% 600,622,15,49,-84,49 2 0045 -- percent
-& 600,543,15,30,-37,30 0 0046 -- ampersand
-' 600,562,0,0,-233 2 0047 -- quoteright
-cq "
-( 600,622,108,22,-263,22 2 0050 -- parenleft
-) 600,622,108,0,-87 2 0051 -- parenright
-* 600,607,0,30,-162,30 2 0052 -- asterisk
-+ 600,470,0,30,-79,30 0 0053 -- plus
-, 600,122,112,0,-107 0 0054 -- comma
-- 600,285,0,8,-102,8 0 0055 -- hyphen
-hy "
-char173 "
-. 600,109,15,0,-188 0 0056 -- period
-/ 600,629,80,54,-62,54 2 0057 -- slash
-sl "
-0 600,622,15,25,-104,25 2 0060 -- zero
-1 600,622,0,0,-48 2 0061 -- one
-2 600,622,0,18,-20,18 2 0062 -- two
-3 600,622,15,0,-32 2 0063 -- three
-4 600,622,0,0,-58 2 0064 -- four
-5 600,607,15,39,-49,39 2 0065 -- five
-6 600,622,15,79,-105,72 2 0066 -- six
-7 600,607,0,62,-132,62 2 0067 -- seven
-8 600,622,15,38,-82,38 2 0070 -- eight
-9 600,622,15,24,-43,24 2 0071 -- nine
-: 600,385,15,0,-188 0 0072 -- colon
-; 600,385,112,0,-107 0 0073 -- semicolon
-< 600,472,0,60,-46,60 0 0074 -- less
-= 600,376,0,50,-59,50 0 0075 -- equal
-> 600,472,0,49,-35,49 0 0076 -- greater
-? 600,572,15,33,-172,33 2 0077 -- question
-@ 600,622,15,32,-77,32 2 0100 -- at
-at "
-A 600,562,0,57,47,57 2 0101 -- A
-B 600,562,0,66,7,66 2 0102 -- B
-C 600,580,18,105,-43,72 2 0103 -- C
-D 600,562,0,95,7,72 2 0104 -- D
-E 600,562,0,110,-3,72 2 0105 -- E
-F 600,562,0,110,-3,72 2 0106 -- F
-G 600,580,18,95,-33,72 2 0107 -- G
-H 600,562,0,137,18,72 2 0110 -- H
-I 600,562,0,73,-46,72 2 0111 -- I
-J 600,562,18,135,-2,72 2 0112 -- J
-K 600,562,0,121,12,72 2 0113 -- K
-L 600,562,0,57,3,57 2 0114 -- L
-M 600,562,0,165,46,72 2 0115 -- M
-N 600,562,13,162,43,72 2 0116 -- N
-O 600,580,18,75,-44,72 2 0117 -- O
-P 600,562,0,94,-29,72 2 0120 -- P
-Q 600,580,138,75,-45,72 2 0121 -- Q
-R 600,562,0,48,12,48 2 0122 -- R
-S 600,580,20,100,-26,72 2 0123 -- S
-T 600,562,0,115,-58,72 2 0124 -- T
-U 600,562,18,152,-75,72 2 0125 -- U
-V 600,562,13,173,-55,72 2 0126 -- V
-W 600,562,13,172,-56,72 2 0127 -- W
-X 600,562,0,125,27,72 2 0130 -- X
-Y 600,562,0,145,-83,72 2 0131 -- Y
-Z 600,562,0,60,-36,60 2 0132 -- Z
-[ 600,622,108,24,-196,24 2 0133 -- bracketleft
-lB "
-\ 600,629,80,0,-199 2 0134 -- backslash
-rs "
-] 600,622,108,0,-85 2 0135 -- bracketright
-rB "
-a^ 600,654,0,31,-179,31 2 0136 -- circumflex
-^ "
-_ 600,0,125,34,77,34 0 0137 -- underscore
-` 600,562,0,0,-293 2 0140 -- quoteleft
-oq "
-a 600,441,15,19,-26,19 0 0141 -- a
-b 600,629,15,75,21,72 2 0142 -- b
-c 600,441,15,58,-56,58 0 0143 -- c
-d 600,629,15,90,-35,72 2 0144 -- d
-e 600,441,15,48,-56,48 0 0145 -- e
-f 600,629,0,112,-64,72 2 0146 -- f
-g 600,441,157,107,-11,72 1 0147 -- g
-h 600,629,0,42,17,42 2 0150 -- h
-i 600,657,0,0,-45 2 0151 -- i
-j 600,657,157,0,-2 3 0152 -- j
-k 600,629,0,83,-8,72 2 0153 -- k
-l 600,629,0,0,-45 2 0154 -- l
-m 600,441,0,65,55,65 0 0155 -- m
-n 600,441,0,35,24,35 0 0156 -- n
-o 600,441,15,38,-52,38 0 0157 -- o
-p 600,441,157,55,74,55 1 0160 -- p
-q 600,441,157,132,-35,72 1 0161 -- q
-r 600,441,0,86,-10,72 0 0162 -- r
-s 600,441,15,34,-28,34 0 0163 -- s
-t 600,561,15,11,-117,11 2 0164 -- t
-u 600,426,15,22,-51,22 0 0165 -- u
-v 600,426,10,131,-40,72 0 0166 -- v
-w 600,426,10,145,-26,72 0 0167 -- w
-x 600,426,0,105,30,72 0 0170 -- x
-y 600,426,157,133,54,72 1 0171 -- y
-z 600,426,0,43,-49,43 0 0172 -- z
-lC 600,622,108,19,-183,19 2 0173 -- braceleft
-{ "
-ba 600,750,250,0,-172 3 0174 -- bar
-| "
-rC 600,622,108,0,-90 2 0175 -- braceright
-} "
-a~ 600,606,0,79,-162,72 2 0176 -- tilde
-~ "
-bq 600,100,134,0,-135 0 0200 -- quotesinglbase
-Fo 600,446,0,102,-42,72 0 0201 -- guillemotleft
-char171 "
-Fc 600,446,0,68,-8,68 0 0202 -- guillemotright
-char187 "
-bu 600,383,0,0,-174 0 0203 -- bullet
-Fn 600,622,143,121,76,72 2 0204 -- florin
-f/ 600,665,57,96,-34,72 2 0205 -- fraction
-%0 600,622,15,77,-9,72 2 0206 -- perthousand
-dg 600,580,78,0,-167 2 0207 -- dagger
-dd 600,580,78,0,-113 2 0210 -- daggerdbl
-en 600,285,0,36,-74,36 0 0211 -- endash
-em 600,285,0,111,1,72 0 0212 -- emdash
-fi 600,629,0,69,47,69 2 0214 -- fi
-fl 600,629,0,69,47,69 2 0215 -- fl
-.i 600,426,0,0,-45 0 0220 -- dotlessi
-ga 600,672,0,0,-244 2 0222 -- grave
-a" 600,672,0,133,-189,72 2 0223 -- hungarumlaut
-a. 600,580,0,0,-310 2 0224 -- dotaccent
-ab 600,609,0,26,-229,26 2 0225 -- breve
-ah 600,669,0,64,-212,64 2 0226 -- caron
-ao 600,627,0,0,-282 2 0227 -- ring
-ho 600,0,151,0,-157 0 0230 -- ogonek
-lq 600,562,0,0,-212 2 0231 -- quotedblleft
-rq 600,562,0,26,-163,26 2 0232 -- quotedblright
-oe 600,441,15,65,-4,65 0 0233 -- oe
-/l 600,629,0,33,-45,33 2 0234 -- lslash
-Bq 600,100,134,0,-65 0 0235 -- quotedblbase
-OE 600,562,0,122,-9,72 2 0236 -- OE
-/L 600,562,0,57,3,57 2 0237 -- Lslash
-r! 600,430,157,0,-175 1 0241 -- exclamdown
-char161 "
-ct 600,614,49,38,-101,38 2 0242 -- cent
-char162 "
-Po 600,611,21,71,-74,71 2 0243 -- sterling
-char163 "
-Cs 600,506,0,78,-44,72 0 0244 -- currency
-char164 "
-Ye 600,562,0,143,-70,72 2 0245 -- yen
-char165 "
-bb 600,675,175,0,-188 3 0246 -- brokenbar
-char166 "
-sc 600,580,78,40,-54,40 2 0247 -- section
-char167 "
-ad 600,595,0,20,-212,20 2 0250 -- dieresis
-char168 "
-co 600,580,18,117,-3,72 2 0251 -- copyright
-char169 "
-Of 600,580,0,0,-159 2 0252 -- ordfeminine
-char170 "
-fo 600,446,0,0,-154 0 0253 -- guilsinglleft
-no 600,369,0,41,-105,41 0 0254 -- logicalnot
-char172 "
-\- 600,283,0,30,-79,30 0 0255 -- minus
-rg 600,580,18,117,-3,72 2 0256 -- registered
-char174 "
-a- 600,565,0,50,-182,50 2 0257 -- macron
-char175 "
-de 600,622,0,26,-164,26 2 0260 -- degree
-char176 "
-char177 600,558,0,44,-46,44 0 0261 -- plusminus
-S2 600,622,0,0,-180 2 0262 -- twosuperior
-char178 "
-S3 600,622,0,0,-163 2 0263 -- threesuperior
-char179 "
-aa 600,672,0,62,-298,62 2 0264 -- acute
-char180 "
-char181 600,426,157,22,-22,22 1 0265 -- mu
-ps 600,562,78,80,-50,72 2 0266 -- paragraph
-char182 "
-pc 600,327,0,0,-225 0 0267 -- periodcentered
-char183 "
-ac 600,10,151,0,-147 0 0270 -- cedilla
-char184 "
-S1 600,622,0,0,-181 2 0271 -- onesuperior
-char185 "
-Om 600,580,0,0,-160 2 0272 -- ordmasculine
-char186 "
-fc 600,446,0,0,-120 0 0273 -- guilsinglright
-14 600,665,57,124,-15,72 2 0274 -- onequarter
-char188 "
-12 600,665,57,119,-15,72 2 0275 -- onehalf
-char189 "
-34 600,666,56,109,-23,72 2 0276 -- threequarters
-char190 "
-r? 600,430,157,0,-55 1 0277 -- questiondown
-char191 "
-`A 600,793,0,57,47,57 2 0300 -- Agrave
-char192 "
-'A 600,793,0,108,47,72 2 0301 -- Aacute
-char193 "
-^A 600,775,0,57,47,57 2 0302 -- Acircumflex
-char194 "
-~A 600,732,0,106,47,72 2 0303 -- Atilde
-char195 "
-:A 600,731,0,57,47,57 2 0304 -- Adieresis
-char196 "
-oA 600,753,0,57,47,57 2 0305 -- Aring
-char197 "
-AE 600,562,0,105,47,72 2 0306 -- AE
-char198 "
-,C 600,580,151,108,-43,72 2 0307 -- Ccedilla
-char199 "
-`E 600,793,0,110,-3,72 2 0310 -- Egrave
-char200 "
-'E 600,793,0,118,-3,72 2 0311 -- Eacute
-char201 "
-^E 600,775,0,110,-3,72 2 0312 -- Ecircumflex
-char202 "
-:E 600,731,0,110,-3,72 2 0313 -- Edieresis
-char203 "
-`I 600,793,0,73,-46,72 2 0314 -- Igrave
-char204 "
-'I 600,793,0,88,-46,72 2 0315 -- Iacute
-char205 "
-^I 600,775,0,73,-46,72 2 0316 -- Icircumflex
-char206 "
-:I 600,731,0,73,-46,72 2 0317 -- Idieresis
-char207 "
--D 600,562,0,95,7,72 2 0320 -- Eth
-char208 "
-~N 600,732,13,162,43,72 2 0321 -- Ntilde
-char209 "
-`O 600,793,18,75,-44,72 2 0322 -- Ograve
-char210 "
-'O 600,793,18,88,-44,72 2 0323 -- Oacute
-char211 "
-^O 600,775,18,75,-44,72 2 0324 -- Ocircumflex
-char212 "
-~O 600,732,18,106,-44,72 2 0325 -- Otilde
-char213 "
-:O 600,731,18,75,-44,72 2 0326 -- Odieresis
-char214 "
-char215 600,470,0,57,-53,57 0 0327 -- multiply
-/O 600,629,80,75,-44,72 2 0330 -- Oslash
-char216 "
-`U 600,793,18,152,-75,72 2 0331 -- Ugrave
-char217 "
-'U 600,793,18,152,-75,72 2 0332 -- Uacute
-char218 "
-^U 600,775,18,152,-75,72 2 0333 -- Ucircumflex
-char219 "
-:U 600,731,18,152,-75,72 2 0334 -- Udieresis
-char220 "
-'Y 600,793,0,145,-83,72 2 0335 -- Yacute
-char221 "
-TP 600,562,0,56,-29,56 2 0336 -- Thorn
-char222 "
-ss 600,629,15,67,2,67 2 0337 -- germandbls
-char223 "
-`a 600,672,15,19,-26,19 2 0340 -- agrave
-char224 "
-'a 600,672,15,62,-26,62 2 0341 -- aacute
-char225 "
-^a 600,654,15,31,-26,31 2 0342 -- acircumflex
-char226 "
-~a 600,606,15,79,-26,72 2 0343 -- atilde
-char227 "
-:a 600,595,15,20,-26,20 2 0344 -- adieresis
-char228 "
-oa 600,627,15,19,-26,19 2 0345 -- aring
-char229 "
-ae 600,441,15,76,9,72 0 0346 -- ae
-char230 "
-,c 600,441,151,64,-56,64 0 0347 -- ccedilla
-char231 "
-`e 600,672,15,48,-56,48 2 0350 -- egrave
-char232 "
-'e 600,672,15,62,-56,62 2 0351 -- eacute
-char233 "
-^e 600,654,15,48,-56,48 2 0352 -- ecircumflex
-char234 "
-:e 600,595,15,48,-56,48 2 0353 -- edieresis
-char235 "
-`i 600,672,0,0,-45 2 0354 -- igrave
-char236 "
-'i 600,672,0,62,-45,62 2 0355 -- iacute
-char237 "
-^i 600,654,0,1,-45,1 2 0356 -- icircumflex
-char238 "
-:i 600,595,0,0,-45 2 0357 -- idieresis
-char239 "
-Sd 600,629,15,89,-52,72 2 0360 -- eth
-char240 "
-~n 600,606,0,79,24,72 2 0361 -- ntilde
-char241 "
-`o 600,672,15,38,-52,38 2 0362 -- ograve
-char242 "
-'o 600,672,15,62,-52,62 2 0363 -- oacute
-char243 "
-^o 600,654,15,38,-52,38 2 0364 -- ocircumflex
-char244 "
-~o 600,606,15,79,-52,72 2 0365 -- otilde
-char245 "
-:o 600,595,15,38,-52,38 2 0366 -- odieresis
-char246 "
-char247 600,467,0,23,-86,23 0 0367 -- divide
-/o 600,506,80,38,-52,38 0 0370 -- oslash
-char248 "
-`u 600,672,15,22,-51,22 2 0371 -- ugrave
-char249 "
-'u 600,672,15,52,-51,52 2 0372 -- uacute
-char250 "
-^u 600,654,15,22,-51,22 2 0373 -- ucircumflex
-char251 "
-:u 600,595,15,22,-51,22 2 0374 -- udieresis
-char252 "
-'y 600,672,157,133,54,72 3 0375 -- yacute
-char253 "
-Tp 600,629,157,55,74,55 3 0376 -- thorn
-char254 "
-:y 600,595,157,133,54,72 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/CR b/contrib/groff/devps/CR
deleted file mode 100644
index fc3c91e..0000000
--- a/contrib/groff/devps/CR
+++ /dev/null
@@ -1,339 +0,0 @@
-name CR
-internalname Courier
-spacewidth 600
-encoding text.enc
-charset
-ha 600,622 2 0000 -- asciicircum
-ti 600,320 0 0001 -- asciitilde
-vS 600,805,20 2 0002 -- Scaron
-vZ 600,805 2 0003 -- Zcaron
-vs 600,669,15 2 0004 -- scaron
-vz 600,669 2 0005 -- zcaron
-:Y 600,731 2 0006 -- Ydieresis
-tm 600,562 2 0007 -- trademark
-aq 600,562 2 0010 -- quotesingle
-space 600 0 0040
-! 600,572,15 2 0041 -- exclam
-" 600,562 2 0042 -- quotedbl
-dq "
-# 600,639,32 2 0043 -- numbersign
-sh "
-$ 600,662,126 2 0044 -- dollar
-Do "
-% 600,622,15 2 0045 -- percent
-& 600,543,15 0 0046 -- ampersand
-' 600,562 2 0047 -- quoteright
-cq "
-( 600,622,108 2 0050 -- parenleft
-) 600,622,108 2 0051 -- parenright
-* 600,607 2 0052 -- asterisk
-+ 600,470 0 0053 -- plus
-, 600,122,112 0 0054 -- comma
-- 600,285 0 0055 -- hyphen
-hy "
-char173 "
-. 600,109,15 0 0056 -- period
-/ 600,629,80 2 0057 -- slash
-sl "
-0 600,622,15 2 0060 -- zero
-1 600,622 2 0061 -- one
-2 600,622 2 0062 -- two
-3 600,622,15 2 0063 -- three
-4 600,622 2 0064 -- four
-5 600,607,15 2 0065 -- five
-6 600,622,15 2 0066 -- six
-7 600,607 2 0067 -- seven
-8 600,622,15 2 0070 -- eight
-9 600,622,15 2 0071 -- nine
-: 600,385,15 0 0072 -- colon
-; 600,385,112 0 0073 -- semicolon
-< 600,472 0 0074 -- less
-= 600,376 0 0075 -- equal
-> 600,472 0 0076 -- greater
-? 600,572,15 2 0077 -- question
-@ 600,622,15 2 0100 -- at
-at "
-A 600,562 2 0101 -- A
-B 600,562 2 0102 -- B
-C 600,580,18 2 0103 -- C
-D 600,562 2 0104 -- D
-E 600,562 2 0105 -- E
-F 600,562 2 0106 -- F
-G 600,580,18 2 0107 -- G
-H 600,562 2 0110 -- H
-I 600,562 2 0111 -- I
-J 600,562,18 2 0112 -- J
-K 600,562 2 0113 -- K
-L 600,562 2 0114 -- L
-M 600,562 2 0115 -- M
-N 600,562,13 2 0116 -- N
-O 600,580,18 2 0117 -- O
-P 600,562 2 0120 -- P
-Q 600,580,138 2 0121 -- Q
-R 600,562 2 0122 -- R
-S 600,580,20 2 0123 -- S
-T 600,562 2 0124 -- T
-U 600,562,18 2 0125 -- U
-V 600,562,13 2 0126 -- V
-W 600,562,13 2 0127 -- W
-X 600,562 2 0130 -- X
-Y 600,562 2 0131 -- Y
-Z 600,562 2 0132 -- Z
-[ 600,622,108 2 0133 -- bracketleft
-lB "
-\ 600,629,80 2 0134 -- backslash
-rs "
-] 600,622,108 2 0135 -- bracketright
-rB "
-a^ 600,654 2 0136 -- circumflex
-^ "
-_ 600,0,125 0 0137 -- underscore
-` 600,562 2 0140 -- quoteleft
-oq "
-a 600,441,15 0 0141 -- a
-b 600,629,15 2 0142 -- b
-c 600,441,15 0 0143 -- c
-d 600,629,15 2 0144 -- d
-e 600,441,15 0 0145 -- e
-f 600,629 2 0146 -- f
-g 600,441,157 1 0147 -- g
-h 600,629 2 0150 -- h
-i 600,657 2 0151 -- i
-j 600,657,157 3 0152 -- j
-k 600,629 2 0153 -- k
-l 600,629 2 0154 -- l
-m 600,441 0 0155 -- m
-n 600,441 0 0156 -- n
-o 600,441,15 0 0157 -- o
-p 600,441,157 1 0160 -- p
-q 600,441,157 1 0161 -- q
-r 600,441 0 0162 -- r
-s 600,441,15 0 0163 -- s
-t 600,561,15 2 0164 -- t
-u 600,426,15 0 0165 -- u
-v 600,426,10 0 0166 -- v
-w 600,426,10 0 0167 -- w
-x 600,426 0 0170 -- x
-y 600,426,157 1 0171 -- y
-z 600,426 0 0172 -- z
-lC 600,622,108 2 0173 -- braceleft
-{ "
-ba 600,750,250 3 0174 -- bar
-| "
-rC 600,622,108 2 0175 -- braceright
-} "
-a~ 600,606 2 0176 -- tilde
-~ "
-bq 600,100,134 0 0200 -- quotesinglbase
-Fo 600,446 0 0201 -- guillemotleft
-char171 "
-Fc 600,446 0 0202 -- guillemotright
-char187 "
-bu 600,383 0 0203 -- bullet
-Fn 600,622,143 2 0204 -- florin
-f/ 600,665,57 2 0205 -- fraction
-%0 600,622,15 2 0206 -- perthousand
-dg 600,580,78 2 0207 -- dagger
-dd 600,580,78 2 0210 -- daggerdbl
-en 600,285 0 0211 -- endash
-em 600,285 0 0212 -- emdash
-fi 600,629 2 0214 -- fi
-fl 600,629 2 0215 -- fl
-.i 600,426 0 0220 -- dotlessi
-ga 600,672 2 0222 -- grave
-a" 600,672 2 0223 -- hungarumlaut
-a. 600,580 2 0224 -- dotaccent
-ab 600,609 2 0225 -- breve
-ah 600,669 2 0226 -- caron
-ao 600,627 2 0227 -- ring
-ho 600,0,151 0 0230 -- ogonek
-lq 600,562 2 0231 -- quotedblleft
-rq 600,562 2 0232 -- quotedblright
-oe 600,441,15 0 0233 -- oe
-/l 600,629 2 0234 -- lslash
-Bq 600,100,134 0 0235 -- quotedblbase
-OE 600,562 2 0236 -- OE
-/L 600,562 2 0237 -- Lslash
-r! 600,430,157 1 0241 -- exclamdown
-char161 "
-ct 600,614,49 2 0242 -- cent
-char162 "
-Po 600,611,21 2 0243 -- sterling
-char163 "
-Cs 600,506 0 0244 -- currency
-char164 "
-Ye 600,562 2 0245 -- yen
-char165 "
-bb 600,675,175 3 0246 -- brokenbar
-char166 "
-sc 600,580,78 2 0247 -- section
-char167 "
-ad 600,595 2 0250 -- dieresis
-char168 "
-co 600,580,18 2 0251 -- copyright
-char169 "
-Of 600,580 2 0252 -- ordfeminine
-char170 "
-fo 600,446 0 0253 -- guilsinglleft
-no 600,369 0 0254 -- logicalnot
-char172 "
-\- 600,283 0 0255 -- minus
-rg 600,580,18 2 0256 -- registered
-char174 "
-a- 600,565 2 0257 -- macron
-char175 "
-de 600,622 2 0260 -- degree
-char176 "
-char177 600,558 0 0261 -- plusminus
-S2 600,622 2 0262 -- twosuperior
-char178 "
-S3 600,622 2 0263 -- threesuperior
-char179 "
-aa 600,672 2 0264 -- acute
-char180 "
-char181 600,426,157 1 0265 -- mu
-ps 600,562,78 2 0266 -- paragraph
-char182 "
-pc 600,327 0 0267 -- periodcentered
-char183 "
-ac 600,10,151 0 0270 -- cedilla
-char184 "
-S1 600,622 2 0271 -- onesuperior
-char185 "
-Om 600,580 2 0272 -- ordmasculine
-char186 "
-fc 600,446 0 0273 -- guilsinglright
-14 600,665,57 2 0274 -- onequarter
-char188 "
-12 600,665,57 2 0275 -- onehalf
-char189 "
-34 600,666,56 2 0276 -- threequarters
-char190 "
-r? 600,430,157 1 0277 -- questiondown
-char191 "
-`A 600,793 2 0300 -- Agrave
-char192 "
-'A 600,793 2 0301 -- Aacute
-char193 "
-^A 600,775 2 0302 -- Acircumflex
-char194 "
-~A 600,732 2 0303 -- Atilde
-char195 "
-:A 600,731 2 0304 -- Adieresis
-char196 "
-oA 600,753 2 0305 -- Aring
-char197 "
-AE 600,562 2 0306 -- AE
-char198 "
-,C 600,580,151 2 0307 -- Ccedilla
-char199 "
-`E 600,793 2 0310 -- Egrave
-char200 "
-'E 600,793 2 0311 -- Eacute
-char201 "
-^E 600,775 2 0312 -- Ecircumflex
-char202 "
-:E 600,731 2 0313 -- Edieresis
-char203 "
-`I 600,793 2 0314 -- Igrave
-char204 "
-'I 600,793 2 0315 -- Iacute
-char205 "
-^I 600,775 2 0316 -- Icircumflex
-char206 "
-:I 600,731 2 0317 -- Idieresis
-char207 "
--D 600,562 2 0320 -- Eth
-char208 "
-~N 600,732,13 2 0321 -- Ntilde
-char209 "
-`O 600,793,18 2 0322 -- Ograve
-char210 "
-'O 600,793,18 2 0323 -- Oacute
-char211 "
-^O 600,775,18 2 0324 -- Ocircumflex
-char212 "
-~O 600,732,18 2 0325 -- Otilde
-char213 "
-:O 600,731,18 2 0326 -- Odieresis
-char214 "
-char215 600,470 0 0327 -- multiply
-/O 600,629,80 2 0330 -- Oslash
-char216 "
-`U 600,793,18 2 0331 -- Ugrave
-char217 "
-'U 600,793,18 2 0332 -- Uacute
-char218 "
-^U 600,775,18 2 0333 -- Ucircumflex
-char219 "
-:U 600,731,18 2 0334 -- Udieresis
-char220 "
-'Y 600,793 2 0335 -- Yacute
-char221 "
-TP 600,562 2 0336 -- Thorn
-char222 "
-ss 600,629,15 2 0337 -- germandbls
-char223 "
-`a 600,672,15 2 0340 -- agrave
-char224 "
-'a 600,672,15 2 0341 -- aacute
-char225 "
-^a 600,654,15 2 0342 -- acircumflex
-char226 "
-~a 600,606,15 2 0343 -- atilde
-char227 "
-:a 600,595,15 2 0344 -- adieresis
-char228 "
-oa 600,627,15 2 0345 -- aring
-char229 "
-ae 600,441,15 0 0346 -- ae
-char230 "
-,c 600,441,151 0 0347 -- ccedilla
-char231 "
-`e 600,672,15 2 0350 -- egrave
-char232 "
-'e 600,672,15 2 0351 -- eacute
-char233 "
-^e 600,654,15 2 0352 -- ecircumflex
-char234 "
-:e 600,595,15 2 0353 -- edieresis
-char235 "
-`i 600,672 2 0354 -- igrave
-char236 "
-'i 600,672 2 0355 -- iacute
-char237 "
-^i 600,654 2 0356 -- icircumflex
-char238 "
-:i 600,595 2 0357 -- idieresis
-char239 "
-Sd 600,629,15 2 0360 -- eth
-char240 "
-~n 600,606 2 0361 -- ntilde
-char241 "
-`o 600,672,15 2 0362 -- ograve
-char242 "
-'o 600,672,15 2 0363 -- oacute
-char243 "
-^o 600,654,15 2 0364 -- ocircumflex
-char244 "
-~o 600,606,15 2 0365 -- otilde
-char245 "
-:o 600,595,15 2 0366 -- odieresis
-char246 "
-char247 600,467 0 0367 -- divide
-/o 600,506,80 0 0370 -- oslash
-char248 "
-`u 600,672,15 2 0371 -- ugrave
-char249 "
-'u 600,672,15 2 0372 -- uacute
-char250 "
-^u 600,654,15 2 0373 -- ucircumflex
-char251 "
-:u 600,595,15 2 0374 -- udieresis
-char252 "
-'y 600,672,157 3 0375 -- yacute
-char253 "
-Tp 600,629,157 3 0376 -- thorn
-char254 "
-:y 600,595,157 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/DESC.in b/contrib/groff/devps/DESC.in
deleted file mode 100644
index e9d26c8..0000000
--- a/contrib/groff/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/devps/HB b/contrib/groff/devps/HB
deleted file mode 100644
index 96e022e..0000000
--- a/contrib/groff/devps/HB
+++ /dev/null
@@ -1,561 +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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -120
-. cq -120
-. rq -120
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' v -20
-cq v -20
-' 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 char173 -20
-r g -15
-r d -20
-r , -60
-r c -20
-s w -15
-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 0000 -- asciicircum
-ti 584,343 0 0001 -- asciitilde
-vS 667,936,19 2 0002 -- Scaron
-vZ 611,936 2 0003 -- Zcaron
-vs 556,750,14 2 0004 -- scaron
-vz 500,750 2 0005 -- zcaron
-:Y 667,915 2 0006 -- Ydieresis
-tm 1000,718 2 0007 -- trademark
-aq 238,718 2 0010 -- quotesingle
-space 278 0 0040
-! 333,718 2 0041 -- exclam
-" 474,718 2 0042 -- quotedbl
-dq "
-# 556,698 2 0043 -- numbersign
-sh "
-$ 556,775,115 2 0044 -- dollar
-Do "
-% 889,710,19 2 0045 -- percent
-& 722,718,19 2 0046 -- ampersand
-' 278,718 2 0047 -- quoteright
-cq "
-( 333,734,208 3 0050 -- parenleft
-) 333,734,208 3 0051 -- parenright
-* 389,718 2 0052 -- asterisk
-+ 584,506 0 0053 -- plus
-, 278,146,168 0 0054 -- comma
-- 333,345 0 0055 -- hyphen
-hy "
-char173 "
-. 278,146 0 0056 -- period
-/ 278,737,19 2 0057 -- slash
-sl "
-0 556,710,19 2 0060 -- zero
-1 556,710 2 0061 -- one
-2 556,710 2 0062 -- two
-3 556,710,19 2 0063 -- three
-4 556,710 2 0064 -- four
-5 556,698,19 2 0065 -- five
-6 556,710,19 2 0066 -- six
-7 556,698 2 0067 -- seven
-8 556,710,19 2 0070 -- eight
-9 556,710,19 2 0071 -- nine
-: 333,512 0 0072 -- colon
-; 333,512,168 0 0073 -- semicolon
-< 584,514,8 0 0074 -- less
-= 584,419 0 0075 -- equal
-> 584,514,8 0 0076 -- greater
-? 611,727 2 0077 -- question
-@ 975,737,19 2 0100 -- at
-at "
-A 722,718 2 0101 -- A
-B 722,718 2 0102 -- B
-C 722,737,19 2 0103 -- C
-D 722,718 2 0104 -- D
-E 667,718 2 0105 -- E
-F 611,718 2 0106 -- F
-G 778,737,19 2 0107 -- G
-H 722,718 2 0110 -- H
-I 278,718 2 0111 -- I
-J 556,718,18 2 0112 -- J
-K 722,718 2 0113 -- K
-L 611,718 2 0114 -- L
-M 833,718 2 0115 -- M
-N 722,718 2 0116 -- N
-O 778,737,19 2 0117 -- O
-P 667,718 2 0120 -- P
-Q 778,737,52 2 0121 -- Q
-R 722,718 2 0122 -- R
-S 667,737,19 2 0123 -- S
-T 611,718 2 0124 -- T
-U 722,718,19 2 0125 -- U
-V 667,718 2 0126 -- V
-W 944,718 2 0127 -- W
-X 667,718 2 0130 -- X
-Y 667,718 2 0131 -- Y
-Z 611,718 2 0132 -- Z
-[ 333,722,196 2 0133 -- bracketleft
-lB "
-\ 278,737,19 2 0134 -- backslash
-rs "
-] 333,722,196 2 0135 -- bracketright
-rB "
-a^ 333,750 2 0136 -- circumflex
-^ "
-_ 556,0,125 0 0137 -- underscore
-` 278,727 2 0140 -- quoteleft
-oq "
-a 556,546,14 0 0141 -- a
-b 611,718,14 2 0142 -- b
-c 556,546,14 0 0143 -- c
-d 611,718,14 2 0144 -- d
-e 556,546,14 0 0145 -- e
-f 333,727 2 0146 -- f
-g 611,546,217 1 0147 -- g
-h 611,718 2 0150 -- h
-i 278,725 2 0151 -- i
-j 278,725,214 3 0152 -- j
-k 556,718 2 0153 -- k
-l 278,718 2 0154 -- l
-m 889,546 0 0155 -- m
-n 611,546 0 0156 -- n
-o 611,546,14 0 0157 -- o
-p 611,546,207 1 0160 -- p
-q 611,546,207 1 0161 -- q
-r 389,546 0 0162 -- r
-s 556,546,14 0 0163 -- s
-t 333,676,6 2 0164 -- t
-u 611,532,14 0 0165 -- u
-v 556,532 0 0166 -- v
-w 778,532 0 0167 -- w
-x 556,532 0 0170 -- x
-y 556,532,214 1 0171 -- y
-z 500,532 0 0172 -- z
-lC 389,722,196 2 0173 -- braceleft
-{ "
-ba 280,737,19 2 0174 -- bar
-| "
-rC 389,722,196 2 0175 -- braceright
-} "
-a~ 333,737 2 0176 -- tilde
-~ "
-bq 278,127,146 0 0200 -- quotesinglbase
-Fo 556,484 0 0201 -- guillemotleft
-char171 "
-Fc 556,484 0 0202 -- guillemotright
-char187 "
-bu 350,524 0 0203 -- bullet
-Fn 556,737,210 3 0204 -- florin
-f/ 167,710,19 2 0205 -- fraction
-%0 1000,710,19 2 0206 -- perthousand
-dg 556,718,171 2 0207 -- dagger
-dd 556,718,171 2 0210 -- daggerdbl
-en 556,333 0 0211 -- endash
-em 1000,333 0 0212 -- emdash
-fi 611,727 2 0214 -- fi
-fl 611,727 2 0215 -- fl
-.i 278,532 0 0220 -- dotlessi
-ga 333,750 2 0222 -- grave
-a" 333,750 2 0223 -- hungarumlaut
-a. 333,729 2 0224 -- dotaccent
-ab 333,750 2 0225 -- breve
-ah 333,750 2 0226 -- caron
-ao 333,776 2 0227 -- ring
-ho 333,0,228 1 0230 -- ogonek
-lq 500,727 2 0231 -- quotedblleft
-rq 500,718 2 0232 -- quotedblright
-oe 944,546,14 0 0233 -- oe
-/l 278,718 2 0234 -- lslash
-Bq 500,127,146 0 0235 -- quotedblbase
-OE 1000,737,19 2 0236 -- OE
-/L 611,718 2 0237 -- Lslash
-r! 333,532,186 0 0241 -- exclamdown
-char161 "
-ct 556,628,118 0 0242 -- cent
-char162 "
-Po 556,718,16 2 0243 -- sterling
-char163 "
-Cs 556,636 0 0244 -- currency
-char164 "
-Ye 556,698 2 0245 -- yen
-char165 "
-bb 280,737,19 2 0246 -- brokenbar
-char166 "
-sc 556,727,184 2 0247 -- section
-char167 "
-ad 333,729 2 0250 -- dieresis
-char168 "
-co 737,737,19 2 0251 -- copyright
-char169 "
-Of 370,737 2 0252 -- ordfeminine
-char170 "
-fo 333,484 0 0253 -- guilsinglleft
-no 584,419 0 0254 -- logicalnot
-char172 "
-\- 584,309 0 0255 -- minus
-rg 737,737,19 2 0256 -- registered
-char174 "
-a- 333,678 2 0257 -- macron
-char175 "
-de 400,712 2 0260 -- degree
-char176 "
-char177 584,506 0 0261 -- plusminus
-S2 333,710 2 0262 -- twosuperior
-char178 "
-S3 333,710 2 0263 -- threesuperior
-char179 "
-aa 333,750 2 0264 -- acute
-char180 "
-char181 611,532,207 1 0265 -- mu
-ps 556,700,191 2 0266 -- paragraph
-char182 "
-pc 278,334 0 0267 -- periodcentered
-char183 "
-ac 333,0,228 1 0270 -- cedilla
-char184 "
-S1 333,710 2 0271 -- onesuperior
-char185 "
-Om 365,737 2 0272 -- ordmasculine
-char186 "
-fc 333,484 0 0273 -- guilsinglright
-14 834,710,19 2 0274 -- onequarter
-char188 "
-12 834,710,19 2 0275 -- onehalf
-char189 "
-34 834,710,19 2 0276 -- threequarters
-char190 "
-r? 611,532,195 0 0277 -- questiondown
-char191 "
-`A 722,936 2 0300 -- Agrave
-char192 "
-'A 722,936 2 0301 -- Aacute
-char193 "
-^A 722,936 2 0302 -- Acircumflex
-char194 "
-~A 722,923 2 0303 -- Atilde
-char195 "
-:A 722,915 2 0304 -- Adieresis
-char196 "
-oA 722,962 2 0305 -- Aring
-char197 "
-AE 1000,718 2 0306 -- AE
-char198 "
-,C 722,737,228 3 0307 -- Ccedilla
-char199 "
-`E 667,936 2 0310 -- Egrave
-char200 "
-'E 667,936 2 0311 -- Eacute
-char201 "
-^E 667,936 2 0312 -- Ecircumflex
-char202 "
-:E 667,915 2 0313 -- Edieresis
-char203 "
-`I 278,936 2 0314 -- Igrave
-char204 "
-'I 278,936 2 0315 -- Iacute
-char205 "
-^I 278,936 2 0316 -- Icircumflex
-char206 "
-:I 278,915 2 0317 -- Idieresis
-char207 "
--D 722,718 2 0320 -- Eth
-char208 "
-~N 722,923 2 0321 -- Ntilde
-char209 "
-`O 778,936,19 2 0322 -- Ograve
-char210 "
-'O 778,936,19 2 0323 -- Oacute
-char211 "
-^O 778,936,19 2 0324 -- Ocircumflex
-char212 "
-~O 778,923,19 2 0325 -- Otilde
-char213 "
-:O 778,915,19 2 0326 -- Odieresis
-char214 "
-char215 584,505 0 0327 -- multiply
-/O 778,745,27 2 0330 -- Oslash
-char216 "
-`U 722,936,19 2 0331 -- Ugrave
-char217 "
-'U 722,936,19 2 0332 -- Uacute
-char218 "
-^U 722,936,19 2 0333 -- Ucircumflex
-char219 "
-:U 722,915,19 2 0334 -- Udieresis
-char220 "
-'Y 667,936 2 0335 -- Yacute
-char221 "
-TP 667,718 2 0336 -- Thorn
-char222 "
-ss 611,731,14 2 0337 -- germandbls
-char223 "
-`a 556,750,14 2 0340 -- agrave
-char224 "
-'a 556,750,14 2 0341 -- aacute
-char225 "
-^a 556,750,14 2 0342 -- acircumflex
-char226 "
-~a 556,737,14 2 0343 -- atilde
-char227 "
-:a 556,729,14 2 0344 -- adieresis
-char228 "
-oa 556,776,14 2 0345 -- aring
-char229 "
-ae 889,546,14 0 0346 -- ae
-char230 "
-,c 556,546,228 1 0347 -- ccedilla
-char231 "
-`e 556,750,14 2 0350 -- egrave
-char232 "
-'e 556,750,14 2 0351 -- eacute
-char233 "
-^e 556,750,14 2 0352 -- ecircumflex
-char234 "
-:e 556,729,14 2 0353 -- edieresis
-char235 "
-`i 278,750 2 0354 -- igrave
-char236 "
-'i 278,750 2 0355 -- iacute
-char237 "
-^i 278,750 2 0356 -- icircumflex
-char238 "
-:i 278,729 2 0357 -- idieresis
-char239 "
-Sd 611,737,14 2 0360 -- eth
-char240 "
-~n 611,737 2 0361 -- ntilde
-char241 "
-`o 611,750,14 2 0362 -- ograve
-char242 "
-'o 611,750,14 2 0363 -- oacute
-char243 "
-^o 611,750,14 2 0364 -- ocircumflex
-char244 "
-~o 611,737,14 2 0365 -- otilde
-char245 "
-:o 611,729,14 2 0366 -- odieresis
-char246 "
-char247 584,548,42 0 0367 -- divide
-/o 611,560,29 0 0370 -- oslash
-char248 "
-`u 611,750,14 2 0371 -- ugrave
-char249 "
-'u 611,750,14 2 0372 -- uacute
-char250 "
-^u 611,750,14 2 0373 -- ucircumflex
-char251 "
-:u 611,729,14 2 0374 -- udieresis
-char252 "
-'y 556,750,214 3 0375 -- yacute
-char253 "
-Tp 611,718,208 3 0376 -- thorn
-char254 "
-:y 556,729,214 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HBI b/contrib/groff/devps/HBI
deleted file mode 100644
index a12e389..0000000
--- a/contrib/groff/devps/HBI
+++ /dev/null
@@ -1,562 +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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -120
-. cq -120
-. rq -120
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' v -20
-cq v -20
-' 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 char173 -20
-r g -15
-r d -20
-r , -60
-r c -20
-s w -15
-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 0000 -- asciicircum
-ti 584,343,0,43,-65,43 0 0001 -- asciitilde
-vS 667,936,19,101,-31,90 2 0002 -- Scaron
-vZ 611,936,0,176,25,90 2 0003 -- Zcaron
-vs 556,750,14,108,-13,90 2 0004 -- scaron
-vz 500,750,0,136,30,90 2 0005 -- zcaron
-:Y 667,915,0,189,-118,90 2 0006 -- Ydieresis
-tm 1000,718,0,159,-129,90 2 0007 -- trademark
-aq 238,718,0,133,-115,90 2 0010 -- quotesingle
-space 278 0 0040
-! 333,718,0,114,-44,90 2 0041 -- exclam
-" 474,718,0,105,-143,90 2 0042 -- quotedbl
-dq "
-# 556,698,0,138,-10,90 2 0043 -- numbersign
-sh "
-$ 556,775,115,116,-17,90 2 0044 -- dollar
-Do "
-% 889,710,19,62,-86,62 2 0045 -- percent
-& 722,718,19,60,-39,60 2 0046 -- ampersand
-' 278,718,0,134,-117,90 2 0047 -- quoteright
-cq "
-( 333,734,208,187,-26,90 3 0050 -- parenleft
-) 333,734,208,86,75,86 3 0051 -- parenright
-* 389,718,0,142,-96,90 2 0052 -- asterisk
-+ 584,506,0,76,-32,76 0 0053 -- plus
-, 278,146,168,17,22,17 0 0054 -- comma
-- 333,345,0,96,-23,90 0 0055 -- hyphen
-hy "
-char173 "
-. 278,146,0,17,-14,17 0 0056 -- period
-/ 278,737,19,240,87,90 2 0057 -- slash
-sl "
-0 556,710,19,111,-36,90 2 0060 -- zero
-1 556,710,0,23,-123,23 2 0061 -- one
-2 556,710,0,113,24,90 2 0062 -- two
-3 556,710,19,102,-15,90 2 0063 -- three
-4 556,710,0,92,-10,90 2 0064 -- four
-5 556,698,19,130,-14,90 2 0065 -- five
-6 556,710,19,113,-35,90 2 0066 -- six
-7 556,698,0,170,-75,90 2 0067 -- seven
-8 556,710,19,110,-19,90 2 0070 -- eight
-9 556,710,19,109,-28,90 2 0071 -- nine
-: 333,512,0,68,-42,68 0 0072 -- colon
-; 333,512,168,68,-6,68 0 0073 -- semicolon
-< 584,514,8,121,-32,90 0 0074 -- less
-= 584,419,0,99,-8,90 0 0075 -- equal
-> 584,514,8,75,14,75 0 0076 -- greater
-? 611,727,0,110,-115,90 2 0077 -- question
-@ 975,737,19,29,-136,29 2 0100 -- at
-at "
-A 722,718,0,30,30,30 2 0101 -- A
-B 722,718,0,92,-26,90 2 0102 -- B
-C 722,737,19,117,-57,90 2 0103 -- C
-D 722,718,0,105,-26,90 2 0104 -- D
-E 667,718,0,140,-26,90 2 0105 -- E
-F 611,718,0,179,-26,90 2 0106 -- F
-G 778,737,19,89,-58,89 2 0107 -- G
-H 722,718,0,132,-21,90 2 0110 -- H
-I 278,718,0,139,-14,90 2 0111 -- I
-J 556,718,18,131,-10,90 2 0112 -- J
-K 722,718,0,186,-37,90 2 0113 -- K
-L 611,718,0,50,-26,50 2 0114 -- L
-M 833,718,0,135,-19,90 2 0115 -- M
-N 722,718,0,135,-19,90 2 0116 -- N
-O 778,737,19,95,-57,90 2 0117 -- O
-P 667,718,0,121,-26,90 2 0120 -- P
-Q 778,737,52,95,-57,90 2 0121 -- Q
-R 722,718,0,106,-26,90 2 0122 -- R
-S 667,737,19,101,-31,90 2 0123 -- S
-T 611,718,0,190,-90,90 2 0124 -- T
-U 722,718,19,132,-66,90 2 0125 -- U
-V 667,718,0,184,-122,90 2 0126 -- V
-W 944,718,0,188,-119,90 2 0127 -- W
-X 667,718,0,174,36,90 2 0130 -- X
-Y 667,718,0,189,-118,90 2 0131 -- Y
-Z 611,718,0,176,25,90 2 0132 -- Z
-[ 333,722,196,179,29,90 2 0133 -- bracketleft
-lB "
-\ 278,737,19,79,-74,79 2 0134 -- backslash
-rs "
-] 333,722,196,140,68,90 2 0135 -- bracketright
-rB "
-a^ 333,750,0,188,-68,90 2 0136 -- circumflex
-^ "
-_ 556,0,125,34,77,34 0 0137 -- underscore
-` 278,727,0,133,-115,90 2 0140 -- quoteleft
-oq "
-a 556,546,14,77,-5,77 0 0141 -- a
-b 611,718,14,84,-11,84 2 0142 -- b
-c 556,546,14,93,-29,90 0 0143 -- c
-d 611,718,14,143,-32,90 2 0144 -- d
-e 556,546,14,87,-20,87 0 0145 -- e
-f 333,727,0,186,-37,90 2 0146 -- f
-g 611,546,217,105,12,90 1 0147 -- g
-h 611,718,0,68,-15,68 2 0150 -- h
-i 278,725,0,135,-19,90 2 0151 -- i
-j 278,725,214,135,92,90 3 0152 -- j
-k 556,718,0,164,-19,90 2 0153 -- k
-l 278,718,0,134,-19,90 2 0154 -- l
-m 889,546,0,70,-14,70 0 0155 -- m
-n 611,546,0,68,-15,68 0 0156 -- n
-o 611,546,14,82,-32,82 0 0157 -- o
-p 611,546,207,84,32,84 1 0160 -- p
-q 611,546,207,104,-30,90 1 0161 -- q
-r 389,546,0,150,-14,90 0 0162 -- r
-s 556,546,14,78,-13,78 0 0163 -- s
-t 333,676,6,139,-50,90 2 0164 -- t
-u 611,532,14,97,-48,90 0 0165 -- u
-v 556,532,0,150,-76,90 0 0166 -- v
-w 778,532,0,154,-73,90 0 0167 -- w
-x 556,532,0,142,35,90 0 0170 -- x
-y 556,532,214,146,8,90 1 0171 -- y
-z 500,532,0,133,30,90 0 0172 -- z
-lC 389,722,196,179,-44,90 2 0173 -- braceleft
-{ "
-ba 280,737,19,123,-30,90 2 0174 -- bar
-| "
-rC 389,722,196,68,68,68 2 0175 -- braceright
-} "
-a~ 333,737,0,224,-63,90 2 0176 -- tilde
-~ "
-bq 278,127,146,8,9,8 0 0200 -- quotesinglbase
-Fo 556,484,0,65,-85,65 0 0201 -- guillemotleft
-char171 "
-Fc 556,484,0,34,-54,34 0 0202 -- guillemotright
-char187 "
-bu 350,524,0,120,-33,90 0 0203 -- bullet
-Fn 556,737,210,163,100,90 3 0204 -- florin
-f/ 167,710,19,370,224,90 2 0205 -- fraction
-%0 1000,710,19,88,-26,88 2 0206 -- perthousand
-dg 556,718,171,120,-68,90 2 0207 -- dagger
-dd 556,718,171,122,4,90 2 0210 -- daggerdbl
-en 556,333,0,121,2,90 0 0211 -- endash
-em 1000,333,0,121,2,90 0 0212 -- emdash
-fi 611,727,0,135,-37,90 2 0214 -- fi
-fl 611,727,0,134,-37,90 2 0215 -- fl
-.i 278,532,0,94,-19,90 0 0220 -- dotlessi
-ga 333,750,0,70,-86,70 2 0222 -- grave
-a" 333,750,0,362,-87,90 2 0223 -- hungarumlaut
-a. 333,729,0,102,-185,90 2 0224 -- dotaccent
-ab 333,750,0,211,-106,90 2 0225 -- breve
-ah 333,750,0,219,-99,90 2 0226 -- caron
-ao 333,776,0,137,-150,90 2 0227 -- ring
-ho 333,0,228,0,9 1 0230 -- ogonek
-lq 500,727,0,138,-110,90 2 0231 -- quotedblleft
-rq 500,718,0,139,-112,90 2 0232 -- quotedblright
-oe 944,546,14,83,-32,83 0 0233 -- oe
-/l 278,718,0,179,10,90 2 0234 -- lslash
-Bq 500,127,146,13,14,13 0 0235 -- quotedblbase
-OE 1000,737,19,164,-49,90 2 0236 -- OE
-/L 611,718,0,50,16,50 2 0237 -- Lslash
-r! 333,532,186,70,0,70 0 0241 -- exclamdown
-char161 "
-ct 556,628,118,93,-29,90 0 0242 -- cent
-char162 "
-Po 556,718,16,129,0,90 2 0243 -- sterling
-char163 "
-Cs 556,636,0,174,23,90 0 0244 -- currency
-char164 "
-Ye 556,698,0,207,-10,90 2 0245 -- yen
-char165 "
-bb 280,737,19,123,-30,90 2 0246 -- brokenbar
-char166 "
-sc 556,727,184,92,-11,90 2 0247 -- section
-char167 "
-ad 333,729,0,199,-87,90 2 0250 -- dieresis
-char168 "
-co 737,737,19,148,-6,90 2 0251 -- copyright
-char169 "
-Of 370,737,0,145,-42,90 2 0252 -- ordfeminine
-char170 "
-fo 333,484,0,70,-80,70 0 0253 -- guilsinglleft
-no 584,419,0,99,-55,90 0 0254 -- logicalnot
-char172 "
-\- 584,309,0,76,-32,76 0 0255 -- minus
-rg 737,737,19,147,-5,90 2 0256 -- registered
-char174 "
-a- 333,678,0,200,-72,90 2 0257 -- macron
-char175 "
-de 400,712,0,117,-125,90 2 0260 -- degree
-char176 "
-char177 584,506,0,91,10,90 0 0261 -- plusminus
-S2 333,710,0,166,-19,90 2 0262 -- twosuperior
-char178 "
-S3 333,710,0,158,-41,90 2 0263 -- threesuperior
-char179 "
-aa 333,750,0,232,-186,90 2 0264 -- acute
-char180 "
-char181 611,532,207,97,28,90 1 0265 -- mu
-ps 556,700,191,182,-48,90 2 0266 -- paragraph
-char182 "
-pc 278,334,0,48,-60,48 0 0267 -- periodcentered
-char183 "
-ac 333,0,228,0,87 1 0270 -- cedilla
-char184 "
-S1 333,710,0,105,-98,90 2 0271 -- onesuperior
-char185 "
-Om 365,737,0,170,-42,90 2 0272 -- ordmasculine
-char186 "
-fc 333,484,0,39,-49,39 0 0273 -- guilsinglright
-14 834,710,19,22,-82,22 2 0274 -- onequarter
-char188 "
-12 834,710,19,74,-82,74 2 0275 -- onehalf
-char189 "
-34 834,710,19,55,-49,55 2 0276 -- threequarters
-char190 "
-r? 611,532,195,0,-3 0 0277 -- questiondown
-char191 "
-`A 722,936,0,30,30,30 2 0300 -- Agrave
-char192 "
-'A 722,936,0,78,30,78 2 0301 -- Aacute
-char193 "
-^A 722,936,0,34,30,34 2 0302 -- Acircumflex
-char194 "
-~A 722,923,0,69,30,69 2 0303 -- Atilde
-char195 "
-:A 722,915,0,44,30,44 2 0304 -- Adieresis
-char196 "
-oA 722,962,0,30,30,30 2 0305 -- Aring
-char197 "
-AE 1000,718,0,150,45,90 2 0306 -- AE
-char198 "
-,C 722,737,228,117,-57,90 3 0307 -- Ccedilla
-char199 "
-`E 667,936,0,140,-26,90 2 0310 -- Egrave
-char200 "
-'E 667,936,0,140,-26,90 2 0311 -- Eacute
-char201 "
-^E 667,936,0,140,-26,90 2 0312 -- Ecircumflex
-char202 "
-:E 667,915,0,140,-26,90 2 0313 -- Edieresis
-char203 "
-`I 278,936,0,139,-14,90 2 0314 -- Igrave
-char204 "
-'I 278,936,0,300,-14,90 2 0315 -- Iacute
-char205 "
-^I 278,936,0,256,-14,90 2 0316 -- Icircumflex
-char206 "
-:I 278,915,0,266,-14,90 2 0317 -- Idieresis
-char207 "
--D 722,718,0,105,-12,90 2 0320 -- Eth
-char208 "
-~N 722,923,0,135,-19,90 2 0321 -- Ntilde
-char209 "
-`O 778,936,19,95,-57,90 2 0322 -- Ograve
-char210 "
-'O 778,936,19,95,-57,90 2 0323 -- Oacute
-char211 "
-^O 778,936,19,95,-57,90 2 0324 -- Ocircumflex
-char212 "
-~O 778,923,19,95,-57,90 2 0325 -- Otilde
-char213 "
-:O 778,915,19,95,-57,90 2 0326 -- Odieresis
-char214 "
-char215 584,505,0,101,-7,90 0 0327 -- multiply
-/O 778,745,27,166,15,90 2 0330 -- Oslash
-char216 "
-`U 722,936,19,132,-66,90 2 0331 -- Ugrave
-char217 "
-'U 722,936,19,132,-66,90 2 0332 -- Uacute
-char218 "
-^U 722,936,19,132,-66,90 2 0333 -- Ucircumflex
-char219 "
-:U 722,915,19,132,-66,90 2 0334 -- Udieresis
-char220 "
-'Y 667,936,0,189,-118,90 2 0335 -- Yacute
-char221 "
-TP 667,718,0,99,-26,90 2 0336 -- Thorn
-char222 "
-ss 611,731,14,96,-19,90 2 0337 -- germandbls
-char223 "
-`a 556,750,14,77,-5,77 2 0340 -- agrave
-char224 "
-'a 556,750,14,121,-5,90 2 0341 -- aacute
-char225 "
-^a 556,750,14,77,-5,77 2 0342 -- acircumflex
-char226 "
-~a 556,737,14,113,-5,90 2 0343 -- atilde
-char227 "
-:a 556,729,14,88,-5,88 2 0344 -- adieresis
-char228 "
-oa 556,776,14,77,-5,77 2 0345 -- aring
-char229 "
-ae 889,546,14,84,-6,84 0 0346 -- ae
-char230 "
-,c 556,546,228,93,-29,90 1 0347 -- ccedilla
-char231 "
-`e 556,750,14,87,-20,87 2 0350 -- egrave
-char232 "
-'e 556,750,14,121,-20,90 2 0351 -- eacute
-char233 "
-^e 556,750,14,87,-20,87 2 0352 -- ecircumflex
-char234 "
-:e 556,729,14,88,-20,88 2 0353 -- edieresis
-char235 "
-`i 278,750,0,98,-19,90 2 0354 -- igrave
-char236 "
-'i 278,750,0,260,-19,90 2 0355 -- iacute
-char237 "
-^i 278,750,0,216,-19,90 2 0356 -- icircumflex
-char238 "
-:i 278,729,0,227,-19,90 2 0357 -- idieresis
-char239 "
-Sd 611,737,14,109,-32,90 2 0360 -- eth
-char240 "
-~n 611,737,0,85,-15,85 2 0361 -- ntilde
-char241 "
-`o 611,750,14,82,-32,82 2 0362 -- ograve
-char242 "
-'o 611,750,14,93,-32,90 2 0363 -- oacute
-char243 "
-^o 611,750,14,82,-32,82 2 0364 -- ocircumflex
-char244 "
-~o 611,737,14,85,-32,85 2 0365 -- otilde
-char245 "
-:o 611,729,14,82,-32,82 2 0366 -- odieresis
-char246 "
-char247 584,548,42,76,-32,76 0 0367 -- divide
-/o 611,560,29,140,28,90 0 0370 -- oslash
-char248 "
-`u 611,750,14,97,-48,90 2 0371 -- ugrave
-char249 "
-'u 611,750,14,97,-48,90 2 0372 -- uacute
-char250 "
-^u 611,750,14,97,-48,90 2 0373 -- ucircumflex
-char251 "
-:u 611,729,14,97,-48,90 2 0374 -- udieresis
-char252 "
-'y 556,750,214,146,8,90 3 0375 -- yacute
-char253 "
-Tp 611,718,208,84,32,84 3 0376 -- thorn
-char254 "
-:y 556,729,214,146,8,90 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HI b/contrib/groff/devps/HI
deleted file mode 100644
index 1846122..0000000
--- a/contrib/groff/devps/HI
+++ /dev/null
@@ -1,630 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-char248 z -55
-/o y -70
-char248 y -70
-/o x -85
-char248 x -85
-/o w -70
-char248 w -70
-/o v -70
-char248 v -70
-/o u -55
-char248 u -55
-/o t -55
-char248 t -55
-/o s -55
-char248 s -55
-/o r -55
-char248 r -55
-/o q -55
-char248 q -55
-/o . -95
-char248 . -95
-/o p -55
-char248 p -55
-/o o -55
-char248 o -55
-/o n -55
-char248 n -55
-/o m -55
-char248 m -55
-/o l -55
-char248 l -55
-/o k -55
-char248 k -55
-/o j -55
-char248 j -55
-/o i -55
-char248 i -55
-/o h -55
-char248 h -55
-/o g -55
-char248 g -55
-/o f -55
-char248 f -55
-/o e -55
-char248 e -55
-/o d -55
-char248 d -55
-/o , -95
-char248 , -95
-/o c -55
-char248 c -55
-/o b -55
-char248 b -55
-/o a -55
-char248 a -55
-p y -30
-p . -35
-p , -35
-. ' -100
-. cq -100
-. rq -100
-` ` -57
-` oq -57
-oq ` -57
-oq oq -57
-' 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
-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 0000 -- asciicircum
-ti 584,326,0,46,-61,46 0 0001 -- asciitilde
-vS 667,929,19,96,-40,89 2 0002 -- Scaron
-vZ 611,929,0,180,27,89 2 0003 -- Zcaron
-vs 500,734,15,102,-13,89 2 0004 -- scaron
-vz 500,734,0,121,19,89 2 0005 -- zcaron
-:Y 667,901,0,189,-117,89 2 0006 -- Ydieresis
-tm 1000,718,0,106,-136,89 2 0007 -- trademark
-aq 191,718,0,144,-107,89 2 0010 -- quotesingle
-space 278 0 0040
-! 278,718,0,112,-40,89 2 0041 -- exclam
-" 355,718,0,133,-118,89 2 0042 -- quotedbl
-dq "
-# 556,688,0,125,-23,89 2 0043 -- numbersign
-sh "
-$ 556,775,115,111,-19,89 2 0044 -- dollar
-Do "
-% 889,703,19,50,-97,50 2 0045 -- percent
-& 667,718,15,30,-27,30 2 0046 -- ampersand
-' 222,718,0,138,-101,89 2 0047 -- quoteright
-cq "
-( 333,733,207,171,-58,89 3 0050 -- parenleft
-) 333,733,207,54,59,54 3 0051 -- parenright
-* 389,718,0,136,-115,89 2 0052 -- asterisk
-+ 584,505,0,72,-35,72 0 0053 -- plus
-, 278,106,147,0,-6 0 0054 -- comma
-- 333,322,0,74,-43,74 0 0055 -- hyphen
-hy "
-char173 "
-. 278,106,0,0,-37 0 0056 -- period
-/ 278,737,19,224,71,89 2 0057 -- slash
-sl "
-0 556,703,19,102,-43,89 2 0060 -- zero
-1 556,703,0,2,-157,2 2 0061 -- one
-2 556,703,0,111,24,89 2 0062 -- two
-3 556,703,19,104,-25,89 2 0063 -- three
-4 556,703,0,70,-11,70 2 0064 -- four
-5 556,688,19,115,-18,89 2 0065 -- five
-6 556,703,19,109,-41,89 2 0066 -- six
-7 556,688,0,163,-87,89 2 0067 -- seven
-8 556,703,19,101,-24,89 2 0070 -- eight
-9 556,703,19,103,-32,89 2 0071 -- nine
-: 278,516,0,73,-37,73 0 0072 -- colon
-; 278,516,147,73,-6,73 0 0073 -- semicolon
-< 584,495,0,107,-44,89 0 0074 -- less
-= 584,390,0,94,-13,89 0 0075 -- equal
-> 584,495,0,63,0,63 0 0076 -- greater
-? 556,727,0,104,-111,89 2 0077 -- question
-@ 1015,737,19,0,-165 2 0100 -- at
-at "
-A 667,718,0,37,36,37 2 0101 -- A
-B 667,718,0,95,-24,89 2 0102 -- B
-C 722,737,19,110,-58,89 2 0103 -- C
-D 722,718,0,92,-31,89 2 0104 -- D
-E 667,718,0,145,-36,89 2 0105 -- E
-F 611,718,0,175,-36,89 2 0106 -- F
-G 778,737,19,71,-61,71 2 0107 -- G
-H 722,718,0,127,-27,89 2 0110 -- H
-I 278,718,0,113,-41,89 2 0111 -- I
-J 500,718,19,131,3,89 2 0112 -- J
-K 667,718,0,191,-26,89 2 0113 -- K
-L 556,718,0,49,-26,49 2 0114 -- L
-M 833,718,0,131,-23,89 2 0115 -- M
-N 722,718,0,127,-26,89 2 0116 -- N
-O 778,737,19,98,-55,89 2 0117 -- O
-P 667,718,0,120,-36,89 2 0120 -- P
-Q 778,737,56,98,-55,89 2 0121 -- Q
-R 722,718,0,101,-38,89 2 0122 -- R
-S 667,737,19,96,-40,89 2 0123 -- S
-T 611,718,0,189,-98,89 2 0124 -- T
-U 722,718,19,125,-73,89 2 0125 -- U
-V 667,718,0,183,-123,89 2 0126 -- V
-W 944,718,0,187,-119,89 2 0127 -- W
-X 667,718,0,173,31,89 2 0130 -- X
-Y 667,718,0,189,-117,89 2 0131 -- Y
-Z 611,718,0,180,27,89 2 0132 -- Z
-[ 278,722,196,175,29,89 2 0133 -- bracketleft
-lB "
-\ 278,737,19,63,-90,63 2 0134 -- backslash
-rs "
-] 278,722,196,140,64,89 2 0135 -- bracketright
-rB "
-a^ 333,734,0,155,-97,89 2 0136 -- circumflex
-^ "
-_ 556,0,125,34,77,34 0 0137 -- underscore
-` 222,725,0,151,-115,89 2 0140 -- quoteleft
-oq "
-a 556,538,15,53,-11,53 0 0141 -- a
-b 556,718,15,78,-8,78 2 0142 -- b
-c 500,538,15,103,-24,89 0 0143 -- c
-d 556,718,15,146,-34,89 2 0144 -- d
-e 556,538,15,72,-34,72 0 0145 -- e
-f 278,728,0,188,-36,89 2 0146 -- f
-g 556,538,220,104,8,89 1 0147 -- g
-h 556,718,0,67,-15,67 2 0150 -- h
-i 222,718,0,136,-17,89 2 0151 -- i
-j 222,718,210,136,110,89 3 0152 -- j
-k 500,718,0,150,-17,89 2 0153 -- k
-l 222,718,0,136,-17,89 2 0154 -- l
-m 833,538,0,69,-15,69 0 0155 -- m
-n 556,538,0,67,-15,67 0 0156 -- n
-o 556,538,14,79,-33,79 0 0157 -- o
-p 556,538,207,78,36,78 1 0160 -- p
-q 556,538,207,99,-34,89 1 0161 -- q
-r 333,538,0,163,-27,89 0 0162 -- r
-s 500,538,15,79,-13,79 0 0163 -- s
-t 278,669,7,140,-52,89 2 0164 -- t
-u 556,523,15,94,-44,89 0 0165 -- u
-v 500,523,0,153,-69,89 0 0166 -- v
-w 722,523,0,148,-75,89 0 0167 -- w
-x 500,523,0,144,39,89 0 0170 -- x
-y 500,523,214,150,35,89 1 0171 -- y
-z 500,523,0,121,19,89 0 0172 -- z
-lC 334,722,196,161,-42,89 2 0173 -- braceleft
-{ "
-ba 260,737,19,114,-40,89 2 0174 -- bar
-| "
-rC 334,722,196,70,50,70 2 0175 -- braceright
-} "
-a~ 333,722,0,207,-75,89 2 0176 -- tilde
-~ "
-bq 222,106,149,8,29,8 0 0200 -- quotesinglbase
-Fo 556,446,0,48,-96,48 0 0201 -- guillemotleft
-char171 "
-Fc 556,446,0,22,-70,22 0 0202 -- guillemotright
-char187 "
-bu 350,517,0,113,-41,89 0 0203 -- bullet
-Fn 556,737,207,148,102,89 3 0204 -- florin
-f/ 167,703,19,365,220,89 2 0205 -- fraction
-%0 1000,703,19,79,-38,79 2 0206 -- perthousand
-dg 556,718,159,116,-85,89 2 0207 -- dagger
-dd 556,718,159,117,-2,89 2 0210 -- daggerdbl
-en 556,313,0,117,-1,89 0 0211 -- endash
-em 1000,313,0,117,-1,89 0 0212 -- emdash
-fi 500,728,0,137,-36,89 2 0214 -- fi
-fl 500,728,0,135,-36,89 2 0215 -- fl
-.i 278,523,0,66,-45,66 0 0220 -- dotlessi
-ga 333,734,0,54,-120,54 2 0222 -- grave
-a" 333,734,0,282,-107,89 2 0223 -- hungarumlaut
-a. 333,706,0,79,-199,79 2 0224 -- dotaccent
-ab 333,731,0,193,-117,89 2 0225 -- breve
-ah 333,734,0,185,-127,89 2 0226 -- caron
-ao 333,756,0,119,-164,89 2 0227 -- ring
-ho 333,0,225,0,7 1 0230 -- ogonek
-lq 333,725,0,178,-88,89 2 0231 -- quotedblleft
-rq 333,718,0,165,-74,89 2 0232 -- quotedblright
-oe 944,538,15,70,-33,70 0 0233 -- oe
-/l 222,718,0,175,9,89 2 0234 -- lslash
-Bq 333,106,149,35,56,35 0 0235 -- quotedblbase
-OE 1000,737,19,166,-48,89 2 0236 -- OE
-/L 556,718,0,49,9,49 2 0237 -- Lslash
-r! 333,523,195,43,-27,43 0 0241 -- exclamdown
-char161 "
-ct 556,623,115,78,-45,78 0 0242 -- cent
-char162 "
-Po 556,718,16,128,1,89 2 0243 -- sterling
-char163 "
-Cs 556,603,0,140,-10,89 0 0244 -- currency
-char164 "
-Ye 556,688,0,193,-31,89 2 0245 -- yen
-char165 "
-bb 260,737,19,114,-40,89 2 0246 -- brokenbar
-char166 "
-sc 556,737,191,78,-26,78 2 0247 -- section
-char167 "
-ad 333,706,0,160,-118,89 2 0250 -- dieresis
-char168 "
-co 737,737,19,150,-4,89 2 0251 -- copyright
-char169 "
-Of 370,737,0,129,-50,89 2 0252 -- ordfeminine
-char170 "
-fo 333,446,0,57,-87,57 0 0253 -- guilsinglleft
-no 584,390,0,94,-56,89 0 0254 -- logicalnot
-char172 "
-\- 584,289,0,72,-35,72 0 0255 -- minus
-rg 737,737,19,150,-4,89 2 0256 -- registered
-char174 "
-a- 333,684,0,185,-93,89 2 0257 -- macron
-char175 "
-de 400,703,0,118,-119,89 2 0260 -- degree
-char176 "
-char177 584,506,0,84,11,84 0 0261 -- plusminus
-S2 333,703,0,166,-14,89 2 0262 -- twosuperior
-char178 "
-S3 333,703,0,153,-40,89 2 0263 -- threesuperior
-char179 "
-aa 333,734,0,192,-198,89 2 0264 -- acute
-char180 "
-char181 556,523,207,94,26,89 1 0265 -- mu
-ps 537,718,173,163,-76,89 2 0266 -- paragraph
-char182 "
-pc 278,315,0,29,-79,29 0 0267 -- periodcentered
-char183 "
-ac 333,0,225,0,48 1 0270 -- cedilla
-char184 "
-S1 333,703,0,88,-116,88 2 0271 -- onesuperior
-char185 "
-Om 365,737,0,153,-50,89 2 0272 -- ordmasculine
-char186 "
-fc 333,446,0,31,-61,31 0 0273 -- guilsinglright
-14 834,703,19,18,-100,18 2 0274 -- onequarter
-char188 "
-12 834,703,19,55,-64,55 2 0275 -- onehalf
-char189 "
-34 834,703,19,77,-80,77 2 0276 -- threequarters
-char190 "
-r? 611,525,201,0,-35 0 0277 -- questiondown
-char191 "
-`A 667,929,0,37,36,37 2 0300 -- Agrave
-char192 "
-'A 667,929,0,66,36,66 2 0301 -- Aacute
-char193 "
-^A 667,929,0,37,36,37 2 0302 -- Acircumflex
-char194 "
-~A 667,917,0,82,36,82 2 0303 -- Atilde
-char195 "
-:A 667,901,0,37,36,37 2 0304 -- Adieresis
-char196 "
-oA 667,931,0,37,36,37 2 0305 -- Aring
-char197 "
-AE 1000,718,0,147,42,89 2 0306 -- AE
-char198 "
-,C 722,737,225,110,-58,89 3 0307 -- Ccedilla
-char199 "
-`E 667,929,0,145,-36,89 2 0310 -- Egrave
-char200 "
-'E 667,929,0,145,-36,89 2 0311 -- Eacute
-char201 "
-^E 667,929,0,145,-36,89 2 0312 -- Ecircumflex
-char202 "
-:E 667,901,0,145,-36,89 2 0313 -- Edieresis
-char203 "
-`I 278,929,0,123,-41,89 2 0314 -- Igrave
-char204 "
-'I 278,929,0,261,-41,89 2 0315 -- Iacute
-char205 "
-^I 278,929,0,224,-41,89 2 0316 -- Icircumflex
-char206 "
-:I 278,901,0,230,-41,89 2 0317 -- Idieresis
-char207 "
--D 722,718,0,92,-19,89 2 0320 -- Eth
-char208 "
-~N 722,917,0,127,-26,89 2 0321 -- Ntilde
-char209 "
-`O 778,929,19,98,-55,89 2 0322 -- Ograve
-char210 "
-'O 778,929,19,98,-55,89 2 0323 -- Oacute
-char211 "
-^O 778,929,19,98,-55,89 2 0324 -- Ocircumflex
-char212 "
-~O 778,917,19,98,-55,89 2 0325 -- Otilde
-char213 "
-:O 778,901,19,98,-55,89 2 0326 -- Odieresis
-char214 "
-char215 584,506,0,108,0,89 0 0327 -- multiply
-/O 778,737,19,162,7,89 2 0330 -- Oslash
-char216 "
-`U 722,929,19,125,-73,89 2 0331 -- Ugrave
-char217 "
-'U 722,929,19,125,-73,89 2 0332 -- Uacute
-char218 "
-^U 722,929,19,125,-73,89 2 0333 -- Ucircumflex
-char219 "
-:U 722,901,19,125,-73,89 2 0334 -- Udieresis
-char220 "
-'Y 667,929,0,189,-117,89 2 0335 -- Yacute
-char221 "
-TP 667,718,0,95,-36,89 2 0336 -- Thorn
-char222 "
-ss 611,728,15,97,-17,89 2 0337 -- germandbls
-char223 "
-`a 556,734,15,53,-11,53 2 0340 -- agrave
-char224 "
-'a 556,734,15,81,-11,81 2 0341 -- aacute
-char225 "
-^a 556,734,15,53,-11,53 2 0342 -- acircumflex
-char226 "
-~a 556,722,15,86,-11,86 2 0343 -- atilde
-char227 "
-:a 556,706,15,53,-11,53 2 0344 -- adieresis
-char228 "
-oa 556,756,15,53,-11,53 2 0345 -- aring
-char229 "
-ae 889,538,15,70,-11,70 0 0346 -- ae
-char230 "
-,c 500,538,225,103,-24,89 1 0347 -- ccedilla
-char231 "
-`e 556,734,15,72,-34,72 2 0350 -- egrave
-char232 "
-'e 556,734,15,81,-34,81 2 0351 -- eacute
-char233 "
-^e 556,734,15,72,-34,72 2 0352 -- ecircumflex
-char234 "
-:e 556,706,15,72,-34,72 2 0353 -- edieresis
-char235 "
-`i 278,734,0,82,-45,82 2 0354 -- igrave
-char236 "
-'i 278,734,0,220,-45,89 2 0355 -- iacute
-char237 "
-^i 278,734,0,183,-45,89 2 0356 -- icircumflex
-char238 "
-:i 278,706,0,188,-45,89 2 0357 -- idieresis
-char239 "
-Sd 556,737,15,111,-31,89 2 0360 -- eth
-char240 "
-~n 556,722,0,86,-15,86 2 0361 -- ntilde
-char241 "
-`o 556,734,14,79,-33,79 2 0362 -- ograve
-char242 "
-'o 556,734,14,81,-33,81 2 0363 -- oacute
-char243 "
-^o 556,734,14,79,-33,79 2 0364 -- ocircumflex
-char244 "
-~o 556,722,14,96,-33,89 2 0365 -- otilde
-char245 "
-:o 556,706,14,79,-33,79 2 0366 -- odieresis
-char246 "
-char247 584,524,19,72,-35,72 0 0367 -- divide
-/o 611,545,22,86,21,86 0 0370 -- oslash
-char248 "
-`u 556,734,15,94,-44,89 2 0371 -- ugrave
-char249 "
-'u 556,734,15,94,-44,89 2 0372 -- uacute
-char250 "
-^u 556,734,15,94,-44,89 2 0373 -- ucircumflex
-char251 "
-:u 556,706,15,94,-44,89 2 0374 -- udieresis
-char252 "
-'y 500,734,214,150,35,89 3 0375 -- yacute
-char253 "
-Tp 556,718,207,78,36,78 3 0376 -- thorn
-char254 "
-:y 500,706,214,150,35,89 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HNB b/contrib/groff/devps/HNB
deleted file mode 100644
index ded4815..0000000
--- a/contrib/groff/devps/HNB
+++ /dev/null
@@ -1,561 +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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -97
-. cq -97
-. rq -97
-` ` -37
-` oq -37
-oq ` -37
-oq oq -37
-' v -15
-cq v -15
-' 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 char173 -15
-r g -11
-r d -15
-r , -48
-r c -15
-s w -11
-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 0000 -- asciicircum
-ti 479,343 0 0001 -- asciitilde
-vS 547,936,19 2 0002 -- Scaron
-vZ 501,936 2 0003 -- Zcaron
-vs 456,750,14 2 0004 -- scaron
-vz 410,750 2 0005 -- zcaron
-:Y 547,915 2 0006 -- Ydieresis
-tm 820,718 2 0007 -- trademark
-aq 195,718 2 0010 -- quotesingle
-space 228 0 0040
-! 273,718 2 0041 -- exclam
-" 389,718 2 0042 -- quotedbl
-dq "
-# 456,698 2 0043 -- numbersign
-sh "
-$ 456,775,115 2 0044 -- dollar
-Do "
-% 729,710,19 2 0045 -- percent
-& 592,718,19 2 0046 -- ampersand
-' 228,718 2 0047 -- quoteright
-cq "
-( 273,734,208 3 0050 -- parenleft
-) 273,734,208 3 0051 -- parenright
-* 319,718 2 0052 -- asterisk
-+ 479,506 0 0053 -- plus
-, 228,146,168 0 0054 -- comma
-- 273,345 0 0055 -- hyphen
-hy "
-char173 "
-. 228,146 0 0056 -- period
-/ 228,737,19 2 0057 -- slash
-sl "
-0 456,710,19 2 0060 -- zero
-1 456,710 2 0061 -- one
-2 456,710 2 0062 -- two
-3 456,710,19 2 0063 -- three
-4 456,710 2 0064 -- four
-5 456,698,19 2 0065 -- five
-6 456,710,19 2 0066 -- six
-7 456,698 2 0067 -- seven
-8 456,710,19 2 0070 -- eight
-9 456,710,19 2 0071 -- nine
-: 273,512 0 0072 -- colon
-; 273,512,168 0 0073 -- semicolon
-< 479,514,8 0 0074 -- less
-= 479,419 0 0075 -- equal
-> 479,514,8 0 0076 -- greater
-? 501,727 2 0077 -- question
-@ 800,737,19 2 0100 -- at
-at "
-A 592,718 2 0101 -- A
-B 592,718 2 0102 -- B
-C 592,737,19 2 0103 -- C
-D 592,718 2 0104 -- D
-E 547,718 2 0105 -- E
-F 501,718 2 0106 -- F
-G 638,737,19 2 0107 -- G
-H 592,718 2 0110 -- H
-I 228,718 2 0111 -- I
-J 456,718,18 2 0112 -- J
-K 592,718 2 0113 -- K
-L 501,718 2 0114 -- L
-M 683,718 2 0115 -- M
-N 592,718 2 0116 -- N
-O 638,737,19 2 0117 -- O
-P 547,718 2 0120 -- P
-Q 638,737,52 2 0121 -- Q
-R 592,718 2 0122 -- R
-S 547,737,19 2 0123 -- S
-T 501,718 2 0124 -- T
-U 592,718,19 2 0125 -- U
-V 547,718 2 0126 -- V
-W 774,718 2 0127 -- W
-X 547,718 2 0130 -- X
-Y 547,718 2 0131 -- Y
-Z 501,718 2 0132 -- Z
-[ 273,722,196 2 0133 -- bracketleft
-lB "
-\ 228,737,19 2 0134 -- backslash
-rs "
-] 273,722,196 2 0135 -- bracketright
-rB "
-a^ 273,750 2 0136 -- circumflex
-^ "
-_ 456,0,125 0 0137 -- underscore
-` 228,727 2 0140 -- quoteleft
-oq "
-a 456,546,14 0 0141 -- a
-b 501,718,14 2 0142 -- b
-c 456,546,14 0 0143 -- c
-d 501,718,14 2 0144 -- d
-e 456,546,14 0 0145 -- e
-f 273,727 2 0146 -- f
-g 501,546,217 1 0147 -- g
-h 501,718 2 0150 -- h
-i 228,725 2 0151 -- i
-j 228,725,214 3 0152 -- j
-k 456,718 2 0153 -- k
-l 228,718 2 0154 -- l
-m 729,546 0 0155 -- m
-n 501,546 0 0156 -- n
-o 501,546,14 0 0157 -- o
-p 501,546,207 1 0160 -- p
-q 501,546,207 1 0161 -- q
-r 319,546 0 0162 -- r
-s 456,546,14 0 0163 -- s
-t 273,676,6 2 0164 -- t
-u 501,532,14 0 0165 -- u
-v 456,532 0 0166 -- v
-w 638,532 0 0167 -- w
-x 456,532 0 0170 -- x
-y 456,532,214 1 0171 -- y
-z 410,532 0 0172 -- z
-lC 319,722,196 2 0173 -- braceleft
-{ "
-ba 230,737,19 2 0174 -- bar
-| "
-rC 319,722,196 2 0175 -- braceright
-} "
-a~ 273,737 2 0176 -- tilde
-~ "
-bq 228,127,146 0 0200 -- quotesinglbase
-Fo 456,484 0 0201 -- guillemotleft
-char171 "
-Fc 456,484 0 0202 -- guillemotright
-char187 "
-bu 287,524 0 0203 -- bullet
-Fn 456,737,210 3 0204 -- florin
-f/ 137,710,19 2 0205 -- fraction
-%0 820,710,19 2 0206 -- perthousand
-dg 456,718,171 2 0207 -- dagger
-dd 456,718,171 2 0210 -- daggerdbl
-en 456,333 0 0211 -- endash
-em 820,333 0 0212 -- emdash
-fi 501,727 2 0214 -- fi
-fl 501,727 2 0215 -- fl
-.i 228,532 0 0220 -- dotlessi
-ga 273,750 2 0222 -- grave
-a" 273,750 2 0223 -- hungarumlaut
-a. 273,729 2 0224 -- dotaccent
-ab 273,750 2 0225 -- breve
-ah 273,750 2 0226 -- caron
-ao 273,776 2 0227 -- ring
-ho 273,0,228 1 0230 -- ogonek
-lq 410,727 2 0231 -- quotedblleft
-rq 410,718 2 0232 -- quotedblright
-oe 774,546,14 0 0233 -- oe
-/l 228,718 2 0234 -- lslash
-Bq 410,127,146 0 0235 -- quotedblbase
-OE 820,737,19 2 0236 -- OE
-/L 501,718 2 0237 -- Lslash
-r! 273,532,186 0 0241 -- exclamdown
-char161 "
-ct 456,628,118 0 0242 -- cent
-char162 "
-Po 456,718,16 2 0243 -- sterling
-char163 "
-Cs 456,636 0 0244 -- currency
-char164 "
-Ye 456,698 2 0245 -- yen
-char165 "
-bb 230,737,19 2 0246 -- brokenbar
-char166 "
-sc 456,727,184 2 0247 -- section
-char167 "
-ad 273,729 2 0250 -- dieresis
-char168 "
-co 604,737,19 2 0251 -- copyright
-char169 "
-Of 303,737 2 0252 -- ordfeminine
-char170 "
-fo 273,484 0 0253 -- guilsinglleft
-no 479,419 0 0254 -- logicalnot
-char172 "
-\- 479,309 0 0255 -- minus
-rg 604,737,19 2 0256 -- registered
-char174 "
-a- 273,678 2 0257 -- macron
-char175 "
-de 328,712 2 0260 -- degree
-char176 "
-char177 479,506 0 0261 -- plusminus
-S2 273,710 2 0262 -- twosuperior
-char178 "
-S3 273,710 2 0263 -- threesuperior
-char179 "
-aa 273,750 2 0264 -- acute
-char180 "
-char181 501,532,207 1 0265 -- mu
-ps 456,700,191 2 0266 -- paragraph
-char182 "
-pc 228,334 0 0267 -- periodcentered
-char183 "
-ac 273,0,228 1 0270 -- cedilla
-char184 "
-S1 273,710 2 0271 -- onesuperior
-char185 "
-Om 299,737 2 0272 -- ordmasculine
-char186 "
-fc 273,484 0 0273 -- guilsinglright
-14 684,710,19 2 0274 -- onequarter
-char188 "
-12 684,710,19 2 0275 -- onehalf
-char189 "
-34 684,710,19 2 0276 -- threequarters
-char190 "
-r? 501,532,195 0 0277 -- questiondown
-char191 "
-`A 592,936 2 0300 -- Agrave
-char192 "
-'A 592,936 2 0301 -- Aacute
-char193 "
-^A 592,936 2 0302 -- Acircumflex
-char194 "
-~A 592,923 2 0303 -- Atilde
-char195 "
-:A 592,915 2 0304 -- Adieresis
-char196 "
-oA 592,962 2 0305 -- Aring
-char197 "
-AE 820,718 2 0306 -- AE
-char198 "
-,C 592,737,228 3 0307 -- Ccedilla
-char199 "
-`E 547,936 2 0310 -- Egrave
-char200 "
-'E 547,936 2 0311 -- Eacute
-char201 "
-^E 547,936 2 0312 -- Ecircumflex
-char202 "
-:E 547,915 2 0313 -- Edieresis
-char203 "
-`I 228,936 2 0314 -- Igrave
-char204 "
-'I 228,936 2 0315 -- Iacute
-char205 "
-^I 228,936 2 0316 -- Icircumflex
-char206 "
-:I 228,915 2 0317 -- Idieresis
-char207 "
--D 592,718 2 0320 -- Eth
-char208 "
-~N 592,923 2 0321 -- Ntilde
-char209 "
-`O 638,936,19 2 0322 -- Ograve
-char210 "
-'O 638,936,19 2 0323 -- Oacute
-char211 "
-^O 638,936,19 2 0324 -- Ocircumflex
-char212 "
-~O 638,923,19 2 0325 -- Otilde
-char213 "
-:O 638,915,19 2 0326 -- Odieresis
-char214 "
-char215 479,505 0 0327 -- multiply
-/O 638,745,27 2 0330 -- Oslash
-char216 "
-`U 592,936,19 2 0331 -- Ugrave
-char217 "
-'U 592,936,19 2 0332 -- Uacute
-char218 "
-^U 592,936,19 2 0333 -- Ucircumflex
-char219 "
-:U 592,915,19 2 0334 -- Udieresis
-char220 "
-'Y 547,936 2 0335 -- Yacute
-char221 "
-TP 547,718 2 0336 -- Thorn
-char222 "
-ss 501,731,14 2 0337 -- germandbls
-char223 "
-`a 456,750,14 2 0340 -- agrave
-char224 "
-'a 456,750,14 2 0341 -- aacute
-char225 "
-^a 456,750,14 2 0342 -- acircumflex
-char226 "
-~a 456,737,14 2 0343 -- atilde
-char227 "
-:a 456,729,14 2 0344 -- adieresis
-char228 "
-oa 456,776,14 2 0345 -- aring
-char229 "
-ae 729,546,14 0 0346 -- ae
-char230 "
-,c 456,546,228 1 0347 -- ccedilla
-char231 "
-`e 456,750,14 2 0350 -- egrave
-char232 "
-'e 456,750,14 2 0351 -- eacute
-char233 "
-^e 456,750,14 2 0352 -- ecircumflex
-char234 "
-:e 456,729,14 2 0353 -- edieresis
-char235 "
-`i 228,750 2 0354 -- igrave
-char236 "
-'i 228,750 2 0355 -- iacute
-char237 "
-^i 228,750 2 0356 -- icircumflex
-char238 "
-:i 228,729 2 0357 -- idieresis
-char239 "
-Sd 501,737,14 2 0360 -- eth
-char240 "
-~n 501,737 2 0361 -- ntilde
-char241 "
-`o 501,750,14 2 0362 -- ograve
-char242 "
-'o 501,750,14 2 0363 -- oacute
-char243 "
-^o 501,750,14 2 0364 -- ocircumflex
-char244 "
-~o 501,737,14 2 0365 -- otilde
-char245 "
-:o 501,729,14 2 0366 -- odieresis
-char246 "
-char247 479,548,42 0 0367 -- divide
-/o 501,560,29 0 0370 -- oslash
-char248 "
-`u 501,750,14 2 0371 -- ugrave
-char249 "
-'u 501,750,14 2 0372 -- uacute
-char250 "
-^u 501,750,14 2 0373 -- ucircumflex
-char251 "
-:u 501,729,14 2 0374 -- udieresis
-char252 "
-'y 456,750,214 3 0375 -- yacute
-char253 "
-Tp 501,718,208 3 0376 -- thorn
-char254 "
-:y 456,729,214 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HNBI b/contrib/groff/devps/HNBI
deleted file mode 100644
index a5809e1..0000000
--- a/contrib/groff/devps/HNBI
+++ /dev/null
@@ -1,562 +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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -120
-. cq -120
-. rq -120
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' v -20
-cq v -20
-' 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 char173 -20
-r g -15
-r d -20
-r , -60
-r c -20
-s w -15
-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 0000 -- asciicircum
-ti 479,343,0,44,-44,44 0 0001 -- asciitilde
-vS 547,936,19,91,-16,90 2 0002 -- Scaron
-vZ 501,936,0,153,30,90 2 0003 -- Zcaron
-vs 456,750,14,98,-2,90 2 0004 -- scaron
-vz 410,750,0,121,34,90 2 0005 -- zcaron
-:Y 547,915,0,164,-87,90 2 0006 -- Ydieresis
-tm 820,718,0,139,-96,90 2 0007 -- trademark
-aq 195,718,0,118,-85,90 2 0010 -- quotesingle
-space 228 0 0040
-! 273,718,0,102,-27,90 2 0041 -- exclam
-" 389,718,0,94,-108,90 2 0042 -- quotedbl
-dq "
-# 456,698,0,122,1,90 2 0043 -- numbersign
-sh "
-$ 456,775,115,104,-5,90 2 0044 -- dollar
-Do "
-% 729,710,19,60,-62,60 2 0045 -- percent
-& 592,718,19,58,-23,58 2 0046 -- ampersand
-' 228,718,0,119,-87,90 2 0047 -- quoteright
-cq "
-( 273,734,208,162,-12,90 3 0050 -- parenleft
-) 273,734,208,79,71,79 3 0051 -- parenright
-* 319,718,0,125,-70,90 2 0052 -- asterisk
-+ 479,506,0,71,-17,71 0 0053 -- plus
-, 228,146,168,23,27,23 0 0054 -- comma
-- 273,345,0,88,-10,88 0 0055 -- hyphen
-hy "
-char173 "
-. 228,146,0,23,-2,23 0 0056 -- period
-/ 228,737,19,205,80,90 2 0057 -- slash
-sl "
-0 456,710,19,100,-21,90 2 0060 -- zero
-1 456,710,0,28,-92,28 2 0061 -- one
-2 456,710,0,102,29,90 2 0062 -- two
-3 456,710,19,93,-4,90 2 0063 -- three
-4 456,710,0,84,0,84 2 0064 -- four
-5 456,698,19,116,-3,90 2 0065 -- five
-6 456,710,19,101,-20,90 2 0066 -- six
-7 456,698,0,149,-52,90 2 0067 -- seven
-8 456,710,19,99,-7,90 2 0070 -- eight
-9 456,710,19,98,-14,90 2 0071 -- nine
-: 273,512,0,65,-25,65 0 0072 -- colon
-; 273,512,168,65,4,65 0 0073 -- semicolon
-< 479,514,8,108,-17,90 0 0074 -- less
-= 479,419,0,90,2,90 0 0075 -- equal
-> 479,514,8,71,20,71 0 0076 -- greater
-? 501,727,0,99,-85,90 2 0077 -- question
-@ 800,737,19,32,-102,32 2 0100 -- at
-at "
-A 592,718,0,34,34,34 2 0101 -- A
-B 592,718,0,84,-12,84 2 0102 -- B
-C 592,737,19,105,-38,90 2 0103 -- C
-D 592,718,0,95,-12,90 2 0104 -- D
-E 547,718,0,123,-12,90 2 0105 -- E
-F 501,718,0,155,-12,90 2 0106 -- F
-G 638,737,19,82,-39,82 2 0107 -- G
-H 592,718,0,117,-8,90 2 0110 -- H
-I 228,718,0,123,-2,90 2 0111 -- I
-J 456,718,18,116,1,90 2 0112 -- J
-K 592,718,0,161,-21,90 2 0113 -- K
-L 501,718,0,50,-12,50 2 0114 -- L
-M 683,718,0,119,-7,90 2 0115 -- M
-N 592,718,0,119,-7,90 2 0116 -- N
-O 638,737,19,87,-38,87 2 0117 -- O
-P 547,718,0,108,-12,90 2 0120 -- P
-Q 638,737,52,87,-38,87 2 0121 -- Q
-R 592,718,0,96,-12,90 2 0122 -- R
-S 547,737,19,91,-16,90 2 0123 -- S
-T 501,718,0,164,-64,90 2 0124 -- T
-U 592,718,19,117,-46,90 2 0125 -- U
-V 547,718,0,159,-91,90 2 0126 -- V
-W 774,718,0,163,-88,90 2 0127 -- W
-X 547,718,0,151,39,90 2 0130 -- X
-Y 547,718,0,164,-87,90 2 0131 -- Y
-Z 501,718,0,153,30,90 2 0132 -- Z
-[ 273,722,196,156,33,90 2 0133 -- bracketleft
-lB "
-\ 228,737,19,74,-51,74 2 0134 -- backslash
-rs "
-] 273,722,196,124,64,90 2 0135 -- bracketright
-rB "
-a^ 273,750,0,164,-47,90 2 0136 -- circumflex
-^ "
-_ 456,0,125,37,72,37 0 0137 -- underscore
-` 228,727,0,118,-86,90 2 0140 -- quoteleft
-oq "
-a 456,546,14,72,5,72 0 0141 -- a
-b 501,718,14,78,0,78 2 0142 -- b
-c 456,546,14,85,-15,85 0 0143 -- c
-d 501,718,14,126,-17,90 2 0144 -- d
-e 456,546,14,80,-8,80 0 0145 -- e
-f 273,727,0,162,-21,90 2 0146 -- f
-g 501,546,217,95,19,90 1 0147 -- g
-h 501,718,0,65,-3,65 2 0150 -- h
-i 228,725,0,120,-7,90 2 0151 -- i
-j 228,725,214,120,85,90 3 0152 -- j
-k 456,718,0,143,-7,90 2 0153 -- k
-l 228,718,0,119,-7,90 2 0154 -- l
-m 729,546,0,67,-2,67 0 0155 -- m
-n 501,546,0,65,-3,65 0 0156 -- n
-o 501,546,14,76,-17,76 0 0157 -- o
-p 501,546,207,78,35,78 1 0160 -- p
-q 501,546,207,94,-16,90 1 0161 -- q
-r 319,546,0,132,-2,90 0 0162 -- r
-s 456,546,14,73,-2,73 0 0163 -- s
-t 273,676,6,123,-32,90 2 0164 -- t
-u 501,532,14,89,-30,89 0 0165 -- u
-v 456,532,0,132,-53,90 0 0166 -- v
-w 638,532,0,135,-51,90 0 0167 -- w
-x 456,532,0,125,38,90 0 0170 -- x
-y 456,532,214,129,16,90 1 0171 -- y
-z 410,532,0,118,34,90 0 0172 -- z
-lC 319,722,196,156,-27,90 2 0173 -- braceleft
-{ "
-ba 230,737,19,109,-16,90 2 0174 -- bar
-| "
-rC 319,722,196,64,64,64 2 0175 -- braceright
-} "
-a~ 273,737,0,192,-42,90 2 0176 -- tilde
-~ "
-bq 228,127,146,16,16,16 0 0200 -- quotesinglbase
-Fo 456,484,0,62,-61,62 0 0201 -- guillemotleft
-char171 "
-Fc 456,484,0,37,-35,37 0 0202 -- guillemotright
-char187 "
-bu 287,524,0,108,-18,90 0 0203 -- bullet
-Fn 456,737,210,142,91,90 3 0204 -- florin
-f/ 137,710,19,312,193,90 2 0205 -- fraction
-%0 820,710,19,81,-12,81 2 0206 -- perthousand
-dg 456,718,171,107,-47,90 2 0207 -- dagger
-dd 456,718,171,109,12,90 2 0210 -- daggerdbl
-en 456,333,0,108,10,90 0 0211 -- endash
-em 820,333,0,108,10,90 0 0212 -- emdash
-fi 501,727,0,120,-21,90 2 0214 -- fi
-fl 501,727,0,119,-21,90 2 0215 -- fl
-.i 228,532,0,86,-7,86 0 0220 -- dotlessi
-ga 273,750,0,67,-62,67 2 0222 -- grave
-a" 273,750,0,306,-63,90 2 0223 -- hungarumlaut
-a. 273,729,0,93,-142,90 2 0224 -- dotaccent
-ab 273,750,0,182,-78,90 2 0225 -- breve
-ah 273,750,0,189,-73,90 2 0226 -- caron
-ao 273,776,0,121,-114,90 2 0227 -- ring
-ho 273,0,228,0,17 1 0230 -- ogonek
-lq 410,727,0,122,-82,90 2 0231 -- quotedblleft
-rq 410,718,0,123,-82,90 2 0232 -- quotedblright
-oe 774,546,14,77,-17,77 0 0233 -- oe
-/l 228,718,0,156,17,90 2 0234 -- lslash
-Bq 410,127,146,20,21,20 0 0235 -- quotedblbase
-OE 820,737,19,143,-31,90 2 0236 -- OE
-/L 501,718,0,50,22,50 2 0237 -- Lslash
-r! 273,532,186,67,9,67 0 0241 -- exclamdown
-char161 "
-ct 456,628,118,85,-15,85 0 0242 -- cent
-char162 "
-Po 456,718,16,114,9,90 2 0243 -- sterling
-char163 "
-Cs 456,636,0,152,28,90 0 0244 -- currency
-char164 "
-Ye 456,698,0,179,1,90 2 0245 -- yen
-char165 "
-bb 230,737,19,109,-16,90 2 0246 -- brokenbar
-char166 "
-sc 456,727,184,85,0,85 2 0247 -- section
-char167 "
-ad 273,729,0,172,-62,90 2 0250 -- dieresis
-char168 "
-co 604,737,19,131,4,90 2 0251 -- copyright
-char169 "
-Of 303,737,0,128,-25,90 2 0252 -- ordfeminine
-char170 "
-fo 273,484,0,66,-56,66 0 0253 -- guilsinglleft
-no 479,419,0,90,-36,90 0 0254 -- logicalnot
-char172 "
-\- 479,309,0,71,-17,71 0 0255 -- minus
-rg 604,737,19,130,5,90 2 0256 -- registered
-char174 "
-a- 273,678,0,173,-50,90 2 0257 -- macron
-char175 "
-de 328,712,0,105,-93,90 2 0260 -- degree
-char176 "
-char177 479,506,0,83,17,83 0 0261 -- plusminus
-S2 273,710,0,145,-7,90 2 0262 -- twosuperior
-char178 "
-S3 273,710,0,138,-25,90 2 0263 -- threesuperior
-char179 "
-aa 273,750,0,200,-144,90 2 0264 -- acute
-char180 "
-char181 501,532,207,89,32,89 1 0265 -- mu
-ps 456,700,191,158,-30,90 2 0266 -- paragraph
-char182 "
-pc 228,334,0,48,-40,48 0 0267 -- periodcentered
-char183 "
-ac 273,0,228,0,80 1 0270 -- cedilla
-char184 "
-S1 273,710,0,95,-71,90 2 0271 -- onesuperior
-char185 "
-Om 299,737,0,149,-25,90 2 0272 -- ordmasculine
-char186 "
-fc 273,484,0,41,-31,41 0 0273 -- guilsinglright
-14 684,710,19,27,-58,27 2 0274 -- onequarter
-char188 "
-12 684,710,19,70,-58,70 2 0275 -- onehalf
-char189 "
-34 684,710,19,54,-32,54 2 0276 -- threequarters
-char190 "
-r? 501,532,195,8,6,8 0 0277 -- questiondown
-char191 "
-`A 592,936,0,34,34,34 2 0300 -- Agrave
-char192 "
-'A 592,936,0,73,34,73 2 0301 -- Aacute
-char193 "
-^A 592,936,0,37,34,37 2 0302 -- Acircumflex
-char194 "
-~A 592,923,0,66,34,66 2 0303 -- Atilde
-char195 "
-:A 592,915,0,46,34,46 2 0304 -- Adieresis
-char196 "
-oA 592,962,0,34,34,34 2 0305 -- Aring
-char197 "
-AE 820,718,0,132,46,90 2 0306 -- AE
-char198 "
-,C 592,737,228,105,-38,90 3 0307 -- Ccedilla
-char199 "
-`E 547,936,0,123,-12,90 2 0310 -- Egrave
-char200 "
-'E 547,936,0,123,-12,90 2 0311 -- Eacute
-char201 "
-^E 547,936,0,123,-12,90 2 0312 -- Ecircumflex
-char202 "
-:E 547,915,0,123,-12,90 2 0313 -- Edieresis
-char203 "
-`I 228,936,0,123,-2,90 2 0314 -- Igrave
-char204 "
-'I 228,936,0,255,-2,90 2 0315 -- Iacute
-char205 "
-^I 228,936,0,219,-2,90 2 0316 -- Icircumflex
-char206 "
-:I 228,915,0,227,-2,90 2 0317 -- Idieresis
-char207 "
--D 592,718,0,95,-1,90 2 0320 -- Eth
-char208 "
-~N 592,923,0,119,-7,90 2 0321 -- Ntilde
-char209 "
-`O 638,936,19,87,-38,87 2 0322 -- Ograve
-char210 "
-'O 638,936,19,87,-38,87 2 0323 -- Oacute
-char211 "
-^O 638,936,19,87,-38,87 2 0324 -- Ocircumflex
-char212 "
-~O 638,923,19,87,-38,87 2 0325 -- Otilde
-char213 "
-:O 638,915,19,87,-38,87 2 0326 -- Odieresis
-char214 "
-char215 479,505,0,91,3,90 0 0327 -- multiply
-/O 638,745,27,145,21,90 2 0330 -- Oslash
-char216 "
-`U 592,936,19,117,-46,90 2 0331 -- Ugrave
-char217 "
-'U 592,936,19,117,-46,90 2 0332 -- Uacute
-char218 "
-^U 592,936,19,117,-46,90 2 0333 -- Ucircumflex
-char219 "
-:U 592,915,19,117,-46,90 2 0334 -- Udieresis
-char220 "
-'Y 547,936,0,164,-87,90 2 0335 -- Yacute
-char221 "
-TP 547,718,0,91,-12,90 2 0336 -- Thorn
-char222 "
-ss 501,731,14,88,-7,88 2 0337 -- germandbls
-char223 "
-`a 456,750,14,72,5,72 2 0340 -- agrave
-char224 "
-'a 456,750,14,108,5,90 2 0341 -- aacute
-char225 "
-^a 456,750,14,72,5,72 2 0342 -- acircumflex
-char226 "
-~a 456,737,14,101,5,90 2 0343 -- atilde
-char227 "
-:a 456,729,14,81,5,81 2 0344 -- adieresis
-char228 "
-oa 456,776,14,72,5,72 2 0345 -- aring
-char229 "
-ae 729,546,14,78,4,78 0 0346 -- ae
-char230 "
-,c 456,546,228,85,-15,85 1 0347 -- ccedilla
-char231 "
-`e 456,750,14,80,-8,80 2 0350 -- egrave
-char232 "
-'e 456,750,14,108,-8,90 2 0351 -- eacute
-char233 "
-^e 456,750,14,80,-8,80 2 0352 -- ecircumflex
-char234 "
-:e 456,729,14,81,-8,81 2 0353 -- edieresis
-char235 "
-`i 228,750,0,90,-7,90 2 0354 -- igrave
-char236 "
-'i 228,750,0,222,-7,90 2 0355 -- iacute
-char237 "
-^i 228,750,0,186,-7,90 2 0356 -- icircumflex
-char238 "
-:i 228,729,0,195,-7,90 2 0357 -- idieresis
-char239 "
-Sd 501,737,14,98,-17,90 2 0360 -- eth
-char240 "
-~n 501,737,0,78,-3,78 2 0361 -- ntilde
-char241 "
-`o 501,750,14,76,-17,76 2 0362 -- ograve
-char242 "
-'o 501,750,14,86,-17,86 2 0363 -- oacute
-char243 "
-^o 501,750,14,76,-17,76 2 0364 -- ocircumflex
-char244 "
-~o 501,737,14,78,-17,78 2 0365 -- otilde
-char245 "
-:o 501,729,14,76,-17,76 2 0366 -- odieresis
-char246 "
-char247 479,548,42,71,-17,71 0 0367 -- divide
-/o 501,560,29,124,32,90 0 0370 -- oslash
-char248 "
-`u 501,750,14,89,-30,89 2 0371 -- ugrave
-char249 "
-'u 501,750,14,89,-30,89 2 0372 -- uacute
-char250 "
-^u 501,750,14,89,-30,89 2 0373 -- ucircumflex
-char251 "
-:u 501,729,14,89,-30,89 2 0374 -- udieresis
-char252 "
-'y 456,750,214,129,16,90 3 0375 -- yacute
-char253 "
-Tp 501,718,208,78,35,78 3 0376 -- thorn
-char254 "
-:y 456,729,214,129,16,90 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HNI b/contrib/groff/devps/HNI
deleted file mode 100644
index c9ab4ec..0000000
--- a/contrib/groff/devps/HNI
+++ /dev/null
@@ -1,630 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-char248 z -55
-/o y -70
-char248 y -70
-/o x -85
-char248 x -85
-/o w -70
-char248 w -70
-/o v -70
-char248 v -70
-/o u -55
-char248 u -55
-/o t -55
-char248 t -55
-/o s -55
-char248 s -55
-/o r -55
-char248 r -55
-/o q -55
-char248 q -55
-/o . -95
-char248 . -95
-/o p -55
-char248 p -55
-/o o -55
-char248 o -55
-/o n -55
-char248 n -55
-/o m -55
-char248 m -55
-/o l -55
-char248 l -55
-/o k -55
-char248 k -55
-/o j -55
-char248 j -55
-/o i -55
-char248 i -55
-/o h -55
-char248 h -55
-/o g -55
-char248 g -55
-/o f -55
-char248 f -55
-/o e -55
-char248 e -55
-/o d -55
-char248 d -55
-/o , -95
-char248 , -95
-/o c -55
-char248 c -55
-/o b -55
-char248 b -55
-/o a -55
-char248 a -55
-p y -30
-p . -35
-p , -35
-. ' -100
-. cq -100
-. rq -100
-` ` -57
-` oq -57
-oq ` -57
-oq oq -57
-' 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
-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 0000 -- asciicircum
-ti 479,326,0,47,-41,47 0 0001 -- asciitilde
-vS 547,929,19,87,-24,87 2 0002 -- Scaron
-vZ 501,929,0,156,31,89 2 0003 -- Zcaron
-vs 410,734,15,93,-2,89 2 0004 -- scaron
-vz 410,734,0,108,25,89 2 0005 -- zcaron
-:Y 547,901,0,164,-87,89 2 0006 -- Ydieresis
-tm 820,718,0,96,-102,89 2 0007 -- trademark
-aq 157,718,0,126,-79,89 2 0010 -- quotesingle
-space 228 0 0040
-! 228,718,0,100,-24,89 2 0041 -- exclam
-" 291,718,0,118,-88,89 2 0042 -- quotedbl
-dq "
-# 456,688,0,111,-10,89 2 0043 -- numbersign
-sh "
-$ 456,775,115,100,-7,89 2 0044 -- dollar
-Do "
-% 729,703,19,50,-70,50 2 0045 -- percent
-& 547,718,15,33,-13,33 2 0046 -- ampersand
-' 182,718,0,122,-74,89 2 0047 -- quoteright
-cq "
-( 273,733,207,149,-39,89 3 0050 -- parenleft
-) 273,733,207,53,57,53 3 0051 -- parenright
-* 319,718,0,120,-85,89 2 0052 -- asterisk
-+ 479,505,0,68,-20,68 0 0053 -- plus
-, 228,106,147,0,4 0 0054 -- comma
-- 273,322,0,70,-27,70 0 0055 -- hyphen
-hy "
-char173 "
-. 228,106,0,0,-21 0 0056 -- period
-/ 228,737,19,192,67,89 2 0057 -- slash
-sl "
-0 456,703,19,93,-27,89 2 0060 -- zero
-1 456,703,0,11,-120,11 2 0061 -- one
-2 456,703,0,100,29,89 2 0062 -- two
-3 456,703,19,94,-11,89 2 0063 -- three
-4 456,703,0,66,0,66 2 0064 -- four
-5 456,688,19,103,-5,89 2 0065 -- five
-6 456,703,19,98,-24,89 2 0066 -- six
-7 456,688,0,143,-62,89 2 0067 -- seven
-8 456,703,19,91,-10,89 2 0070 -- eight
-9 456,703,19,93,-17,89 2 0071 -- nine
-: 228,516,0,69,-21,69 0 0072 -- colon
-; 228,516,147,69,4,69 0 0073 -- semicolon
-< 479,495,0,97,-27,89 0 0074 -- less
-= 479,390,0,86,-2,86 0 0075 -- equal
-> 479,495,0,61,9,61 0 0076 -- greater
-? 456,727,0,94,-82,89 2 0077 -- question
-@ 832,737,19,9,-126,9 2 0100 -- at
-at "
-A 547,718,0,39,39,39 2 0101 -- A
-B 547,718,0,86,-11,86 2 0102 -- B
-C 592,737,19,98,-38,89 2 0103 -- C
-D 592,718,0,84,-16,84 2 0104 -- D
-E 547,718,0,128,-21,89 2 0105 -- E
-F 501,718,0,152,-21,89 2 0106 -- F
-G 638,737,19,67,-41,67 2 0107 -- G
-H 592,718,0,113,-13,89 2 0110 -- H
-I 228,718,0,101,-25,89 2 0111 -- I
-J 410,718,19,116,11,89 2 0112 -- J
-K 547,718,0,165,-12,89 2 0113 -- K
-L 456,718,0,49,-12,49 2 0114 -- L
-M 683,718,0,116,-10,89 2 0115 -- M
-N 592,718,0,113,-12,89 2 0116 -- N
-O 638,737,19,89,-36,89 2 0117 -- O
-P 547,718,0,107,-21,89 2 0120 -- P
-Q 638,737,56,89,-36,89 2 0121 -- Q
-R 592,718,0,92,-22,89 2 0122 -- R
-S 547,737,19,87,-24,87 2 0123 -- S
-T 501,718,0,164,-72,89 2 0124 -- T
-U 592,718,19,111,-51,89 2 0125 -- U
-V 547,718,0,159,-92,89 2 0126 -- V
-W 774,718,0,162,-88,89 2 0127 -- W
-X 547,718,0,150,34,89 2 0130 -- X
-Y 547,718,0,164,-87,89 2 0131 -- Y
-Z 501,718,0,156,31,89 2 0132 -- Z
-[ 228,722,196,153,33,89 2 0133 -- bracketleft
-lB "
-\ 228,737,19,61,-65,61 2 0134 -- backslash
-rs "
-] 228,722,196,124,61,89 2 0135 -- bracketright
-rB "
-a^ 273,734,0,136,-71,89 2 0136 -- circumflex
-^ "
-_ 456,0,125,37,72,37 0 0137 -- underscore
-` 182,725,0,133,-85,89 2 0140 -- quoteleft
-oq "
-a 456,538,15,52,0,52 0 0141 -- a
-b 456,718,15,73,2,73 2 0142 -- b
-c 410,538,15,94,-11,89 0 0143 -- c
-d 456,718,15,128,-19,89 2 0144 -- d
-e 456,538,15,68,-19,68 0 0145 -- e
-f 228,728,0,163,-21,89 2 0146 -- f
-g 456,538,220,94,16,89 1 0147 -- g
-h 456,718,0,64,-3,64 2 0150 -- h
-i 182,718,0,120,-5,89 2 0151 -- i
-j 182,718,210,120,99,89 3 0152 -- j
-k 410,718,0,132,-5,89 2 0153 -- k
-l 182,718,0,120,-5,89 2 0154 -- l
-m 683,538,0,66,-3,66 0 0155 -- m
-n 456,538,0,64,-3,64 0 0156 -- n
-o 456,538,14,73,-18,73 0 0157 -- o
-p 456,538,207,73,39,73 1 0160 -- p
-q 456,538,207,90,-19,89 1 0161 -- q
-r 273,538,0,142,-13,89 0 0162 -- r
-s 410,538,15,74,-2,74 0 0163 -- s
-t 228,669,7,124,-34,89 2 0164 -- t
-u 456,523,15,86,-27,86 0 0165 -- u
-v 410,523,0,135,-48,89 0 0166 -- v
-w 592,523,0,131,-53,89 0 0167 -- w
-x 410,523,0,127,41,89 0 0170 -- x
-y 410,523,214,132,38,89 1 0171 -- y
-z 410,523,0,108,25,89 0 0172 -- z
-lC 274,722,196,141,-25,89 2 0173 -- braceleft
-{ "
-ba 213,737,19,102,-24,89 2 0174 -- bar
-| "
-rC 274,722,196,67,50,67 2 0175 -- braceright
-} "
-a~ 273,722,0,179,-52,89 2 0176 -- tilde
-~ "
-bq 182,106,149,15,33,15 0 0200 -- quotesinglbase
-Fo 456,446,0,48,-70,48 0 0201 -- guillemotleft
-char171 "
-Fc 456,446,0,27,-48,27 0 0202 -- guillemotright
-char187 "
-bu 287,517,0,102,-24,89 0 0203 -- bullet
-Fn 456,737,207,131,93,89 3 0204 -- florin
-f/ 137,703,19,309,189,89 2 0205 -- fraction
-%0 820,703,19,74,-22,74 2 0206 -- perthousand
-dg 456,718,159,104,-60,89 2 0207 -- dagger
-dd 456,718,159,105,7,89 2 0210 -- daggerdbl
-en 456,313,0,104,8,89 0 0211 -- endash
-em 820,313,0,105,8,89 0 0212 -- emdash
-fi 410,728,0,121,-21,89 2 0214 -- fi
-fl 410,728,0,119,-21,89 2 0215 -- fl
-.i 228,523,0,63,-28,63 0 0220 -- dotlessi
-ga 273,734,0,53,-89,53 2 0222 -- grave
-a" 273,734,0,240,-79,89 2 0223 -- hungarumlaut
-a. 273,706,0,74,-154,74 2 0224 -- dotaccent
-ab 273,731,0,168,-87,89 2 0225 -- breve
-ah 273,734,0,161,-95,89 2 0226 -- caron
-ao 273,756,0,107,-125,89 2 0227 -- ring
-ho 273,0,225,0,15 1 0230 -- ogonek
-lq 273,725,0,155,-63,89 2 0231 -- quotedblleft
-rq 273,718,0,144,-52,89 2 0232 -- quotedblright
-oe 774,538,15,67,-18,67 0 0233 -- oe
-/l 182,718,0,152,16,89 2 0234 -- lslash
-Bq 273,106,149,37,55,37 0 0235 -- quotedblbase
-OE 820,737,19,145,-30,89 2 0236 -- OE
-/L 456,718,0,49,16,49 2 0237 -- Lslash
-r! 273,523,195,44,-13,44 0 0241 -- exclamdown
-char161 "
-ct 456,623,115,73,-28,73 0 0242 -- cent
-char162 "
-Po 456,718,16,114,10,89 2 0243 -- sterling
-char163 "
-Cs 456,603,0,124,1,89 0 0244 -- currency
-char164 "
-Ye 456,688,0,167,-17,89 2 0245 -- yen
-char165 "
-bb 213,737,19,102,-24,89 2 0246 -- brokenbar
-char166 "
-sc 456,737,191,73,-13,73 2 0247 -- section
-char167 "
-ad 273,706,0,140,-88,89 2 0250 -- dieresis
-char168 "
-co 604,737,19,133,6,89 2 0251 -- copyright
-char169 "
-Of 303,737,0,115,-32,89 2 0252 -- ordfeminine
-char170 "
-fo 273,446,0,56,-62,56 0 0253 -- guilsinglleft
-no 479,390,0,86,-37,86 0 0254 -- logicalnot
-char172 "
-\- 479,289,0,68,-20,68 0 0255 -- minus
-rg 604,737,19,133,6,89 2 0256 -- registered
-char174 "
-a- 273,684,0,161,-67,89 2 0257 -- macron
-char175 "
-de 328,703,0,106,-88,89 2 0260 -- degree
-char176 "
-char177 479,506,0,78,18,78 0 0261 -- plusminus
-S2 273,703,0,145,-2,89 2 0262 -- twosuperior
-char178 "
-S3 273,703,0,135,-24,89 2 0263 -- threesuperior
-char179 "
-aa 273,734,0,167,-153,89 2 0264 -- acute
-char180 "
-char181 456,523,207,86,30,86 1 0265 -- mu
-ps 440,718,173,143,-53,89 2 0266 -- paragraph
-char182 "
-pc 228,315,0,33,-56,33 0 0267 -- periodcentered
-char183 "
-ac 273,0,225,0,48 1 0270 -- cedilla
-char184 "
-S1 273,703,0,82,-86,82 2 0271 -- onesuperior
-char185 "
-Om 299,737,0,135,-32,89 2 0272 -- ordmasculine
-char186 "
-fc 273,446,0,34,-41,34 0 0273 -- guilsinglright
-14 684,703,19,24,-73,24 2 0274 -- onequarter
-char188 "
-12 684,703,19,54,-43,54 2 0275 -- onehalf
-char189 "
-34 684,703,19,72,-56,72 2 0276 -- threequarters
-char190 "
-r? 501,525,201,0,-20 0 0277 -- questiondown
-char191 "
-`A 547,929,0,39,39,39 2 0300 -- Agrave
-char192 "
-'A 547,929,0,63,39,63 2 0301 -- Aacute
-char193 "
-^A 547,929,0,39,39,39 2 0302 -- Acircumflex
-char194 "
-~A 547,917,0,76,39,76 2 0303 -- Atilde
-char195 "
-:A 547,901,0,39,39,39 2 0304 -- Adieresis
-char196 "
-oA 547,931,0,39,39,39 2 0305 -- Aring
-char197 "
-AE 820,718,0,129,43,89 2 0306 -- AE
-char198 "
-,C 592,737,225,98,-38,89 3 0307 -- Ccedilla
-char199 "
-`E 547,929,0,128,-21,89 2 0310 -- Egrave
-char200 "
-'E 547,929,0,128,-21,89 2 0311 -- Eacute
-char201 "
-^E 547,929,0,128,-21,89 2 0312 -- Ecircumflex
-char202 "
-:E 547,901,0,128,-21,89 2 0313 -- Edieresis
-char203 "
-`I 228,929,0,110,-25,89 2 0314 -- Igrave
-char204 "
-'I 228,929,0,223,-25,89 2 0315 -- Iacute
-char205 "
-^I 228,929,0,193,-25,89 2 0316 -- Icircumflex
-char206 "
-:I 228,901,0,197,-25,89 2 0317 -- Idieresis
-char207 "
--D 592,718,0,84,-7,84 2 0320 -- Eth
-char208 "
-~N 592,917,0,113,-12,89 2 0321 -- Ntilde
-char209 "
-`O 638,929,19,89,-36,89 2 0322 -- Ograve
-char210 "
-'O 638,929,19,89,-36,89 2 0323 -- Oacute
-char211 "
-^O 638,929,19,89,-36,89 2 0324 -- Ocircumflex
-char212 "
-~O 638,917,19,89,-36,89 2 0325 -- Otilde
-char213 "
-:O 638,901,19,89,-36,89 2 0326 -- Odieresis
-char214 "
-char215 479,506,0,97,9,89 0 0327 -- multiply
-/O 638,737,19,142,15,89 2 0330 -- Oslash
-char216 "
-`U 592,929,19,111,-51,89 2 0331 -- Ugrave
-char217 "
-'U 592,929,19,111,-51,89 2 0332 -- Uacute
-char218 "
-^U 592,929,19,111,-51,89 2 0333 -- Ucircumflex
-char219 "
-:U 592,901,19,111,-51,89 2 0334 -- Udieresis
-char220 "
-'Y 547,929,0,164,-87,89 2 0335 -- Yacute
-char221 "
-TP 547,718,0,87,-21,87 2 0336 -- Thorn
-char222 "
-ss 501,728,15,88,-5,88 2 0337 -- germandbls
-char223 "
-`a 456,734,15,52,0,52 2 0340 -- agrave
-char224 "
-'a 456,734,15,75,0,75 2 0341 -- aacute
-char225 "
-^a 456,734,15,52,0,52 2 0342 -- acircumflex
-char226 "
-~a 456,722,15,80,0,80 2 0343 -- atilde
-char227 "
-:a 456,706,15,52,0,52 2 0344 -- adieresis
-char228 "
-oa 456,756,15,52,0,52 2 0345 -- aring
-char229 "
-ae 729,538,15,67,0,67 0 0346 -- ae
-char230 "
-,c 410,538,225,94,-11,89 1 0347 -- ccedilla
-char231 "
-`e 456,734,15,68,-19,68 2 0350 -- egrave
-char232 "
-'e 456,734,15,75,-19,75 2 0351 -- eacute
-char233 "
-^e 456,734,15,68,-19,68 2 0352 -- ecircumflex
-char234 "
-:e 456,706,15,68,-19,68 2 0353 -- edieresis
-char235 "
-`i 228,734,0,76,-28,76 2 0354 -- igrave
-char236 "
-'i 228,734,0,189,-28,89 2 0355 -- iacute
-char237 "
-^i 228,734,0,159,-28,89 2 0356 -- icircumflex
-char238 "
-:i 228,706,0,163,-28,89 2 0357 -- idieresis
-char239 "
-Sd 456,737,15,100,-17,89 2 0360 -- eth
-char240 "
-~n 456,722,0,80,-3,80 2 0361 -- ntilde
-char241 "
-`o 456,734,14,73,-18,73 2 0362 -- ograve
-char242 "
-'o 456,734,14,75,-18,75 2 0363 -- oacute
-char243 "
-^o 456,734,14,73,-18,73 2 0364 -- ocircumflex
-char244 "
-~o 456,722,14,88,-18,88 2 0365 -- otilde
-char245 "
-:o 456,706,14,73,-18,73 2 0366 -- odieresis
-char246 "
-char247 479,524,19,68,-20,68 0 0367 -- divide
-/o 501,545,22,80,26,80 0 0370 -- oslash
-char248 "
-`u 456,734,15,86,-27,86 2 0371 -- ugrave
-char249 "
-'u 456,734,15,86,-27,86 2 0372 -- uacute
-char250 "
-^u 456,734,15,86,-27,86 2 0373 -- ucircumflex
-char251 "
-:u 456,706,15,86,-27,86 2 0374 -- udieresis
-char252 "
-'y 410,734,214,132,38,89 3 0375 -- yacute
-char253 "
-Tp 456,718,207,73,39,73 3 0376 -- thorn
-char254 "
-:y 410,706,214,132,38,89 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HNR b/contrib/groff/devps/HNR
deleted file mode 100644
index e4f30ee..0000000
--- a/contrib/groff/devps/HNR
+++ /dev/null
@@ -1,629 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-char248 z -44
-/o y -56
-char248 y -56
-/o x -69
-char248 x -69
-/o w -56
-char248 w -56
-/o v -56
-char248 v -56
-/o u -44
-char248 u -44
-/o t -44
-char248 t -44
-/o s -44
-char248 s -44
-/o r -44
-char248 r -44
-/o q -44
-char248 q -44
-/o . -77
-char248 . -77
-/o p -44
-char248 p -44
-/o o -44
-char248 o -44
-/o n -44
-char248 n -44
-/o m -44
-char248 m -44
-/o l -44
-char248 l -44
-/o k -44
-char248 k -44
-/o j -44
-char248 j -44
-/o i -44
-char248 i -44
-/o h -44
-char248 h -44
-/o g -44
-char248 g -44
-/o f -44
-char248 f -44
-/o e -44
-char248 e -44
-/o d -44
-char248 d -44
-/o , -77
-char248 , -77
-/o c -44
-char248 c -44
-/o b -44
-char248 b -44
-/o a -44
-char248 a -44
-p y -24
-p . -28
-p , -28
-. ' -81
-. cq -81
-. rq -81
-` ` -46
-` oq -46
-oq ` -46
-oq oq -46
-' 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
-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 2 0000 -- asciicircum
-ti 479,326 0 0001 -- asciitilde
-vS 547,929,19 2 0002 -- Scaron
-vZ 501,929 2 0003 -- Zcaron
-vs 410,734,15 2 0004 -- scaron
-vz 410,734 2 0005 -- zcaron
-:Y 547,901 2 0006 -- Ydieresis
-tm 820,718 2 0007 -- trademark
-aq 157,718 2 0010 -- quotesingle
-space 228 0 0040
-! 228,718 2 0041 -- exclam
-" 291,718 2 0042 -- quotedbl
-dq "
-# 456,688 2 0043 -- numbersign
-sh "
-$ 456,775,115 2 0044 -- dollar
-Do "
-% 729,703,19 2 0045 -- percent
-& 547,718,15 2 0046 -- ampersand
-' 182,718 2 0047 -- quoteright
-cq "
-( 273,733,207 3 0050 -- parenleft
-) 273,733,207 3 0051 -- parenright
-* 319,718 2 0052 -- asterisk
-+ 479,505 0 0053 -- plus
-, 228,106,147 0 0054 -- comma
-- 273,322 0 0055 -- hyphen
-hy "
-char173 "
-. 228,106 0 0056 -- period
-/ 228,737,19 2 0057 -- slash
-sl "
-0 456,703,19 2 0060 -- zero
-1 456,703 2 0061 -- one
-2 456,703 2 0062 -- two
-3 456,703,19 2 0063 -- three
-4 456,703 2 0064 -- four
-5 456,688,19 2 0065 -- five
-6 456,703,19 2 0066 -- six
-7 456,688 2 0067 -- seven
-8 456,703,19 2 0070 -- eight
-9 456,703,19 2 0071 -- nine
-: 228,516 0 0072 -- colon
-; 228,516,147 0 0073 -- semicolon
-< 479,495 0 0074 -- less
-= 479,390 0 0075 -- equal
-> 479,495 0 0076 -- greater
-? 456,727 2 0077 -- question
-@ 832,737,19 2 0100 -- at
-at "
-A 547,718 2 0101 -- A
-B 547,718 2 0102 -- B
-C 592,737,19 2 0103 -- C
-D 592,718 2 0104 -- D
-E 547,718 2 0105 -- E
-F 501,718 2 0106 -- F
-G 638,737,19 2 0107 -- G
-H 592,718 2 0110 -- H
-I 228,718 2 0111 -- I
-J 410,718,19 2 0112 -- J
-K 547,718 2 0113 -- K
-L 456,718 2 0114 -- L
-M 683,718 2 0115 -- M
-N 592,718 2 0116 -- N
-O 638,737,19 2 0117 -- O
-P 547,718 2 0120 -- P
-Q 638,737,56 2 0121 -- Q
-R 592,718 2 0122 -- R
-S 547,737,19 2 0123 -- S
-T 501,718 2 0124 -- T
-U 592,718,19 2 0125 -- U
-V 547,718 2 0126 -- V
-W 774,718 2 0127 -- W
-X 547,718 2 0130 -- X
-Y 547,718 2 0131 -- Y
-Z 501,718 2 0132 -- Z
-[ 228,722,196 2 0133 -- bracketleft
-lB "
-\ 228,737,19 2 0134 -- backslash
-rs "
-] 228,722,196 2 0135 -- bracketright
-rB "
-a^ 273,734 2 0136 -- circumflex
-^ "
-_ 456,0,125 0 0137 -- underscore
-` 182,725 2 0140 -- quoteleft
-oq "
-a 456,538,15 0 0141 -- a
-b 456,718,15 2 0142 -- b
-c 410,538,15 0 0143 -- c
-d 456,718,15 2 0144 -- d
-e 456,538,15 0 0145 -- e
-f 228,728 2 0146 -- f
-g 456,538,220 1 0147 -- g
-h 456,718 2 0150 -- h
-i 182,718 2 0151 -- i
-j 182,718,210 3 0152 -- j
-k 410,718 2 0153 -- k
-l 182,718 2 0154 -- l
-m 683,538 0 0155 -- m
-n 456,538 0 0156 -- n
-o 456,538,14 0 0157 -- o
-p 456,538,207 1 0160 -- p
-q 456,538,207 1 0161 -- q
-r 273,538 0 0162 -- r
-s 410,538,15 0 0163 -- s
-t 228,669,7 2 0164 -- t
-u 456,523,15 0 0165 -- u
-v 410,523 0 0166 -- v
-w 592,523 0 0167 -- w
-x 410,523 0 0170 -- x
-y 410,523,214 1 0171 -- y
-z 410,523 0 0172 -- z
-lC 274,722,196 2 0173 -- braceleft
-{ "
-ba 213,737,19 2 0174 -- bar
-| "
-rC 274,722,196 2 0175 -- braceright
-} "
-a~ 273,722 2 0176 -- tilde
-~ "
-bq 182,106,149 0 0200 -- quotesinglbase
-Fo 456,446 0 0201 -- guillemotleft
-char171 "
-Fc 456,446 0 0202 -- guillemotright
-char187 "
-bu 287,517 0 0203 -- bullet
-Fn 456,737,207 3 0204 -- florin
-f/ 137,703,19 2 0205 -- fraction
-%0 820,703,19 2 0206 -- perthousand
-dg 456,718,159 2 0207 -- dagger
-dd 456,718,159 2 0210 -- daggerdbl
-en 456,313 0 0211 -- endash
-em 820,313 0 0212 -- emdash
-fi 410,728 2 0214 -- fi
-fl 410,728 2 0215 -- fl
-.i 228,523 0 0220 -- dotlessi
-ga 273,734 2 0222 -- grave
-a" 273,734 2 0223 -- hungarumlaut
-a. 273,706 2 0224 -- dotaccent
-ab 273,731 2 0225 -- breve
-ah 273,734 2 0226 -- caron
-ao 273,756 2 0227 -- ring
-ho 273,0,225 1 0230 -- ogonek
-lq 273,725 2 0231 -- quotedblleft
-rq 273,718 2 0232 -- quotedblright
-oe 774,538,15 0 0233 -- oe
-/l 182,718 2 0234 -- lslash
-Bq 273,106,149 0 0235 -- quotedblbase
-OE 820,737,19 2 0236 -- OE
-/L 456,718 2 0237 -- Lslash
-r! 273,523,195 0 0241 -- exclamdown
-char161 "
-ct 456,623,115 0 0242 -- cent
-char162 "
-Po 456,718,16 2 0243 -- sterling
-char163 "
-Cs 456,603 0 0244 -- currency
-char164 "
-Ye 456,688 2 0245 -- yen
-char165 "
-bb 213,737,19 2 0246 -- brokenbar
-char166 "
-sc 456,737,191 2 0247 -- section
-char167 "
-ad 273,706 2 0250 -- dieresis
-char168 "
-co 604,737,19 2 0251 -- copyright
-char169 "
-Of 303,737 2 0252 -- ordfeminine
-char170 "
-fo 273,446 0 0253 -- guilsinglleft
-no 479,390 0 0254 -- logicalnot
-char172 "
-\- 479,289 0 0255 -- minus
-rg 604,737,19 2 0256 -- registered
-char174 "
-a- 273,684 2 0257 -- macron
-char175 "
-de 328,703 2 0260 -- degree
-char176 "
-char177 479,506 0 0261 -- plusminus
-S2 273,703 2 0262 -- twosuperior
-char178 "
-S3 273,703 2 0263 -- threesuperior
-char179 "
-aa 273,734 2 0264 -- acute
-char180 "
-char181 456,523,207 1 0265 -- mu
-ps 440,718,173 2 0266 -- paragraph
-char182 "
-pc 228,315 0 0267 -- periodcentered
-char183 "
-ac 273,0,225 1 0270 -- cedilla
-char184 "
-S1 273,703 2 0271 -- onesuperior
-char185 "
-Om 299,737 2 0272 -- ordmasculine
-char186 "
-fc 273,446 0 0273 -- guilsinglright
-14 684,703,19 2 0274 -- onequarter
-char188 "
-12 684,703,19 2 0275 -- onehalf
-char189 "
-34 684,703,19 2 0276 -- threequarters
-char190 "
-r? 501,525,201 0 0277 -- questiondown
-char191 "
-`A 547,929 2 0300 -- Agrave
-char192 "
-'A 547,929 2 0301 -- Aacute
-char193 "
-^A 547,929 2 0302 -- Acircumflex
-char194 "
-~A 547,917 2 0303 -- Atilde
-char195 "
-:A 547,901 2 0304 -- Adieresis
-char196 "
-oA 547,931 2 0305 -- Aring
-char197 "
-AE 820,718 2 0306 -- AE
-char198 "
-,C 592,737,225 3 0307 -- Ccedilla
-char199 "
-`E 547,929 2 0310 -- Egrave
-char200 "
-'E 547,929 2 0311 -- Eacute
-char201 "
-^E 547,929 2 0312 -- Ecircumflex
-char202 "
-:E 547,901 2 0313 -- Edieresis
-char203 "
-`I 228,929 2 0314 -- Igrave
-char204 "
-'I 228,929 2 0315 -- Iacute
-char205 "
-^I 228,929 2 0316 -- Icircumflex
-char206 "
-:I 228,901 2 0317 -- Idieresis
-char207 "
--D 592,718 2 0320 -- Eth
-char208 "
-~N 592,917 2 0321 -- Ntilde
-char209 "
-`O 638,929,19 2 0322 -- Ograve
-char210 "
-'O 638,929,19 2 0323 -- Oacute
-char211 "
-^O 638,929,19 2 0324 -- Ocircumflex
-char212 "
-~O 638,917,19 2 0325 -- Otilde
-char213 "
-:O 638,901,19 2 0326 -- Odieresis
-char214 "
-char215 479,506 0 0327 -- multiply
-/O 638,737,19 2 0330 -- Oslash
-char216 "
-`U 592,929,19 2 0331 -- Ugrave
-char217 "
-'U 592,929,19 2 0332 -- Uacute
-char218 "
-^U 592,929,19 2 0333 -- Ucircumflex
-char219 "
-:U 592,901,19 2 0334 -- Udieresis
-char220 "
-'Y 547,929 2 0335 -- Yacute
-char221 "
-TP 547,718 2 0336 -- Thorn
-char222 "
-ss 501,728,15 2 0337 -- germandbls
-char223 "
-`a 456,734,15 2 0340 -- agrave
-char224 "
-'a 456,734,15 2 0341 -- aacute
-char225 "
-^a 456,734,15 2 0342 -- acircumflex
-char226 "
-~a 456,722,15 2 0343 -- atilde
-char227 "
-:a 456,706,15 2 0344 -- adieresis
-char228 "
-oa 456,756,15 2 0345 -- aring
-char229 "
-ae 729,538,15 0 0346 -- ae
-char230 "
-,c 410,538,225 1 0347 -- ccedilla
-char231 "
-`e 456,734,15 2 0350 -- egrave
-char232 "
-'e 456,734,15 2 0351 -- eacute
-char233 "
-^e 456,734,15 2 0352 -- ecircumflex
-char234 "
-:e 456,706,15 2 0353 -- edieresis
-char235 "
-`i 228,734 2 0354 -- igrave
-char236 "
-'i 228,734 2 0355 -- iacute
-char237 "
-^i 228,734 2 0356 -- icircumflex
-char238 "
-:i 228,706 2 0357 -- idieresis
-char239 "
-Sd 456,737,15 2 0360 -- eth
-char240 "
-~n 456,722 2 0361 -- ntilde
-char241 "
-`o 456,734,14 2 0362 -- ograve
-char242 "
-'o 456,734,14 2 0363 -- oacute
-char243 "
-^o 456,734,14 2 0364 -- ocircumflex
-char244 "
-~o 456,722,14 2 0365 -- otilde
-char245 "
-:o 456,706,14 2 0366 -- odieresis
-char246 "
-char247 479,524,19 0 0367 -- divide
-/o 501,545,22 0 0370 -- oslash
-char248 "
-`u 456,734,15 2 0371 -- ugrave
-char249 "
-'u 456,734,15 2 0372 -- uacute
-char250 "
-^u 456,734,15 2 0373 -- ucircumflex
-char251 "
-:u 456,706,15 2 0374 -- udieresis
-char252 "
-'y 410,734,214 3 0375 -- yacute
-char253 "
-Tp 456,718,207 3 0376 -- thorn
-char254 "
-:y 410,706,214 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/HR b/contrib/groff/devps/HR
deleted file mode 100644
index 3f89e25..0000000
--- a/contrib/groff/devps/HR
+++ /dev/null
@@ -1,629 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-char248 z -55
-/o y -70
-char248 y -70
-/o x -85
-char248 x -85
-/o w -70
-char248 w -70
-/o v -70
-char248 v -70
-/o u -55
-char248 u -55
-/o t -55
-char248 t -55
-/o s -55
-char248 s -55
-/o r -55
-char248 r -55
-/o q -55
-char248 q -55
-/o . -95
-char248 . -95
-/o p -55
-char248 p -55
-/o o -55
-char248 o -55
-/o n -55
-char248 n -55
-/o m -55
-char248 m -55
-/o l -55
-char248 l -55
-/o k -55
-char248 k -55
-/o j -55
-char248 j -55
-/o i -55
-char248 i -55
-/o h -55
-char248 h -55
-/o g -55
-char248 g -55
-/o f -55
-char248 f -55
-/o e -55
-char248 e -55
-/o d -55
-char248 d -55
-/o , -95
-char248 , -95
-/o c -55
-char248 c -55
-/o b -55
-char248 b -55
-/o a -55
-char248 a -55
-p y -30
-p . -35
-p , -35
-. ' -100
-. cq -100
-. rq -100
-` ` -57
-` oq -57
-oq ` -57
-oq oq -57
-' 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
-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 2 0000 -- asciicircum
-ti 584,326 0 0001 -- asciitilde
-vS 667,929,19 2 0002 -- Scaron
-vZ 611,929 2 0003 -- Zcaron
-vs 500,734,15 2 0004 -- scaron
-vz 500,734 2 0005 -- zcaron
-:Y 667,901 2 0006 -- Ydieresis
-tm 1000,718 2 0007 -- trademark
-aq 191,718 2 0010 -- quotesingle
-space 278 0 0040
-! 278,718 2 0041 -- exclam
-" 355,718 2 0042 -- quotedbl
-dq "
-# 556,688 2 0043 -- numbersign
-sh "
-$ 556,775,115 2 0044 -- dollar
-Do "
-% 889,703,19 2 0045 -- percent
-& 667,718,15 2 0046 -- ampersand
-' 222,718 2 0047 -- quoteright
-cq "
-( 333,733,207 3 0050 -- parenleft
-) 333,733,207 3 0051 -- parenright
-* 389,718 2 0052 -- asterisk
-+ 584,505 0 0053 -- plus
-, 278,106,147 0 0054 -- comma
-- 333,322 0 0055 -- hyphen
-hy "
-char173 "
-. 278,106 0 0056 -- period
-/ 278,737,19 2 0057 -- slash
-sl "
-0 556,703,19 2 0060 -- zero
-1 556,703 2 0061 -- one
-2 556,703 2 0062 -- two
-3 556,703,19 2 0063 -- three
-4 556,703 2 0064 -- four
-5 556,688,19 2 0065 -- five
-6 556,703,19 2 0066 -- six
-7 556,688 2 0067 -- seven
-8 556,703,19 2 0070 -- eight
-9 556,703,19 2 0071 -- nine
-: 278,516 0 0072 -- colon
-; 278,516,147 0 0073 -- semicolon
-< 584,495 0 0074 -- less
-= 584,390 0 0075 -- equal
-> 584,495 0 0076 -- greater
-? 556,727 2 0077 -- question
-@ 1015,737,19 2 0100 -- at
-at "
-A 667,718 2 0101 -- A
-B 667,718 2 0102 -- B
-C 722,737,19 2 0103 -- C
-D 722,718 2 0104 -- D
-E 667,718 2 0105 -- E
-F 611,718 2 0106 -- F
-G 778,737,19 2 0107 -- G
-H 722,718 2 0110 -- H
-I 278,718 2 0111 -- I
-J 500,718,19 2 0112 -- J
-K 667,718 2 0113 -- K
-L 556,718 2 0114 -- L
-M 833,718 2 0115 -- M
-N 722,718 2 0116 -- N
-O 778,737,19 2 0117 -- O
-P 667,718 2 0120 -- P
-Q 778,737,56 2 0121 -- Q
-R 722,718 2 0122 -- R
-S 667,737,19 2 0123 -- S
-T 611,718 2 0124 -- T
-U 722,718,19 2 0125 -- U
-V 667,718 2 0126 -- V
-W 944,718 2 0127 -- W
-X 667,718 2 0130 -- X
-Y 667,718 2 0131 -- Y
-Z 611,718 2 0132 -- Z
-[ 278,722,196 2 0133 -- bracketleft
-lB "
-\ 278,737,19 2 0134 -- backslash
-rs "
-] 278,722,196 2 0135 -- bracketright
-rB "
-a^ 333,734 2 0136 -- circumflex
-^ "
-_ 556,0,125 0 0137 -- underscore
-` 222,725 2 0140 -- quoteleft
-oq "
-a 556,538,15 0 0141 -- a
-b 556,718,15 2 0142 -- b
-c 500,538,15 0 0143 -- c
-d 556,718,15 2 0144 -- d
-e 556,538,15 0 0145 -- e
-f 278,728 2 0146 -- f
-g 556,538,220 1 0147 -- g
-h 556,718 2 0150 -- h
-i 222,718 2 0151 -- i
-j 222,718,210 3 0152 -- j
-k 500,718 2 0153 -- k
-l 222,718 2 0154 -- l
-m 833,538 0 0155 -- m
-n 556,538 0 0156 -- n
-o 556,538,14 0 0157 -- o
-p 556,538,207 1 0160 -- p
-q 556,538,207 1 0161 -- q
-r 333,538 0 0162 -- r
-s 500,538,15 0 0163 -- s
-t 278,669,7 2 0164 -- t
-u 556,523,15 0 0165 -- u
-v 500,523 0 0166 -- v
-w 722,523 0 0167 -- w
-x 500,523 0 0170 -- x
-y 500,523,214 1 0171 -- y
-z 500,523 0 0172 -- z
-lC 334,722,196 2 0173 -- braceleft
-{ "
-ba 260,737,19 2 0174 -- bar
-| "
-rC 334,722,196 2 0175 -- braceright
-} "
-a~ 333,722 2 0176 -- tilde
-~ "
-bq 222,106,149 0 0200 -- quotesinglbase
-Fo 556,446 0 0201 -- guillemotleft
-char171 "
-Fc 556,446 0 0202 -- guillemotright
-char187 "
-bu 350,517 0 0203 -- bullet
-Fn 556,737,207 3 0204 -- florin
-f/ 167,703,19 2 0205 -- fraction
-%0 1000,703,19 2 0206 -- perthousand
-dg 556,718,159 2 0207 -- dagger
-dd 556,718,159 2 0210 -- daggerdbl
-en 556,313 0 0211 -- endash
-em 1000,313 0 0212 -- emdash
-fi 500,728 2 0214 -- fi
-fl 500,728 2 0215 -- fl
-.i 278,523 0 0220 -- dotlessi
-ga 333,734 2 0222 -- grave
-a" 333,734 2 0223 -- hungarumlaut
-a. 333,706 2 0224 -- dotaccent
-ab 333,731 2 0225 -- breve
-ah 333,734 2 0226 -- caron
-ao 333,756 2 0227 -- ring
-ho 333,0,225 1 0230 -- ogonek
-lq 333,725 2 0231 -- quotedblleft
-rq 333,718 2 0232 -- quotedblright
-oe 944,538,15 0 0233 -- oe
-/l 222,718 2 0234 -- lslash
-Bq 333,106,149 0 0235 -- quotedblbase
-OE 1000,737,19 2 0236 -- OE
-/L 556,718 2 0237 -- Lslash
-r! 333,523,195 0 0241 -- exclamdown
-char161 "
-ct 556,623,115 0 0242 -- cent
-char162 "
-Po 556,718,16 2 0243 -- sterling
-char163 "
-Cs 556,603 0 0244 -- currency
-char164 "
-Ye 556,688 2 0245 -- yen
-char165 "
-bb 260,737,19 2 0246 -- brokenbar
-char166 "
-sc 556,737,191 2 0247 -- section
-char167 "
-ad 333,706 2 0250 -- dieresis
-char168 "
-co 737,737,19 2 0251 -- copyright
-char169 "
-Of 370,737 2 0252 -- ordfeminine
-char170 "
-fo 333,446 0 0253 -- guilsinglleft
-no 584,390 0 0254 -- logicalnot
-char172 "
-\- 584,289 0 0255 -- minus
-rg 737,737,19 2 0256 -- registered
-char174 "
-a- 333,684 2 0257 -- macron
-char175 "
-de 400,703 2 0260 -- degree
-char176 "
-char177 584,506 0 0261 -- plusminus
-S2 333,703 2 0262 -- twosuperior
-char178 "
-S3 333,703 2 0263 -- threesuperior
-char179 "
-aa 333,734 2 0264 -- acute
-char180 "
-char181 556,523,207 1 0265 -- mu
-ps 537,718,173 2 0266 -- paragraph
-char182 "
-pc 278,315 0 0267 -- periodcentered
-char183 "
-ac 333,0,225 1 0270 -- cedilla
-char184 "
-S1 333,703 2 0271 -- onesuperior
-char185 "
-Om 365,737 2 0272 -- ordmasculine
-char186 "
-fc 333,446 0 0273 -- guilsinglright
-14 834,703,19 2 0274 -- onequarter
-char188 "
-12 834,703,19 2 0275 -- onehalf
-char189 "
-34 834,703,19 2 0276 -- threequarters
-char190 "
-r? 611,525,201 0 0277 -- questiondown
-char191 "
-`A 667,929 2 0300 -- Agrave
-char192 "
-'A 667,929 2 0301 -- Aacute
-char193 "
-^A 667,929 2 0302 -- Acircumflex
-char194 "
-~A 667,917 2 0303 -- Atilde
-char195 "
-:A 667,901 2 0304 -- Adieresis
-char196 "
-oA 667,931 2 0305 -- Aring
-char197 "
-AE 1000,718 2 0306 -- AE
-char198 "
-,C 722,737,225 3 0307 -- Ccedilla
-char199 "
-`E 667,929 2 0310 -- Egrave
-char200 "
-'E 667,929 2 0311 -- Eacute
-char201 "
-^E 667,929 2 0312 -- Ecircumflex
-char202 "
-:E 667,901 2 0313 -- Edieresis
-char203 "
-`I 278,929 2 0314 -- Igrave
-char204 "
-'I 278,929 2 0315 -- Iacute
-char205 "
-^I 278,929 2 0316 -- Icircumflex
-char206 "
-:I 278,901 2 0317 -- Idieresis
-char207 "
--D 722,718 2 0320 -- Eth
-char208 "
-~N 722,917 2 0321 -- Ntilde
-char209 "
-`O 778,929,19 2 0322 -- Ograve
-char210 "
-'O 778,929,19 2 0323 -- Oacute
-char211 "
-^O 778,929,19 2 0324 -- Ocircumflex
-char212 "
-~O 778,917,19 2 0325 -- Otilde
-char213 "
-:O 778,901,19 2 0326 -- Odieresis
-char214 "
-char215 584,506 0 0327 -- multiply
-/O 778,737,19 2 0330 -- Oslash
-char216 "
-`U 722,929,19 2 0331 -- Ugrave
-char217 "
-'U 722,929,19 2 0332 -- Uacute
-char218 "
-^U 722,929,19 2 0333 -- Ucircumflex
-char219 "
-:U 722,901,19 2 0334 -- Udieresis
-char220 "
-'Y 667,929 2 0335 -- Yacute
-char221 "
-TP 667,718 2 0336 -- Thorn
-char222 "
-ss 611,728,15 2 0337 -- germandbls
-char223 "
-`a 556,734,15 2 0340 -- agrave
-char224 "
-'a 556,734,15 2 0341 -- aacute
-char225 "
-^a 556,734,15 2 0342 -- acircumflex
-char226 "
-~a 556,722,15 2 0343 -- atilde
-char227 "
-:a 556,706,15 2 0344 -- adieresis
-char228 "
-oa 556,756,15 2 0345 -- aring
-char229 "
-ae 889,538,15 0 0346 -- ae
-char230 "
-,c 500,538,225 1 0347 -- ccedilla
-char231 "
-`e 556,734,15 2 0350 -- egrave
-char232 "
-'e 556,734,15 2 0351 -- eacute
-char233 "
-^e 556,734,15 2 0352 -- ecircumflex
-char234 "
-:e 556,706,15 2 0353 -- edieresis
-char235 "
-`i 278,734 2 0354 -- igrave
-char236 "
-'i 278,734 2 0355 -- iacute
-char237 "
-^i 278,734 2 0356 -- icircumflex
-char238 "
-:i 278,706 2 0357 -- idieresis
-char239 "
-Sd 556,737,15 2 0360 -- eth
-char240 "
-~n 556,722 2 0361 -- ntilde
-char241 "
-`o 556,734,14 2 0362 -- ograve
-char242 "
-'o 556,734,14 2 0363 -- oacute
-char243 "
-^o 556,734,14 2 0364 -- ocircumflex
-char244 "
-~o 556,722,14 2 0365 -- otilde
-char245 "
-:o 556,706,14 2 0366 -- odieresis
-char246 "
-char247 584,524,19 0 0367 -- divide
-/o 611,545,22 0 0370 -- oslash
-char248 "
-`u 556,734,15 2 0371 -- ugrave
-char249 "
-'u 556,734,15 2 0372 -- uacute
-char250 "
-^u 556,734,15 2 0373 -- ucircumflex
-char251 "
-:u 556,706,15 2 0374 -- udieresis
-char252 "
-'y 500,734,214 3 0375 -- yacute
-char253 "
-Tp 556,718,207 3 0376 -- thorn
-char254 "
-:y 500,706,214 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/Makefile.sub b/contrib/groff/devps/Makefile.sub
deleted file mode 100644
index a40f63f..0000000
--- a/contrib/groff/devps/Makefile.sub
+++ /dev/null
@@ -1,35 +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
-PSFILES=prologue symbolsl.pfa zapfdr.pfa
-DEVGENFILES=generate/Makefile generate/afmname generate/dingbatsmap \
- generate/dingbatsrmap generate/lgreekmap generate/symbol.sed \
- generate/symbolchars generate/symbolsl.afm generate/textmap
-DEVFILES=DESC $(PSFILES) $(DISTFILES) $(DEVGENFILES)
-
-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 "paperlength 841890" >>DESC; \
- else \
- echo "paperlength 792000" >>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/devps/NB b/contrib/groff/devps/NB
deleted file mode 100644
index 1a926cb..0000000
--- a/contrib/groff/devps/NB
+++ /dev/null
@@ -1,473 +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 char173 -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 char173 -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 char173 -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 char173 -125
-Y e -100
-Y , -100
-Y : -25
-Y a -100
-Y A -91
-, ' -18
-, cq -18
-, rq -18
-f ' 75
-f cq 75
-f rq 75
-. ' -18
-. cq -18
-. rq -18
-lq A -74
-` A -74
-oq A -74
-' s -25
-cq s -25
-' d -25
-cq d -25
-r . -74
-r , -74
-v . -100
-v , -100
-w . -100
-w , -100
-y . -100
-y , -100
-charset
-ha 606,690 2 0000 -- asciicircum
-ti 606,346 0 0001 -- asciitilde
-vS 667,952,15 2 0002 -- Scaron
-vZ 667,952 2 0003 -- Zcaron
-vs 500,725,15 2 0004 -- scaron
-vz 537,725 2 0005 -- zcaron
-:Y 722,921 2 0006 -- Ydieresis
-tm 1000,722 2 0007 -- trademark
-aq 241,737 2 0010 -- quotesingle
-space 287 0 0040
-! 296,737,15 2 0041 -- exclam
-" 333,737 2 0042 -- quotedbl
-dq "
-# 574,690 2 0043 -- numbersign
-sh "
-$ 574,810,141 2 0044 -- dollar
-Do "
-% 833,705,15 2 0045 -- percent
-& 852,737,15 2 0046 -- ampersand
-' 241,737 2 0047 -- quoteright
-cq "
-( 389,745,117 2 0050 -- parenleft
-) 389,745,117 2 0051 -- parenright
-* 500,737 2 0052 -- asterisk
-+ 606,506 0 0053 -- plus
-, 278,175,184 0 0054 -- comma
-- 333,302 0 0055 -- hyphen
-hy "
-char173 "
-. 278,175,15 0 0056 -- period
-/ 278,737,15 2 0057 -- slash
-sl "
-0 574,705,15 2 0060 -- zero
-1 574,705 2 0061 -- one
-2 574,705 2 0062 -- two
-3 574,705,15 2 0063 -- three
-4 574,705 2 0064 -- four
-5 574,705,15 2 0065 -- five
-6 574,705,15 2 0066 -- six
-7 574,705,15 2 0067 -- seven
-8 574,705,15 2 0070 -- eight
-9 574,705,15 2 0071 -- nine
-: 278,485,15 0 0072 -- colon
-; 278,485,184 0 0073 -- semicolon
-< 606,515,9 0 0074 -- less
-= 606,403 0 0075 -- equal
-> 606,515,9 0 0076 -- greater
-? 500,737,15 2 0077 -- question
-@ 747,737,15 2 0100 -- at
-at "
-A 759,737 2 0101 -- A
-B 778,722 2 0102 -- B
-C 778,737,15 2 0103 -- C
-D 833,722 2 0104 -- D
-E 759,722 2 0105 -- E
-F 722,722 2 0106 -- F
-G 833,737,15 2 0107 -- G
-H 870,722 2 0110 -- H
-I 444,722 2 0111 -- I
-J 648,722,15 2 0112 -- J
-K 815,722 2 0113 -- K
-L 722,722 2 0114 -- L
-M 981,722 2 0115 -- M
-N 833,722,10 2 0116 -- N
-O 833,737,15 2 0117 -- O
-P 759,722 2 0120 -- P
-Q 833,737,189 2 0121 -- Q
-R 815,722,15 2 0122 -- R
-S 667,737,15 2 0123 -- S
-T 722,722 2 0124 -- T
-U 833,722,15 2 0125 -- U
-V 759,722,10 2 0126 -- V
-W 981,722,10 2 0127 -- W
-X 722,722 2 0130 -- X
-Y 722,722 2 0131 -- Y
-Z 667,722 2 0132 -- Z
-[ 389,737,109 2 0133 -- bracketleft
-lB "
-\ 606,737,15 2 0134 -- backslash
-rs "
-] 389,737,109 2 0135 -- bracketright
-rB "
-a^ 333,725 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 241,737 2 0140 -- quoteleft
-oq "
-a 611,485,15 0 0141 -- a
-b 648,737,15 2 0142 -- b
-c 556,485,15 0 0143 -- c
-d 667,737,15 2 0144 -- d
-e 574,485,15 0 0145 -- e
-f 389,737 2 0146 -- f
-g 611,535,205 1 0147 -- g
-h 685,737 2 0150 -- h
-i 370,737 2 0151 -- i
-j 352,737,205 3 0152 -- j
-k 667,737 2 0153 -- k
-l 352,737 2 0154 -- l
-m 963,485 0 0155 -- m
-n 685,485 0 0156 -- n
-o 611,485,15 0 0157 -- o
-p 667,485,205 1 0160 -- p
-q 648,485,205 1 0161 -- q
-r 519,485 0 0162 -- r
-s 500,485,15 0 0163 -- s
-t 426,675,15 2 0164 -- t
-u 685,475,15 0 0165 -- u
-v 611,475,10 0 0166 -- v
-w 889,475,10 0 0167 -- w
-x 611,475 0 0170 -- x
-y 611,475,205 1 0171 -- y
-z 537,475 0 0172 -- z
-lC 389,737,109 2 0173 -- braceleft
-{ "
-ba 606,750,250 3 0174 -- bar
-| "
-rC 389,737,109 2 0175 -- braceright
-} "
-a~ 333,705 2 0176 -- tilde
-~ "
-bq 241,175,184 0 0200 -- quotesinglbase
-Fo 500,397 0 0201 -- guillemotleft
-char171 "
-Fc 500,397 0 0202 -- guillemotright
-char187 "
-bu 606,542 0 0203 -- bullet
-Fn 574,737,205 3 0204 -- florin
-f/ 167,705,15 2 0205 -- fraction
-%0 1000,705,15 2 0206 -- perthousand
-dg 500,737,101 2 0207 -- dagger
-dd 500,737,89 2 0210 -- daggerdbl
-en 500,292 0 0211 -- endash
-em 1000,292 0 0212 -- emdash
-fi 685,737 2 0214 -- fi
-fl 685,737 2 0215 -- fl
-.i 370,475 0 0220 -- dotlessi
-ga 333,737 2 0222 -- grave
-a" 333,737 2 0223 -- hungarumlaut
-a. 333,694 2 0224 -- dotaccent
-ab 333,714 2 0225 -- breve
-ah 333,725 2 0226 -- caron
-ao 333,761 2 0227 -- ring
-ho 333,3,163 0 0230 -- ogonek
-lq 481,737 2 0231 -- quotedblleft
-rq 481,737 2 0232 -- quotedblright
-oe 907,485,15 0 0233 -- oe
-/l 352,737 2 0234 -- lslash
-Bq 481,175,184 0 0235 -- quotedblbase
-OE 1000,722 2 0236 -- OE
-/L 722,722 2 0237 -- Lslash
-r! 296,547,205 1 0241 -- exclamdown
-char161 "
-ct 574,572,102 0 0242 -- cent
-char162 "
-Po 574,705,15 2 0243 -- sterling
-char163 "
-Cs 574,605 0 0244 -- currency
-char164 "
-Ye 574,690 2 0245 -- yen
-char165 "
-bb 606,675,175 2 0246 -- brokenbar
-char166 "
-sc 500,737,86 2 0247 -- section
-char167 "
-ad 333,694 2 0250 -- dieresis
-char168 "
-co 747,737,15 2 0251 -- copyright
-char169 "
-Of 367,705 2 0252 -- ordfeminine
-char170 "
-fo 333,397 0 0253 -- guilsinglleft
-no 606,403 0 0254 -- logicalnot
-char172 "
-\- 606,307 0 0255 -- minus
-rg 747,737,15 2 0256 -- registered
-char174 "
-a- 333,664 0 0257 -- macron
-char175 "
-de 400,705 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
-S2 344,705 2 0262 -- twosuperior
-char178 "
-S3 344,705 2 0263 -- threesuperior
-char179 "
-aa 333,737 2 0264 -- acute
-char180 "
-char181 685,475,205 1 0265 -- mu
-ps 747,722,71 2 0266 -- paragraph
-char182 "
-pc 278,372 0 0267 -- periodcentered
-char183 "
-ac 333,0,224 1 0270 -- cedilla
-char184 "
-S1 344,705 2 0271 -- onesuperior
-char185 "
-Om 367,705 2 0272 -- ordmasculine
-char186 "
-fc 333,397 0 0273 -- guilsinglright
-14 861,705,15 2 0274 -- onequarter
-char188 "
-12 861,705,15 2 0275 -- onehalf
-char189 "
-34 861,705,15 2 0276 -- threequarters
-char190 "
-r? 500,547,205 1 0277 -- questiondown
-char191 "
-`A 759,964 2 0300 -- Agrave
-char192 "
-'A 759,964 2 0301 -- Aacute
-char193 "
-^A 759,952 2 0302 -- Acircumflex
-char194 "
-~A 759,932 2 0303 -- Atilde
-char195 "
-:A 759,921 2 0304 -- Adieresis
-char196 "
-oA 759,988 2 0305 -- Aring
-char197 "
-AE 981,722 2 0306 -- AE
-char198 "
-,C 778,737,224 3 0307 -- Ccedilla
-char199 "
-`E 759,964 2 0310 -- Egrave
-char200 "
-'E 759,964 2 0311 -- Eacute
-char201 "
-^E 759,952 2 0312 -- Ecircumflex
-char202 "
-:E 759,921 2 0313 -- Edieresis
-char203 "
-`I 444,964 2 0314 -- Igrave
-char204 "
-'I 444,964 2 0315 -- Iacute
-char205 "
-^I 444,952 2 0316 -- Icircumflex
-char206 "
-:I 444,921 2 0317 -- Idieresis
-char207 "
--D 833,722 2 0320 -- Eth
-char208 "
-~N 833,932,10 2 0321 -- Ntilde
-char209 "
-`O 833,964,15 2 0322 -- Ograve
-char210 "
-'O 833,964,15 2 0323 -- Oacute
-char211 "
-^O 833,952,15 2 0324 -- Ocircumflex
-char212 "
-~O 833,932,15 2 0325 -- Otilde
-char213 "
-:O 833,921,15 2 0326 -- Odieresis
-char214 "
-char215 606,491 0 0327 -- multiply
-/O 833,775,53 2 0330 -- Oslash
-char216 "
-`U 833,964,15 2 0331 -- Ugrave
-char217 "
-'U 833,964,15 2 0332 -- Uacute
-char218 "
-^U 833,952,15 2 0333 -- Ucircumflex
-char219 "
-:U 833,921,15 2 0334 -- Udieresis
-char220 "
-'Y 722,964 2 0335 -- Yacute
-char221 "
-TP 759,722 2 0336 -- Thorn
-char222 "
-ss 611,737,15 2 0337 -- germandbls
-char223 "
-`a 611,737,15 2 0340 -- agrave
-char224 "
-'a 611,737,15 2 0341 -- aacute
-char225 "
-^a 611,725,15 2 0342 -- acircumflex
-char226 "
-~a 611,705,15 2 0343 -- atilde
-char227 "
-:a 611,694,15 2 0344 -- adieresis
-char228 "
-oa 611,761,15 2 0345 -- aring
-char229 "
-ae 870,485,15 0 0346 -- ae
-char230 "
-,c 556,485,224 1 0347 -- ccedilla
-char231 "
-`e 574,737,15 2 0350 -- egrave
-char232 "
-'e 574,737,15 2 0351 -- eacute
-char233 "
-^e 574,725,15 2 0352 -- ecircumflex
-char234 "
-:e 574,694,15 2 0353 -- edieresis
-char235 "
-`i 370,737 2 0354 -- igrave
-char236 "
-'i 370,737 2 0355 -- iacute
-char237 "
-^i 370,725 2 0356 -- icircumflex
-char238 "
-:i 370,694 2 0357 -- idieresis
-char239 "
-Sd 611,737,15 2 0360 -- eth
-char240 "
-~n 685,705 2 0361 -- ntilde
-char241 "
-`o 611,737,15 2 0362 -- ograve
-char242 "
-'o 611,737,15 2 0363 -- oacute
-char243 "
-^o 611,725,15 2 0364 -- ocircumflex
-char244 "
-~o 611,705,15 2 0365 -- otilde
-char245 "
-:o 611,694,15 2 0366 -- odieresis
-char246 "
-char247 606,546,40 0 0367 -- divide
-/o 611,573,103 0 0370 -- oslash
-char248 "
-`u 685,737,15 2 0371 -- ugrave
-char249 "
-'u 685,737,15 2 0372 -- uacute
-char250 "
-^u 685,725,15 2 0373 -- ucircumflex
-char251 "
-:u 685,694,15 2 0374 -- udieresis
-char252 "
-'y 611,737,205 3 0375 -- yacute
-char253 "
-Tp 667,737,205 3 0376 -- thorn
-char254 "
-:y 611,694,205 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/NBI b/contrib/groff/devps/NBI
deleted file mode 100644
index 97e4f46..0000000
--- a/contrib/groff/devps/NBI
+++ /dev/null
@@ -1,594 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -18
-. cq -18
-. rq -18
-lq ` 20
-lq oq 20
-lq A -60
-` 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 char173 -16
-r g -11
-r e -7
-r d -7
-r , -90
-r : 9
-r a -11
-s . 11
-s , 11
-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 0000 -- asciicircum
-ti 606,346,0,0,-22 0 0001 -- asciitilde
-vS 685,930,15,31,49,31 2 0002 -- Scaron
-vZ 704,930,0,57,83,57 2 0003 -- Zcaron
-vs 481,705,15,46,50,46 2 0004 -- scaron
-vz 519,695,15,4,69,4 2 0005 -- zcaron
-:Y 704,915,0,121,37,109 2 0006 -- Ydieresis
-tm 950,722,0,117,8,109 2 0007 -- trademark
-aq 287,737,0,13,-62,13 2 0010 -- quotesingle
-space 287 0 0040
-! 333,737,15,50,50,50 2 0041 -- exclam
-" 400,737,0,78,-16,78 2 0042 -- quotedbl
-dq "
-# 574,690,0,20,20,20 2 0043 -- numbersign
-sh "
-$ 574,810,120,41,41,41 2 0044 -- dollar
-Do "
-% 889,727,28,0,-4 2 0045 -- percent
-& 889,737,15,0,18 2 0046 -- ampersand
-' 259,737,0,66,2,66 2 0047 -- quoteright
-cq "
-( 407,745,117,97,-22,97 2 0050 -- parenleft
-) 407,745,117,0,120 2 0051 -- parenright
-* 500,737,0,48,-8,48 2 0052 -- asterisk
-+ 606,506 0 0053 -- plus
-, 287,157,192,0,107 0 0054 -- comma
-- 333,299,0,0,48 0 0055 -- hyphen
-hy "
-char173 "
-. 287,157,15,0,70 0 0056 -- period
-/ 278,737,15,92,91,92 2 0057 -- slash
-sl "
-0 574,705,15,29,29,29 2 0060 -- zero
-1 574,705,0,0,25 2 0061 -- one
-2 574,705,3,14,88,14 2 0062 -- two
-3 574,705,15,12,57,12 2 0063 -- three
-4 574,705,0,20,63,20 2 0064 -- four
-5 574,705,15,50,50,50 2 0065 -- five
-6 574,705,15,50,19,50 2 0066 -- six
-7 574,705,15,69,-14,69 2 0067 -- seven
-8 574,705,15,28,50,28 2 0070 -- eight
-9 574,705,15,19,50,19 2 0071 -- nine
-: 287,477,15,0,70 0 0072 -- colon
-; 287,477,192,0,107 0 0073 -- semicolon
-< 606,515,9 0 0074 -- less
-= 606,403 0 0075 -- equal
-> 606,514,8 0 0076 -- greater
-? 481,737,15,20,-29,20 2 0077 -- question
-@ 747,737,15,54,54,54 2 0100 -- at
-at "
-A 741,737,0,25,125,25 2 0101 -- A
-B 759,722,0,12,100,12 2 0102 -- B
-C 759,737,15,50,13,50 2 0103 -- C
-D 833,722,0,13,97,13 2 0104 -- D
-E 741,722,0,39,91,39 2 0105 -- E
-F 704,722,0,76,91,76 2 0106 -- F
-G 815,737,15,40,13,40 2 0107 -- G
-H 870,722,0,91,91,91 2 0110 -- H
-I 444,722,0,91,91,91 2 0111 -- I
-J 667,722,15,91,70,91 2 0112 -- J
-K 778,722,0,104,91,104 2 0113 -- K
-L 704,722,0,16,91,16 2 0114 -- L
-M 944,722,0,94,94,94 2 0115 -- M
-N 852,722,10,111,111,109 2 0116 -- N
-O 833,737,15,13,13,13 2 0117 -- O
-P 741,722,0,39,91,39 2 0120 -- P
-Q 833,737,189,13,13,13 2 0121 -- Q
-R 796,722,15,3,91,3 2 0122 -- R
-S 685,737,15,31,49,31 2 0123 -- S
-T 722,722,0,87,9,87 2 0124 -- T
-U 833,722,15,117,-38,109 2 0125 -- U
-V 741,722,10,111,18,109 2 0126 -- V
-W 944,722,10,106,10,106 2 0127 -- W
-X 741,722,0,110,132,109 2 0130 -- X
-Y 704,722,0,121,37,109 2 0131 -- Y
-Z 704,722,0,57,83,57 2 0132 -- Z
-[ 407,737,109,107,49,107 2 0133 -- bracketleft
-lB "
-\ 606,737,15,0,-111 2 0134 -- backslash
-rs "
-] 407,737,109,5,151,5 2 0135 -- bracketright
-rB "
-a^ 333,705,0,82,27,82 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 259,737,0,65,3,65 2 0140 -- quoteleft
-oq "
-a 667,477,15,19,44,19 0 0141 -- a
-b 611,737,15,0,21 2 0142 -- b
-c 537,477,15,0,50 0 0143 -- c
-d 667,737,15,43,50,43 2 0144 -- d
-e 519,477,15,10,50,10 0 0145 -- e
-f 389,737,205,211,98,109 3 0146 -- f
-g 611,528,205,43,113,43 1 0147 -- g
-h 685,737,15,4,50,4 2 0150 -- h
-i 389,737,15,6,18,6 2 0151 -- i
-j 370,737,205,27,255,27 3 0152 -- j
-k 648,737,15,0,61 2 0153 -- k
-l 389,737,15,36,18,36 2 0154 -- l
-m 944,477,15,15,50,15 0 0155 -- m
-n 685,477,15,4,50,4 0 0156 -- n
-o 574,477,15,6,50,6 0 0157 -- o
-p 648,477,205,0,169 1 0160 -- p
-q 630,477,205,7,50,7 1 0161 -- q
-r 519,486,0,58,50,58 0 0162 -- r
-s 481,477,15,4,50,4 0 0163 -- s
-t 407,650,15,46,26,46 2 0164 -- t
-u 685,477,15,0,20 0 0165 -- u
-v 556,477,15,0,20 0 0166 -- v
-w 833,477,15,0,20 0 0167 -- w
-x 574,477,15,50,96,50 0 0170 -- x
-y 519,477,205,24,116,24 1 0171 -- y
-z 519,477,15,4,69,4 0 0172 -- z
-lC 407,737,109,51,-2,51 2 0173 -- braceleft
-{ "
-ba 606,750,250,0,-199 3 0174 -- bar
-| "
-rC 407,737,109,0,75 2 0175 -- braceright
-} "
-a~ 333,690,0,115,22,109 2 0176 -- tilde
-~ "
-bq 259,157,192,0,107 0 0200 -- quotesinglbase
-Fo 481,407,0,18,85,18 0 0201 -- guillemotleft
-char171 "
-Fc 481,407,0,22,81,22 0 0202 -- guillemotright
-char187 "
-bu 606,542,0,0,-72 0 0203 -- bullet
-Fn 574,737,205,51,93,51 3 0204 -- florin
-f/ 167,705,15,216,216,109 2 0205 -- fraction
-%0 1167,727,28,30,30,30 2 0206 -- perthousand
-dg 500,737,146,58,2,58 2 0207 -- dagger
-dd 500,737,150,58,110,58 2 0210 -- daggerdbl
-en 500,287,0,29,97,29 0 0211 -- endash
-em 1000,287,0,29,97,29 0 0212 -- emdash
-fi 685,737,205,6,120,6 3 0214 -- fi
-fl 685,737,205,36,120,36 3 0215 -- fl
-.i 389,477,15,6,18,6 0 0220 -- dotlessi
-ga 333,722,0,11,-24,11 2 0222 -- grave
-a" 333,722,0,197,35,109 2 0223 -- hungarumlaut
-a. 333,690,0,6,-95,6 2 0224 -- dotaccent
-ab 333,698,0,107,-17,107 2 0225 -- breve
-ah 333,705,0,120,-10,109 2 0226 -- caron
-ao 333,746,0,52,-61,52 2 0227 -- ring
-ho 333,0,155,0,-18 0 0230 -- ogonek
-lq 481,737,0,90,-4,90 2 0231 -- quotedblleft
-rq 481,737,0,79,7,79 2 0232 -- quotedblright
-oe 852,477,15,10,56,10 0 0233 -- oe
-/l 389,737,15,51,45,51 2 0234 -- lslash
-Bq 481,157,192,0,107 0 0235 -- quotedblbase
-OE 963,722,0,76,21,76 2 0236 -- OE
-/L 704,722,0,16,91,16 2 0237 -- Lslash
-r! 333,547,205,6,94,6 1 0241 -- exclamdown
-char161 "
-ct 574,578,144,0,20 0 0242 -- cent
-char162 "
-Po 574,705,15,42,68,42 2 0243 -- sterling
-char163 "
-Cs 574,605,0,23,23,23 0 0244 -- currency
-char164 "
-Ye 574,690,0,105,33,105 2 0245 -- yen
-char165 "
-bb 606,675,175,0,-199 2 0246 -- brokenbar
-char166 "
-sc 500,737,146,65,80,65 2 0247 -- section
-char167 "
-ad 333,690,0,110,17,109 2 0250 -- dieresis
-char168 "
-co 747,737,15,53,52,53 2 0251 -- copyright
-char169 "
-Of 412,705,0,98,3,98 2 0252 -- ordfeminine
-char170 "
-fo 278,407,0,16,75,16 0 0253 -- guilsinglleft
-no 606,403 0 0254 -- logicalnot
-char172 "
-\- 606,307 0 0255 -- minus
-rg 747,737,15,53,52,53 2 0256 -- registered
-char174 "
-a- 333,649,0,121,3,109 2 0257 -- macron
-char175 "
-de 400,705,0,22,-36,22 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
-S2 344,705,0,68,67,68 2 0262 -- twosuperior
-char178 "
-S3 344,705,0,67,47,67 2 0263 -- threesuperior
-char179 "
-aa 333,722,0,89,-73,89 2 0264 -- acute
-char180 "
-char181 685,477,205,0,139 1 0265 -- mu
-ps 650,722,131,81,25,81 2 0266 -- paragraph
-char182 "
-pc 287,372,0,0,-7 0 0267 -- periodcentered
-char183 "
-ac 333,3,220,0,71 1 0270 -- cedilla
-char184 "
-S1 344,705,0,32,31,32 2 0271 -- onesuperior
-char185 "
-Om 356,705,0,88,8,88 2 0272 -- ordmasculine
-char186 "
-fc 278,407,0,15,76,15 0 0273 -- guilsinglright
-14 861,705,15,0,33 2 0274 -- onequarter
-char188 "
-12 861,705,15,0,33 2 0275 -- onehalf
-char189 "
-34 861,705,15,0,15 2 0276 -- threequarters
-char190 "
-r? 481,547,205,0,50 1 0277 -- questiondown
-char191 "
-`A 741,947,0,25,125,25 2 0300 -- Agrave
-char192 "
-'A 741,947,0,25,125,25 2 0301 -- Aacute
-char193 "
-^A 741,930,0,25,125,25 2 0302 -- Acircumflex
-char194 "
-~A 741,915,0,25,125,25 2 0303 -- Atilde
-char195 "
-:A 741,915,0,25,125,25 2 0304 -- Adieresis
-char196 "
-oA 741,991,0,25,125,25 2 0305 -- Aring
-char197 "
-AE 889,722,0,76,136,76 2 0306 -- AE
-char198 "
-,C 759,737,220,50,13,50 3 0307 -- Ccedilla
-char199 "
-`E 741,947,0,39,91,39 2 0310 -- Egrave
-char200 "
-'E 741,947,0,39,91,39 2 0311 -- Eacute
-char201 "
-^E 741,930,0,39,91,39 2 0312 -- Ecircumflex
-char202 "
-:E 741,915,0,39,91,39 2 0313 -- Edieresis
-char203 "
-`I 444,947,0,91,91,91 2 0314 -- Igrave
-char204 "
-'I 444,947,0,94,91,94 2 0315 -- Iacute
-char205 "
-^I 444,930,0,91,91,91 2 0316 -- Icircumflex
-char206 "
-:I 444,915,0,115,91,109 2 0317 -- Idieresis
-char207 "
--D 833,722,0,13,97,13 2 0320 -- Eth
-char208 "
-~N 852,915,10,111,111,109 2 0321 -- Ntilde
-char209 "
-`O 833,947,15,13,13,13 2 0322 -- Ograve
-char210 "
-'O 833,947,15,13,13,13 2 0323 -- Oacute
-char211 "
-^O 833,930,15,13,13,13 2 0324 -- Ocircumflex
-char212 "
-~O 833,915,15,13,13,13 2 0325 -- Otilde
-char213 "
-:O 833,915,15,13,13,13 2 0326 -- Odieresis
-char214 "
-char215 606,491,0,0,-15 0 0327 -- multiply
-/O 833,790,68,15,15,15 2 0330 -- Oslash
-char216 "
-`U 833,947,15,117,-38,109 2 0331 -- Ugrave
-char217 "
-'U 833,947,15,117,-38,109 2 0332 -- Uacute
-char218 "
-^U 833,930,15,117,-38,109 2 0333 -- Ucircumflex
-char219 "
-:U 833,915,15,117,-38,109 2 0334 -- Udieresis
-char220 "
-'Y 704,947,0,121,37,109 2 0335 -- Yacute
-char221 "
-TP 741,722,0,0,91 2 0336 -- Thorn
-char222 "
-ss 574,737,205,16,141,16 3 0337 -- germandbls
-char223 "
-`a 667,722,15,19,44,19 2 0340 -- agrave
-char224 "
-'a 667,722,15,19,44,19 2 0341 -- aacute
-char225 "
-^a 667,705,15,19,44,19 2 0342 -- acircumflex
-char226 "
-~a 667,690,15,19,44,19 2 0343 -- atilde
-char227 "
-:a 667,690,15,19,44,19 2 0344 -- adieresis
-char228 "
-oa 667,746,15,19,44,19 2 0345 -- aring
-char229 "
-ae 815,477,15,10,68,10 0 0346 -- ae
-char230 "
-,c 537,477,220,0,50 1 0347 -- ccedilla
-char231 "
-`e 519,722,15,10,50,10 2 0350 -- egrave
-char232 "
-'e 519,722,15,10,50,10 2 0351 -- eacute
-char233 "
-^e 519,705,15,10,50,10 2 0352 -- ecircumflex
-char234 "
-:e 519,690,15,17,50,17 2 0353 -- edieresis
-char235 "
-`i 389,715,15,6,18,6 2 0354 -- igrave
-char236 "
-'i 389,715,15,31,18,31 2 0355 -- iacute
-char237 "
-^i 389,698,15,24,29,24 2 0356 -- icircumflex
-char238 "
-:i 389,683,15,52,19,52 2 0357 -- idieresis
-char239 "
-Sd 574,752,15,6,50,6 2 0360 -- eth
-char240 "
-~n 685,690,15,4,50,4 2 0361 -- ntilde
-char241 "
-`o 574,722,15,6,50,6 2 0362 -- ograve
-char242 "
-'o 574,722,15,6,50,6 2 0363 -- oacute
-char243 "
-^o 574,705,15,6,50,6 2 0364 -- ocircumflex
-char244 "
-~o 574,690,15,6,50,6 2 0365 -- otilde
-char245 "
-:o 574,690,15,6,50,6 2 0366 -- odieresis
-char246 "
-char247 606,546,40 0 0367 -- divide
-/o 574,583,121,6,50,6 0 0370 -- oslash
-char248 "
-`u 685,722,15,0,20 2 0371 -- ugrave
-char249 "
-'u 685,722,15,0,20 2 0372 -- uacute
-char250 "
-^u 685,705,15,0,20 2 0373 -- ucircumflex
-char251 "
-:u 685,690,15,0,20 2 0374 -- udieresis
-char252 "
-'y 519,722,205,24,116,24 3 0375 -- yacute
-char253 "
-Tp 648,737,205,0,169 3 0376 -- thorn
-char254 "
-:y 519,690,205,24,116,24 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/NI b/contrib/groff/devps/NI
deleted file mode 100644
index af7c79f..0000000
--- a/contrib/groff/devps/NI
+++ /dev/null
@@ -1,535 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -37
-. cq -37
-. rq -37
-lq A -75
-` ` -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 char173 -75
-r , -125
-r : -25
-s . -50
-s , -50
-v . -75
-v , -75
-w . -75
-w , -75
-y . -75
-y , -75
-charset
-ha 606,690,0,0,-39 2 0000 -- asciicircum
-ti 606,322,0,0,-22 0 0001 -- asciitilde
-vS 667,946,15,21,56,21 2 0002 -- Scaron
-vZ 667,946,0,50,75,50 2 0003 -- Zcaron
-vs 444,690,15,40,48,40 2 0004 -- scaron
-vz 463,690,15,30,83,30 2 0005 -- zcaron
-:Y 685,902,0,125,19,107 2 0006 -- Ydieresis
-tm 950,722,0,68,18,68 2 0007 -- trademark
-aq 278,737,0,9,-101,9 2 0010 -- quotesingle
-space 278 0 0040
-! 333,737,15,20,33,20 2 0041 -- exclam
-" 400,737,0,13,-77,13 2 0042 -- quotedbl
-dq "
-# 556,690,0,22,22,22 2 0043 -- numbersign
-sh "
-$ 556,808,142,30,46,30 2 0044 -- dollar
-Do "
-% 833,705,15,7,7,7 2 0045 -- percent
-& 852,737,15,0,26 2 0046 -- ampersand
-' 204,737,0,75,11,75 2 0047 -- quoteright
-cq "
-( 333,745,117,128,-3,107 2 0050 -- parenleft
-) 333,745,117,0,143 2 0051 -- parenright
-* 500,737,0,50,-30,50 2 0052 -- asterisk
-+ 606,506 0 0053 -- plus
-, 278,109,165,0,89 0 0054 -- comma
-- 333,274,0,0,18 0 0055 -- hyphen
-hy "
-char173 "
-. 278,109,15,0,33 0 0056 -- period
-/ 606,737,15,0,-82 2 0057 -- slash
-sl "
-0 556,705,15,20,20,20 2 0060 -- zero
-1 556,705 2 0061 -- one
-2 556,705,0,0,87 2 0062 -- two
-3 556,705,15,0,52 2 0063 -- three
-4 556,705,0,6,58,6 2 0064 -- four
-5 556,705,15,34,46,34 2 0065 -- five
-6 556,705,15,42,14,42 2 0066 -- six
-7 556,705,15,55,-19,55 2 0067 -- seven
-8 556,705,15,20,44,20 2 0070 -- eight
-9 556,705,15,14,42,14 2 0071 -- nine
-: 278,466,15,1,33,1 0 0072 -- colon
-; 278,466,165,1,89,1 0 0073 -- semicolon
-< 606,514,8,0,14 0 0074 -- less
-= 606,389 0 0075 -- equal
-> 606,514,8,14,-14,14 0 0076 -- greater
-? 444,737,15,23,-52,23 2 0077 -- question
-@ 747,737,15,53,52,53 2 0100 -- at
-at "
-A 704,737,0,14,137,14 2 0101 -- A
-B 722,722,0,0,83 2 0102 -- B
-C 722,737,15,40,10,40 2 0103 -- C
-D 778,722,0,10,83,10 2 0104 -- D
-E 722,722,0,28,83,28 2 0105 -- E
-F 667,722,0,83,83,83 2 0106 -- F
-G 778,737,15,35,10,35 2 0107 -- G
-H 833,722,0,83,83,83 2 0110 -- H
-I 407,722,0,78,83,78 2 0111 -- I
-J 611,722,15,90,64,90 2 0112 -- J
-K 741,722,0,125,83,107 2 0113 -- K
-L 667,722,0,10,83,10 2 0114 -- L
-M 944,722,0,83,83,83 2 0115 -- M
-N 815,722,15,101,101,101 2 0116 -- N
-O 778,737,15,10,10,10 2 0117 -- O
-P 667,722,0,50,83,50 2 0120 -- P
-Q 778,737,190,10,10,10 2 0121 -- Q
-R 741,722,15,1,95,1 2 0122 -- R
-S 667,737,15,21,56,21 2 0123 -- S
-T 685,722,0,90,10,90 2 0124 -- T
-U 815,722,15,102,-43,102 2 0125 -- U
-V 704,722,10,125,14,107 2 0126 -- V
-W 926,722,10,102,-3,102 2 0127 -- W
-X 704,722,0,125,125,107 2 0130 -- X
-Y 685,722,0,125,19,107 2 0131 -- Y
-Z 667,722,0,50,75,50 2 0132 -- Z
-[ 333,737,109,105,105,105 2 0133 -- bracketleft
-lB "
-\ 606,737,15,0,-82 2 0134 -- backslash
-rs "
-] 333,737,109,83,127,83 2 0135 -- bracketright
-rB "
-a^ 333,690,0,48,13,48 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 204,737,0,75,11,75 2 0140 -- quoteleft
-oq "
-a 574,466,15,0,48 0 0141 -- a
-b 556,737,15,0,18 2 0142 -- b
-c 444,466,15,0,48 0 0143 -- c
-d 611,737,15,24,48,24 2 0144 -- d
-e 444,466,15,0,56 0 0145 -- e
-f 333,737,205,187,118,107 3 0146 -- f
-g 537,497,205,36,129,36 1 0147 -- g
-h 611,737,15,1,36,1 2 0150 -- h
-i 333,715,15,0,21 2 0151 -- i
-j 315,715,205,53,216,53 3 0152 -- j
-k 556,737,15,0,50 2 0153 -- k
-l 333,737,15,9,36,9 2 0154 -- l
-m 889,466,15,1,36,1 0 0155 -- m
-n 611,466,15,1,36,1 0 0156 -- n
-o 500,466,15,0,48 0 0157 -- o
-p 574,466,205,0,151 1 0160 -- p
-q 556,466,205,0,48 1 0161 -- q
-r 444,466,0,40,40,40 0 0162 -- r
-s 444,466,15,0,48 0 0163 -- s
-t 352,619,15,26,26,26 2 0164 -- t
-u 611,466,15,0,6 0 0165 -- u
-v 519,466,15,0,19 0 0166 -- v
-w 778,466,15,0,19 0 0167 -- w
-x 500,466,15,21,83,21 0 0170 -- x
-y 500,466,205,0,133 1 0171 -- y
-z 463,466,15,3,83,3 0 0172 -- z
-lC 333,737,109,111,12,107 2 0173 -- braceleft
-{ "
-ba 606,750,250,0,-217 3 0174 -- bar
-| "
-rC 333,737,109,0,137 2 0175 -- braceright
-} "
-a~ 333,649,0,100,-2,100 2 0176 -- tilde
-~ "
-bq 204,109,165,0,128 0 0200 -- quotesinglbase
-Fo 426,402,0,26,65,26 0 0201 -- guillemotleft
-char171 "
-Fc 426,402,0,26,65,26 0 0202 -- guillemotright
-char187 "
-bu 606,542,0,0,-72 0 0203 -- bullet
-Fn 556,737,205,63,108,63 3 0204 -- florin
-f/ 167,705,15,184,184,107 2 0205 -- fraction
-%0 1000,705,15,44,44,44 2 0206 -- perthousand
-dg 500,737,147,56,-1,56 2 0207 -- dagger
-dd 500,737,147,56,104,56 2 0210 -- daggerdbl
-en 500,268,0,37,77,37 0 0211 -- endash
-em 1000,268,0,37,77,37 0 0212 -- emdash
-fi 611,737,205,0,118 3 0214 -- fi
-fl 611,737,205,26,118,26 3 0215 -- fl
-.i 333,466,15,0,21 0 0220 -- dotlessi
-ga 333,690,0,0,-21 2 0222 -- grave
-a" 333,690,0,172,18,107 2 0223 -- hungarumlaut
-a. 333,646,0,0,-96 2 0224 -- dotaccent
-ab 333,677,0,87,-19,87 2 0225 -- breve
-ah 333,690,0,95,-23,95 2 0226 -- caron
-ao 333,712,0,31,-64,31 2 0227 -- ring
-ho 333,0,215,0,-18 1 0230 -- ogonek
-lq 389,737,0,67,11,67 2 0231 -- quotedblleft
-rq 389,737,0,67,11,67 2 0232 -- quotedblright
-oe 778,466,15,0,48 0 0233 -- oe
-/l 333,737,15,57,75,57 2 0234 -- lslash
-Bq 389,109,165,0,128 0 0235 -- quotedblbase
-OE 981,722,0,44,10,44 2 0236 -- OE
-/L 667,722,0,10,83,10 2 0237 -- Lslash
-r! 333,547,205,0,72 1 0241 -- exclamdown
-char161 "
-ct 556,580,144,0,-12 0 0242 -- cent
-char162 "
-Po 556,705,15,38,63,38 2 0243 -- sterling
-char163 "
-Cs 556,597,0,24,24,24 0 0244 -- currency
-char164 "
-Ye 556,690,0,118,10,107 2 0245 -- yen
-char165 "
-bb 606,675,175,0,-217 2 0246 -- brokenbar
-char166 "
-sc 500,737,147,30,60,30 2 0247 -- section
-char167 "
-ad 333,646,0,76,-9,76 2 0250 -- dieresis
-char168 "
-co 747,737,15,53,52,53 2 0251 -- copyright
-char169 "
-Of 422,705,0,48,-22,48 2 0252 -- ordfeminine
-char170 "
-fo 333,402,0,0,10 0 0253 -- guilsinglleft
-no 606,389 0 0254 -- logicalnot
-char172 "
-\- 606,289 0 0255 -- minus
-rg 747,737,15,53,52,53 2 0256 -- registered
-char174 "
-a- 333,610,0,80,-2,80 0 0257 -- macron
-char175 "
-de 400,705,0,22,-36,22 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
-S2 333,705,0,76,50,76 2 0262 -- twosuperior
-char178 "
-S3 333,705,0,76,28,76 2 0263 -- threesuperior
-char179 "
-aa 333,690,0,72,-82,72 2 0264 -- acute
-char180 "
-char181 611,466,205,0,110 1 0265 -- mu
-ps 650,722,132,65,2,65 2 0266 -- paragraph
-char182 "
-pc 278,374,0,0,-21 0 0267 -- periodcentered
-char183 "
-ac 333,0,215,0,47 1 0270 -- cedilla
-char184 "
-S1 333,705,0,28,16,28 2 0271 -- onesuperior
-char185 "
-Om 372,705,0,48,-16,48 2 0272 -- ordmasculine
-char186 "
-fc 333,402,0,0,10 0 0273 -- guilsinglright
-14 834,705,15,0,16 2 0274 -- onequarter
-char188 "
-12 834,705,15,0,16 2 0275 -- onehalf
-char189 "
-34 834,705,15,0,28 2 0276 -- threequarters
-char190 "
-r? 444,547,205,0,53 1 0277 -- questiondown
-char191 "
-`A 704,946,0,14,137,14 2 0300 -- Agrave
-char192 "
-'A 704,946,0,14,137,14 2 0301 -- Aacute
-char193 "
-^A 704,946,0,14,137,14 2 0302 -- Acircumflex
-char194 "
-~A 704,905,0,14,137,14 2 0303 -- Atilde
-char195 "
-:A 704,902,0,14,137,14 2 0304 -- Adieresis
-char196 "
-oA 704,958,0,14,137,14 2 0305 -- Aring
-char197 "
-AE 870,722,0,68,137,68 2 0306 -- AE
-char198 "
-,C 722,737,215,40,10,40 3 0307 -- Ccedilla
-char199 "
-`E 722,946,0,28,83,28 2 0310 -- Egrave
-char200 "
-'E 722,946,0,28,83,28 2 0311 -- Eacute
-char201 "
-^E 722,946,0,28,83,28 2 0312 -- Ecircumflex
-char202 "
-:E 722,902,0,28,83,28 2 0313 -- Edieresis
-char203 "
-`I 407,946,0,78,83,78 2 0314 -- Igrave
-char204 "
-'I 407,946,0,95,83,95 2 0315 -- Iacute
-char205 "
-^I 407,946,0,78,83,78 2 0316 -- Icircumflex
-char206 "
-:I 407,902,0,99,83,99 2 0317 -- Idieresis
-char207 "
--D 778,722,0,10,83,10 2 0320 -- Eth
-char208 "
-~N 815,905,15,101,101,101 2 0321 -- Ntilde
-char209 "
-`O 778,946,15,10,10,10 2 0322 -- Ograve
-char210 "
-'O 778,946,15,10,10,10 2 0323 -- Oacute
-char211 "
-^O 778,946,15,10,10,10 2 0324 -- Ocircumflex
-char212 "
-~O 778,905,15,10,10,10 2 0325 -- Otilde
-char213 "
-:O 778,902,15,10,10,10 2 0326 -- Odieresis
-char214 "
-char215 606,482,0,0,-24 0 0327 -- multiply
-/O 778,780,68,20,34,20 2 0330 -- Oslash
-char216 "
-`U 815,946,15,102,-43,102 2 0331 -- Ugrave
-char217 "
-'U 815,946,15,102,-43,102 2 0332 -- Uacute
-char218 "
-^U 815,946,15,102,-43,102 2 0333 -- Ucircumflex
-char219 "
-:U 815,902,15,102,-43,102 2 0334 -- Udieresis
-char220 "
-'Y 685,946,0,125,19,107 2 0335 -- Yacute
-char221 "
-TP 667,722,0,10,83,10 2 0336 -- Thorn
-char222 "
-ss 556,737,205,19,126,19 3 0337 -- germandbls
-char223 "
-`a 574,690,15,0,48 2 0340 -- agrave
-char224 "
-'a 574,690,15,0,48 2 0341 -- aacute
-char225 "
-^a 574,690,15,0,48 2 0342 -- acircumflex
-char226 "
-~a 574,649,15,0,48 2 0343 -- atilde
-char227 "
-:a 574,646,15,0,48 2 0344 -- adieresis
-char228 "
-oa 574,712,15,0,48 2 0345 -- aring
-char229 "
-ae 722,466,15,0,68 0 0346 -- ae
-char230 "
-,c 444,466,215,0,48 1 0347 -- ccedilla
-char231 "
-`e 444,690,15,0,56 2 0350 -- egrave
-char232 "
-'e 444,690,15,17,56,17 2 0351 -- eacute
-char233 "
-^e 444,690,15,0,56 2 0352 -- ecircumflex
-char234 "
-:e 444,646,15,21,56,21 2 0353 -- edieresis
-char235 "
-`i 333,690,15,0,21 2 0354 -- igrave
-char236 "
-'i 333,690,15,72,21,72 2 0355 -- iacute
-char237 "
-^i 333,690,15,48,21,48 2 0356 -- icircumflex
-char238 "
-:i 333,646,15,76,21,76 2 0357 -- idieresis
-char239 "
-Sd 500,737,15,0,48 2 0360 -- eth
-char240 "
-~n 611,649,15,1,36,1 2 0361 -- ntilde
-char241 "
-`o 500,690,15,0,48 2 0362 -- ograve
-char242 "
-'o 500,690,15,0,48 2 0363 -- oacute
-char243 "
-^o 500,690,15,0,48 2 0364 -- ocircumflex
-char244 "
-~o 500,649,15,17,48,17 2 0365 -- otilde
-char245 "
-:o 500,646,15,0,48 2 0366 -- odieresis
-char246 "
-char247 606,528,22 0 0367 -- divide
-/o 500,549,121,0,48 0 0370 -- oslash
-char248 "
-`u 611,690,15,0,6 2 0371 -- ugrave
-char249 "
-'u 611,690,15,0,6 2 0372 -- uacute
-char250 "
-^u 611,690,15,0,6 2 0373 -- ucircumflex
-char251 "
-:u 611,646,15,0,6 2 0374 -- udieresis
-char252 "
-'y 500,690,205,0,133 3 0375 -- yacute
-char253 "
-Tp 574,737,205,0,151 3 0376 -- thorn
-char254 "
-:y 500,646,205,0,133 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/NR b/contrib/groff/devps/NR
deleted file mode 100644
index b111f5d..0000000
--- a/contrib/groff/devps/NR
+++ /dev/null
@@ -1,522 +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 char173 -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 char173 -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 char173 -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 char173 -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
-, ' -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
-. ' -37
-. cq -37
-. rq -37
-lq A -74
-` ` -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 char173 -37
-r , -100
-s . -25
-s , -25
-v . -125
-v , -125
-w . -125
-w , -125
-w a -18
-y . -125
-y , -125
-charset
-ha 606,690 2 0000 -- asciicircum
-ti 606,322 0 0001 -- asciitilde
-vS 630,933,15 2 0002 -- Scaron
-vZ 611,933 2 0003 -- Zcaron
-vs 463,695,15 2 0004 -- scaron
-vz 481,695 2 0005 -- zcaron
-:Y 704,883 2 0006 -- Ydieresis
-tm 1000,722 2 0007 -- trademark
-aq 204,737 2 0010 -- quotesingle
-space 278 0 0040
-! 296,737,15 2 0041 -- exclam
-" 389,737 2 0042 -- quotedbl
-dq "
-# 556,690 2 0043 -- numbersign
-sh "
-$ 556,813,138 2 0044 -- dollar
-Do "
-% 833,705,15 2 0045 -- percent
-& 815,737,15 2 0046 -- ampersand
-' 204,737 2 0047 -- quoteright
-cq "
-( 333,745,117 2 0050 -- parenleft
-) 333,745,117 2 0051 -- parenright
-* 500,737 2 0052 -- asterisk
-+ 606,506 0 0053 -- plus
-, 278,109,185 0 0054 -- comma
-- 333,277 0 0055 -- hyphen
-hy "
-char173 "
-. 278,109,15 0 0056 -- period
-/ 278,737,15 2 0057 -- slash
-sl "
-0 556,705,15 2 0060 -- zero
-1 556,705 2 0061 -- one
-2 556,705 2 0062 -- two
-3 556,705,15 2 0063 -- three
-4 556,705 2 0064 -- four
-5 556,705,15 2 0065 -- five
-6 556,705,15 2 0066 -- six
-7 556,705,15 2 0067 -- seven
-8 556,705,15 2 0070 -- eight
-9 556,705,15 2 0071 -- nine
-: 278,474,15 0 0072 -- colon
-; 278,474,185 0 0073 -- semicolon
-< 606,514,8 0 0074 -- less
-= 606,389 0 0075 -- equal
-> 606,514,8 0 0076 -- greater
-? 444,737,15 2 0077 -- question
-@ 737,737,15 2 0100 -- at
-at "
-A 722,737 2 0101 -- A
-B 722,722 2 0102 -- B
-C 722,737,15 2 0103 -- C
-D 778,722 2 0104 -- D
-E 722,722 2 0105 -- E
-F 667,722 2 0106 -- F
-G 778,737,15 2 0107 -- G
-H 833,722 2 0110 -- H
-I 407,722 2 0111 -- I
-J 556,722,15 2 0112 -- J
-K 778,722 2 0113 -- K
-L 667,722 2 0114 -- L
-M 944,722 2 0115 -- M
-N 815,722,15 2 0116 -- N
-O 778,737,15 2 0117 -- O
-P 667,722 2 0120 -- P
-Q 778,737,190 2 0121 -- Q
-R 722,722,15 2 0122 -- R
-S 630,737,15 2 0123 -- S
-T 667,722 2 0124 -- T
-U 815,722,15 2 0125 -- U
-V 722,722,10 2 0126 -- V
-W 981,722,10 2 0127 -- W
-X 704,722 2 0130 -- X
-Y 704,722 2 0131 -- Y
-Z 611,722 2 0132 -- Z
-[ 333,737,109 2 0133 -- bracketleft
-lB "
-\ 606,737,15 2 0134 -- backslash
-rs "
-] 333,737,109 2 0135 -- bracketright
-rB "
-a^ 333,695 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 204,737 2 0140 -- quoteleft
-oq "
-a 556,479,15 0 0141 -- a
-b 556,737,15 2 0142 -- b
-c 444,479,15 0 0143 -- c
-d 574,737,15 2 0144 -- d
-e 500,479,15 0 0145 -- e
-f 333,737 2 0146 -- f
-g 537,494,205 1 0147 -- g
-h 611,737 2 0150 -- h
-i 315,722 2 0151 -- i
-j 296,722,205 3 0152 -- j
-k 593,737 2 0153 -- k
-l 315,737 2 0154 -- l
-m 889,479 0 0155 -- m
-n 611,479 0 0156 -- n
-o 500,479,15 0 0157 -- o
-p 574,479,205 1 0160 -- p
-q 556,479,205 1 0161 -- q
-r 444,479 0 0162 -- r
-s 463,479,15 0 0163 -- s
-t 389,666,15 2 0164 -- t
-u 611,464,15 0 0165 -- u
-v 537,464,10 0 0166 -- v
-w 778,464,10 0 0167 -- w
-x 537,464 0 0170 -- x
-y 537,464,205 1 0171 -- y
-z 481,464 0 0172 -- z
-lC 333,737,109 2 0173 -- braceleft
-{ "
-ba 606,750,250 3 0174 -- bar
-| "
-rC 333,737,109 2 0175 -- braceright
-} "
-a~ 333,655 0 0176 -- tilde
-~ "
-bq 204,109,185 0 0200 -- quotesinglbase
-Fo 426,398 0 0201 -- guillemotleft
-char171 "
-Fc 426,398 0 0202 -- guillemotright
-char187 "
-bu 606,542 0 0203 -- bullet
-Fn 556,737,205 3 0204 -- florin
-f/ 167,705,15 2 0205 -- fraction
-%0 1000,705,15 2 0206 -- perthousand
-dg 500,737,147 2 0207 -- dagger
-dd 500,737,149 2 0210 -- daggerdbl
-en 556,268 0 0211 -- endash
-em 1000,268 0 0212 -- emdash
-fi 611,737 2 0214 -- fi
-fl 611,737 2 0215 -- fl
-.i 315,464 0 0220 -- dotlessi
-ga 333,699 2 0222 -- grave
-a" 333,699 2 0223 -- hungarumlaut
-a. 333,645 0 0224 -- dotaccent
-ab 333,685 2 0225 -- breve
-ah 333,695 2 0226 -- caron
-ao 333,722 2 0227 -- ring
-ho 333,0,215 1 0230 -- ogonek
-lq 389,737 2 0231 -- quotedblleft
-rq 389,737 2 0232 -- quotedblright
-oe 833,479,15 0 0233 -- oe
-/l 315,737 2 0234 -- lslash
-Bq 389,109,185 0 0235 -- quotedblbase
-OE 1000,722 2 0236 -- OE
-/L 667,722 2 0237 -- Lslash
-r! 296,547,205 1 0241 -- exclamdown
-char161 "
-ct 556,584,141 0 0242 -- cent
-char162 "
-Po 556,705,15 2 0243 -- sterling
-char163 "
-Cs 556,597 0 0244 -- currency
-char164 "
-Ye 556,690 2 0245 -- yen
-char165 "
-bb 606,675,175 2 0246 -- brokenbar
-char166 "
-sc 500,737,147 2 0247 -- section
-char167 "
-ad 333,645 0 0250 -- dieresis
-char168 "
-co 737,737,15 2 0251 -- copyright
-char169 "
-Of 334,705 2 0252 -- ordfeminine
-char170 "
-fo 259,398 0 0253 -- guilsinglleft
-no 606,389 0 0254 -- logicalnot
-char172 "
-\- 606,289 0 0255 -- minus
-rg 737,737,15 2 0256 -- registered
-char174 "
-a- 333,623 0 0257 -- macron
-char175 "
-de 400,705 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
-S2 333,705 2 0262 -- twosuperior
-char178 "
-S3 333,705 2 0263 -- threesuperior
-char179 "
-aa 333,699 2 0264 -- acute
-char180 "
-char181 611,464,205 1 0265 -- mu
-ps 606,722,132 2 0266 -- paragraph
-char182 "
-pc 278,374 0 0267 -- periodcentered
-char183 "
-ac 333,0,215 1 0270 -- cedilla
-char184 "
-S1 333,705 2 0271 -- onesuperior
-char185 "
-Om 300,705 2 0272 -- ordmasculine
-char186 "
-fc 259,398 0 0273 -- guilsinglright
-14 834,705,15 2 0274 -- onequarter
-char188 "
-12 834,705,15 2 0275 -- onehalf
-char189 "
-34 834,705,15 2 0276 -- threequarters
-char190 "
-r? 444,547,205 1 0277 -- questiondown
-char191 "
-`A 722,937 2 0300 -- Agrave
-char192 "
-'A 722,937 2 0301 -- Aacute
-char193 "
-^A 722,933 2 0302 -- Acircumflex
-char194 "
-~A 722,893 2 0303 -- Atilde
-char195 "
-:A 722,883 2 0304 -- Adieresis
-char196 "
-oA 722,965 2 0305 -- Aring
-char197 "
-AE 1000,722 2 0306 -- AE
-char198 "
-,C 722,737,215 3 0307 -- Ccedilla
-char199 "
-`E 722,937 2 0310 -- Egrave
-char200 "
-'E 722,937 2 0311 -- Eacute
-char201 "
-^E 722,933 2 0312 -- Ecircumflex
-char202 "
-:E 722,883 2 0313 -- Edieresis
-char203 "
-`I 407,937 2 0314 -- Igrave
-char204 "
-'I 407,937 2 0315 -- Iacute
-char205 "
-^I 407,933 2 0316 -- Icircumflex
-char206 "
-:I 407,883 2 0317 -- Idieresis
-char207 "
--D 778,722 2 0320 -- Eth
-char208 "
-~N 815,893,15 2 0321 -- Ntilde
-char209 "
-`O 778,937,15 2 0322 -- Ograve
-char210 "
-'O 778,937,15 2 0323 -- Oacute
-char211 "
-^O 778,933,15 2 0324 -- Ocircumflex
-char212 "
-~O 778,893,15 2 0325 -- Otilde
-char213 "
-:O 778,883,15 2 0326 -- Odieresis
-char214 "
-char215 606,482 0 0327 -- multiply
-/O 778,778,56 2 0330 -- Oslash
-char216 "
-`U 815,937,15 2 0331 -- Ugrave
-char217 "
-'U 815,937,15 2 0332 -- Uacute
-char218 "
-^U 815,933,15 2 0333 -- Ucircumflex
-char219 "
-:U 815,883,15 2 0334 -- Udieresis
-char220 "
-'Y 704,937 2 0335 -- Yacute
-char221 "
-TP 667,722 2 0336 -- Thorn
-char222 "
-ss 574,737,15 2 0337 -- germandbls
-char223 "
-`a 556,699,15 2 0340 -- agrave
-char224 "
-'a 556,699,15 2 0341 -- aacute
-char225 "
-^a 556,695,15 2 0342 -- acircumflex
-char226 "
-~a 556,655,15 0 0343 -- atilde
-char227 "
-:a 556,645,15 0 0344 -- adieresis
-char228 "
-oa 556,732,15 2 0345 -- aring
-char229 "
-ae 796,479,15 0 0346 -- ae
-char230 "
-,c 444,479,215 1 0347 -- ccedilla
-char231 "
-`e 500,699,15 2 0350 -- egrave
-char232 "
-'e 500,699,15 2 0351 -- eacute
-char233 "
-^e 500,695,15 2 0352 -- ecircumflex
-char234 "
-:e 500,645,15 0 0353 -- edieresis
-char235 "
-`i 315,699 2 0354 -- igrave
-char236 "
-'i 315,699 2 0355 -- iacute
-char237 "
-^i 315,695 2 0356 -- icircumflex
-char238 "
-:i 315,645 0 0357 -- idieresis
-char239 "
-Sd 500,752,15 2 0360 -- eth
-char240 "
-~n 611,655 0 0361 -- ntilde
-char241 "
-`o 500,699,15 2 0362 -- ograve
-char242 "
-'o 500,699,15 2 0363 -- oacute
-char243 "
-^o 500,695,15 2 0364 -- ocircumflex
-char244 "
-~o 500,655,15 0 0365 -- otilde
-char245 "
-:o 500,645,15 0 0366 -- odieresis
-char246 "
-char247 606,528,22 0 0367 -- divide
-/o 500,561,97 0 0370 -- oslash
-char248 "
-`u 611,699,15 2 0371 -- ugrave
-char249 "
-'u 611,699,15 2 0372 -- uacute
-char250 "
-^u 611,695,15 2 0373 -- ucircumflex
-char251 "
-:u 611,645,15 0 0374 -- udieresis
-char252 "
-'y 537,699,205 3 0375 -- yacute
-char253 "
-Tp 574,737,205 3 0376 -- thorn
-char254 "
-:y 537,645,205 1 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/PB b/contrib/groff/devps/PB
deleted file mode 100644
index 0f327d3..0000000
--- a/contrib/groff/devps/PB
+++ /dev/null
@@ -1,461 +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 ' -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 ' -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 char173 -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 char173 -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 char173 -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 char173 -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
-' 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 char173 -18
-r , -55
-v . -111
-v , -111
-w . -92
-w , -92
-y . -92
-y , -92
-charset
-ha 606,678 2 0000 -- asciicircum
-ti 606,342 0 0001 -- asciitilde
-vS 611,909,17 2 0002 -- Scaron
-vZ 667,909,3 2 0003 -- Zcaron
-vs 444,693,17 2 0004 -- scaron
-vz 500,693,3 2 0005 -- zcaron
-:Y 667,895,3 2 0006 -- Ydieresis
-tm 998,678 2 0007 -- trademark
-aq 227,695 2 0010 -- quotesingle
-space 250 0 0040
-! 278,688,12 2 0041 -- exclam
-" 402,695 2 0042 -- quotedbl
-dq "
-# 500,673 2 0043 -- numbersign
-sh "
-$ 500,721,114 2 0044 -- dollar
-Do "
-% 889,714,9 2 0045 -- percent
-& 833,684,17 2 0046 -- ampersand
-' 278,695 2 0047 -- quoteright
-cq "
-( 333,723,104 2 0050 -- parenleft
-) 333,723,104 2 0051 -- parenright
-* 444,695 2 0052 -- asterisk
-+ 606,505 0 0053 -- plus
-, 250,141,166 0 0054 -- comma
-- 333,305 0 0055 -- hyphen
-hy "
-char173 "
-. 250,144,12 0 0056 -- period
-/ 296,720,17 2 0057 -- slash
-sl "
-0 500,660,17 2 0060 -- zero
-1 500,670,3 2 0061 -- one
-2 500,660,3 2 0062 -- two
-3 500,660,17 2 0063 -- three
-4 500,672,3 2 0064 -- four
-5 500,656,17 2 0065 -- five
-6 500,660,17 2 0066 -- six
-7 500,656,3 2 0067 -- seven
-8 500,660,17 2 0070 -- eight
-9 500,660,17 2 0071 -- nine
-: 250,454,12 0 0072 -- colon
-; 250,454,166 0 0073 -- semicolon
-< 606,519,15 0 0074 -- less
-= 606,396 0 0075 -- equal
-> 606,519,15 0 0076 -- greater
-? 444,687,12 2 0077 -- question
-@ 747,681,12 2 0100 -- at
-at "
-A 778,686,3 2 0101 -- A
-B 667,681,3 2 0102 -- B
-C 722,695,17 2 0103 -- C
-D 833,681,3 2 0104 -- D
-E 611,681,4 2 0105 -- E
-F 556,681,3 2 0106 -- F
-G 833,695,17 2 0107 -- G
-H 833,681,3 2 0110 -- H
-I 389,681,3 2 0111 -- I
-J 389,681,213 2 0112 -- J
-K 778,681,3 2 0113 -- K
-L 611,681,4 2 0114 -- L
-M 1000,681,10 2 0115 -- M
-N 833,681,16 2 0116 -- N
-O 833,695,17 2 0117 -- O
-P 611,681,3 2 0120 -- P
-Q 833,695,184 2 0121 -- Q
-R 722,681,3 2 0122 -- R
-S 611,695,17 2 0123 -- S
-T 667,681,3 2 0124 -- T
-U 778,681,17 2 0125 -- U
-V 778,681,3 2 0126 -- V
-W 1000,686,3 2 0127 -- W
-X 667,695,3 2 0130 -- X
-Y 667,695,3 2 0131 -- Y
-Z 667,681,3 2 0132 -- Z
-[ 333,720,104 2 0133 -- bracketleft
-lB "
-\ 606,720 2 0134 -- backslash
-rs "
-] 333,720,104 2 0135 -- bracketright
-rB "
-a^ 333,681 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 278,695 2 0140 -- quoteleft
-oq "
-a 500,471,17 0 0141 -- a
-b 611,720,17 2 0142 -- b
-c 444,471,17 0 0143 -- c
-d 611,720,17 2 0144 -- d
-e 500,471,17 0 0145 -- e
-f 389,720,3 2 0146 -- f
-g 556,471,266 1 0147 -- g
-h 611,720,3 2 0150 -- h
-i 333,706,3 2 0151 -- i
-j 333,706,266 3 0152 -- j
-k 611,720,3 2 0153 -- k
-l 333,720,3 2 0154 -- l
-m 889,471,3 0 0155 -- m
-n 611,471,3 0 0156 -- n
-o 556,471,17 0 0157 -- o
-p 611,471,258 1 0160 -- p
-q 611,471,258 1 0161 -- q
-r 389,471,3 0 0162 -- r
-s 444,471,17 0 0163 -- s
-t 333,632,17 2 0164 -- t
-u 611,471,17 0 0165 -- u
-v 556,459,3 0 0166 -- v
-w 833,471,3 0 0167 -- w
-x 500,471,3 0 0170 -- x
-y 556,459,266 1 0171 -- y
-z 500,459,3 0 0172 -- z
-lC 310,725,117 2 0173 -- braceleft
-{ "
-ba 606,720 2 0174 -- bar
-| "
-rC 310,725,117 2 0175 -- braceright
-} "
-a~ 333,661 2 0176 -- tilde
-~ "
-bq 333,130,160 0 0200 -- quotesinglbase
-Fo 500,438 0 0201 -- guillemotleft
-char171 "
-Fc 500,438 0 0202 -- guillemotright
-char187 "
-bu 606,516 0 0203 -- bullet
-Fn 500,703,242 2 0204 -- florin
-f/ 167,660 2 0205 -- fraction
-%0 1000,724,9 2 0206 -- perthousand
-dg 500,682,6 2 0207 -- dagger
-dd 500,682,245 2 0210 -- daggerdbl
-en 500,291 0 0211 -- endash
-em 1000,291 0 0212 -- emdash
-fi 611,720,3 2 0214 -- fi
-fl 611,720,3 2 0215 -- fl
-.i 333,471,3 0 0220 -- dotlessi
-ga 333,691 2 0222 -- grave
-a" 333,691 2 0223 -- hungarumlaut
-a. 333,671 2 0224 -- dotaccent
-ab 333,669 2 0225 -- breve
-ah 333,685 2 0226 -- caron
-ao 333,700 2 0227 -- ring
-ho 333,0,246 0 0230 -- ogonek
-lq 500,695 2 0231 -- quotedblleft
-rq 500,695 2 0232 -- quotedblright
-oe 833,471,17 0 0233 -- oe
-/l 333,720,3 2 0234 -- lslash
-Bq 500,130,160 0 0235 -- quotedblbase
-OE 1000,695,17 2 0236 -- OE
-/L 611,681,4 2 0237 -- Lslash
-r! 278,471,227 0 0241 -- exclamdown
-char161 "
-ct 500,554,106 0 0242 -- cent
-char162 "
-Po 500,676,19 2 0243 -- sterling
-char163 "
-Cs 500,533 0 0244 -- currency
-char164 "
-Ye 500,695,3 2 0245 -- yen
-char165 "
-bb 606,720 2 0246 -- brokenbar
-char166 "
-sc 500,695,217 2 0247 -- section
-char167 "
-ad 333,671 2 0250 -- dieresis
-char168 "
-co 747,695,17 2 0251 -- copyright
-char169 "
-Of 438,660 2 0252 -- ordfeminine
-char170 "
-fo 389,438 0 0253 -- guilsinglleft
-no 606,396 0 0254 -- logicalnot
-char172 "
-\- 606,298 0 0255 -- minus
-rg 747,695,17 2 0256 -- registered
-char174 "
-a- 333,609 0 0257 -- macron
-char175 "
-de 400,660 2 0260 -- degree
-char176 "
-char177 606,505 0 0261 -- plusminus
-S2 300,660 2 0262 -- twosuperior
-char178 "
-S3 300,667 2 0263 -- threesuperior
-char179 "
-aa 333,691 2 0264 -- acute
-char180 "
-char181 611,471,225 0 0265 -- mu
-ps 641,683,161 2 0266 -- paragraph
-char182 "
-pc 250,335 0 0267 -- periodcentered
-char183 "
-ac 333,0,225 0 0270 -- cedilla
-char184 "
-S1 300,665 2 0271 -- onesuperior
-char185 "
-Om 488,660 2 0272 -- ordmasculine
-char186 "
-fc 389,438 0 0273 -- guilsinglright
-14 750,665,2 2 0274 -- onequarter
-char188 "
-12 750,665,2 2 0275 -- onehalf
-char189 "
-34 750,667,2 2 0276 -- threequarters
-char190 "
-r? 444,471,231 0 0277 -- questiondown
-char191 "
-`A 778,915,3 2 0300 -- Agrave
-char192 "
-'A 778,915,3 2 0301 -- Aacute
-char193 "
-^A 778,905,3 2 0302 -- Acircumflex
-char194 "
-~A 778,885,3 2 0303 -- Atilde
-char195 "
-:A 778,895,3 2 0304 -- Adieresis
-char196 "
-oA 778,924,3 2 0305 -- Aring
-char197 "
-AE 1000,681,4 2 0306 -- AE
-char198 "
-,C 722,695,225 2 0307 -- Ccedilla
-char199 "
-`E 611,915,4 2 0310 -- Egrave
-char200 "
-'E 611,915,4 2 0311 -- Eacute
-char201 "
-^E 611,905,4 2 0312 -- Ecircumflex
-char202 "
-:E 611,895,4 2 0313 -- Edieresis
-char203 "
-`I 389,915,3 2 0314 -- Igrave
-char204 "
-'I 389,915,3 2 0315 -- Iacute
-char205 "
-^I 389,905,3 2 0316 -- Icircumflex
-char206 "
-:I 389,895,3 2 0317 -- Idieresis
-char207 "
--D 833,681,3 2 0320 -- Eth
-char208 "
-~N 833,885,16 2 0321 -- Ntilde
-char209 "
-`O 833,915,17 2 0322 -- Ograve
-char210 "
-'O 833,915,17 2 0323 -- Oacute
-char211 "
-^O 833,905,17 2 0324 -- Ocircumflex
-char212 "
-~O 833,885,17 2 0325 -- Otilde
-char213 "
-:O 833,895,17 2 0326 -- Odieresis
-char214 "
-char215 606,483 0 0327 -- multiply
-/O 833,698,20 2 0330 -- Oslash
-char216 "
-`U 778,915,17 2 0331 -- Ugrave
-char217 "
-'U 778,915,17 2 0332 -- Uacute
-char218 "
-^U 778,905,17 2 0333 -- Ucircumflex
-char219 "
-:U 778,895,17 2 0334 -- Udieresis
-char220 "
-'Y 667,915,3 2 0335 -- Yacute
-char221 "
-TP 611,681,3 2 0336 -- Thorn
-char222 "
-ss 611,720,17 2 0337 -- germandbls
-char223 "
-`a 500,711,17 2 0340 -- agrave
-char224 "
-'a 500,711,17 2 0341 -- aacute
-char225 "
-^a 500,701,17 2 0342 -- acircumflex
-char226 "
-~a 500,673,17 2 0343 -- atilde
-char227 "
-:a 500,691,17 2 0344 -- adieresis
-char228 "
-oa 500,700,17 2 0345 -- aring
-char229 "
-ae 778,471,17 0 0346 -- ae
-char230 "
-,c 444,471,225 0 0347 -- ccedilla
-char231 "
-`e 500,711,17 2 0350 -- egrave
-char232 "
-'e 500,711,17 2 0351 -- eacute
-char233 "
-^e 500,701,17 2 0352 -- ecircumflex
-char234 "
-:e 500,691,17 2 0353 -- edieresis
-char235 "
-`i 333,711,3 2 0354 -- igrave
-char236 "
-'i 333,711,3 2 0355 -- iacute
-char237 "
-^i 333,701,3 2 0356 -- icircumflex
-char238 "
-:i 333,691,3 2 0357 -- idieresis
-char239 "
-Sd 556,720,17 2 0360 -- eth
-char240 "
-~n 611,673,3 2 0361 -- ntilde
-char241 "
-`o 556,711,17 2 0362 -- ograve
-char242 "
-'o 556,711,17 2 0363 -- oacute
-char243 "
-^o 556,701,17 2 0364 -- ocircumflex
-char244 "
-~o 556,673,17 2 0365 -- otilde
-char245 "
-:o 556,691,17 2 0366 -- odieresis
-char246 "
-char247 606,510 0 0367 -- divide
-/o 556,471,18 0 0370 -- oslash
-char248 "
-`u 611,711,17 2 0371 -- ugrave
-char249 "
-'u 611,711,17 2 0372 -- uacute
-char250 "
-^u 611,701,17 2 0373 -- ucircumflex
-char251 "
-:u 611,691,17 2 0374 -- udieresis
-char252 "
-'y 556,711,266 3 0375 -- yacute
-char253 "
-Tp 611,720,258 3 0376 -- thorn
-char254 "
-:y 556,691,266 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/PBI b/contrib/groff/devps/PBI
deleted file mode 100644
index 7ec5ff3..0000000
--- a/contrib/groff/devps/PBI
+++ /dev/null
@@ -1,463 +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 ' -55
-A cq -55
-A Y -74
-A W -74
-A V -74
-A T -55
-F . -111
-F , -111
-F A -74
-L y -37
-L ' -55
-L cq -55
-L Y -74
-L W -74
-L V -74
-L T -74
-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 char173 -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 char173 -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 char173 -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
-' 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 0000 -- asciicircum
-ti 606,346,0,0,-1 0 0001 -- asciitilde
-vS 556,896,17,51,0,51 2 0002 -- Scaron
-vZ 667,896,3,59,49,59 2 0003 -- Zcaron
-vs 444,692,17,95,25,66 2 0004 -- scaron
-vz 500,692,17,67,19,66 2 0005 -- zcaron
-:Y 611,880,3,114,-4,66 2 0006 -- Ydieresis
-tm 1000,678,0,11,12,11 2 0007 -- trademark
-aq 250,720,0,93,-77,66 2 0010 -- quotesingle
-space 250 0 0040
-! 333,695,17,39,-8,39 2 0041 -- exclam
-" 500,720,0,43,-87,43 2 0042 -- quotedbl
-dq "
-# 500,673,0,46,46,46 2 0043 -- numbersign
-sh "
-$ 500,737,108,27,30,27 2 0044 -- dollar
-Do "
-% 889,697,17,0,-6 2 0045 -- percent
-& 833,695,17,28,-24,28 2 0046 -- ampersand
-' 278,720,0,74,-26,66 2 0047 -- quoteright
-cq "
-( 333,723,129,85,-8,66 2 0050 -- parenleft
-) 333,723,129,15,62,15 2 0051 -- parenright
-* 444,695,0,45,-34,45 2 0052 -- asterisk
-+ 606,501,5 0 0053 -- plus
-, 250,147,164,8,83,8 0 0054 -- comma
-- 389,300,0,23,13,23 0 0055 -- hyphen
-hy "
-char173 "
-. 250,135,17,0,2 0 0056 -- period
-/ 315,720,17,50,49,50 2 0057 -- slash
-sl "
-0 500,683,17,40,8,40 2 0060 -- zero
-1 500,678,3,0,9 2 0061 -- one
-2 500,683,3,4,49,4 2 0062 -- two
-3 500,683,17,0,42 2 0063 -- three
-4 500,683,3,37,47,37 2 0064 -- four
-5 500,675,17,31,36,31 2 0065 -- five
-6 500,683,17,38,11,38 2 0066 -- six
-7 500,674,3,94,-19,66 2 0067 -- seven
-8 500,683,17,34,24,34 2 0070 -- eight
-9 500,683,17,41,23,41 2 0071 -- nine
-: 250,452,17,36,12,36 0 0072 -- colon
-; 250,452,164,47,83,47 0 0073 -- semicolon
-< 606,517,21,2,1,2 0 0074 -- less
-= 606,390,0,0,-1 0 0075 -- equal
-> 606,517,21,1,2,1 0 0076 -- greater
-? 444,695,17,56,-41,56 2 0077 -- question
-@ 833,681,12,0,-32 2 0100 -- at
-at "
-A 722,683,3,13,85,13 2 0101 -- A
-B 667,681,3,12,42,12 2 0102 -- B
-C 685,695,17,60,-19,60 2 0103 -- C
-D 778,682,3,19,50,19 2 0104 -- D
-E 611,681,3,45,39,45 2 0105 -- E
-F 556,681,3,87,56,66 2 0106 -- F
-G 778,695,17,22,-22,22 2 0107 -- G
-H 778,681,3,98,62,66 2 0110 -- H
-I 389,681,3,73,51,66 2 0111 -- I
-J 389,681,207,78,79,66 2 0112 -- J
-K 722,681,3,74,60,66 2 0113 -- K
-L 611,681,3,17,24,17 2 0114 -- L
-M 944,681,17,91,73,66 2 0115 -- M
-N 778,681,3,101,52,66 2 0116 -- N
-O 833,695,17,11,-26,11 2 0117 -- O
-P 667,681,3,56,39,56 2 0120 -- P
-Q 833,695,222,11,-26,11 2 0121 -- Q
-R 722,681,3,25,46,25 2 0122 -- R
-S 556,695,17,11,0,11 2 0123 -- S
-T 611,681,3,113,-6,66 2 0124 -- T
-U 778,681,17,97,-33,66 2 0125 -- U
-V 667,681,3,128,-17,66 2 0126 -- V
-W 1000,689,3,123,-17,66 2 0127 -- W
-X 722,681,3,100,59,66 2 0130 -- X
-Y 611,695,3,114,-4,66 2 0131 -- Y
-Z 667,681,3,59,49,59 2 0132 -- Z
-[ 333,723,102,98,5,66 2 0133 -- bracketleft
-lB "
-\ 606,720,0,0,-22 2 0134 -- backslash
-rs "
-] 333,723,102,32,71,32 2 0135 -- bracketright
-rB "
-a^ 333,684,0,132,-38,66 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 278,720,0,63,-15,63 2 0140 -- quoteleft
-oq "
-a 556,470,17,13,6,13 0 0141 -- a
-b 537,726,17,7,6,7 2 0142 -- b
-c 444,469,17,42,18,42 0 0143 -- c
-d 556,726,17,44,12,44 2 0144 -- d
-e 444,469,17,24,22,24 0 0145 -- e
-f 333,726,271,166,180,66 3 0146 -- f
-g 500,469,271,79,100,66 1 0147 -- g
-h 556,726,17,16,28,16 2 0150 -- h
-i 333,695,17,29,24,29 2 0151 -- i
-j 333,695,271,40,114,40 3 0152 -- j
-k 556,726,17,22,16,22 2 0153 -- k
-l 333,726,17,35,-14,35 2 0154 -- l
-m 833,469,17,20,31,20 0 0155 -- m
-n 556,469,17,15,33,15 0 0156 -- n
-o 556,469,17,0,2 0 0157 -- o
-p 556,469,271,10,71,10 1 0160 -- p
-q 537,469,271,26,18,26 1 0161 -- q
-r 389,469,17,72,30,66 0 0162 -- r
-s 444,469,17,12,25,12 0 0163 -- s
-t 389,636,17,70,8,66 2 0164 -- t
-u 556,469,17,15,28,15 0 0165 -- u
-v 556,469,17,7,31,7 0 0166 -- v
-w 833,469,17,19,23,19 0 0167 -- w
-x 500,469,17,50,58,50 0 0170 -- x
-y 556,469,271,35,37,35 1 0171 -- y
-z 500,469,17,20,19,20 0 0172 -- z
-lC 333,720,105,51,32,51 2 0173 -- braceleft
-{ "
-ba 606,720,0,0,-209 2 0174 -- bar
-| "
-rC 333,720,105,32,51,32 2 0175 -- braceright
-} "
-a~ 333,654,0,158,-32,66 2 0176 -- tilde
-~ "
-bq 250,145,144,20,53,20 0 0200 -- quotesinglbase
-Fo 500,446,0,8,15,8 0 0201 -- guillemotleft
-char171 "
-Fc 500,443,0,8,15,8 0 0202 -- guillemotright
-char187 "
-bu 606,516,0,0,-81 0 0203 -- bullet
-Fn 500,690,242,29,42,29 2 0204 -- florin
-f/ 167,683,0,221,220,66 2 0205 -- fraction
-%0 1000,691,17,0,-15 2 0206 -- perthousand
-dg 556,685,3,0,-17 2 0207 -- dagger
-dd 556,693,153,31,17,31 2 0210 -- daggerdbl
-en 500,282,0,62,62,62 0 0211 -- endash
-em 1000,282,0,62,62,62 0 0212 -- emdash
-fi 611,726,271,27,180,27 3 0214 -- fi
-fl 611,726,271,70,180,66 3 0215 -- fl
-.i 333,469,17,10,24,10 0 0220 -- dotlessi
-ga 333,699,0,39,-60,39 2 0222 -- grave
-a" 333,699,0,126,78,66 2 0223 -- hungarumlaut
-a. 333,668,0,42,-152,42 2 0224 -- dotaccent
-ab 333,680,0,129,-46,66 2 0225 -- breve
-ah 333,684,0,162,-63,66 2 0226 -- caron
-ao 556,714,0,0,-227 2 0227 -- ring
-ho 333,0,206,0,18 0 0230 -- ogonek
-lq 500,720,0,61,-15,61 2 0231 -- quotedblleft
-rq 500,720,0,69,-23,66 2 0232 -- quotedblright
-oe 778,469,17,27,2,27 0 0233 -- oe
-/l 333,726,17,82,37,66 2 0234 -- lslash
-Bq 500,145,144,0,68 0 0235 -- quotedblbase
-OE 944,695,17,67,11,66 2 0236 -- OE
-/L 611,681,3,17,44,17 2 0237 -- Lslash
-r! 333,479,225,0,48 0 0241 -- exclamdown
-char161 "
-ct 500,547,105,6,-2,6 0 0242 -- cent
-char162 "
-Po 500,683,5,51,29,51 2 0243 -- sterling
-char163 "
-Cs 500,533,0,18,18,18 0 0244 -- currency
-char164 "
-Ye 500,695,3,88,39,66 2 0245 -- yen
-char165 "
-bb 606,720,0,0,-209 2 0246 -- brokenbar
-char166 "
-sc 556,695,151,0,3 2 0247 -- section
-char167 "
-ad 333,668,0,143,-40,66 2 0250 -- dieresis
-char168 "
-co 747,695,17,23,24,23 2 0251 -- copyright
-char169 "
-Of 333,684,0,72,3,66 2 0252 -- ordfeminine
-char170 "
-fo 333,446,0,9,-10,9 0 0253 -- guilsinglleft
-no 606,390,0,0,-1 0 0254 -- logicalnot
-char172 "
-\- 606,292,0,0,-1 0 0255 -- minus
-rg 747,695,17,23,24,23 2 0256 -- registered
-char174 "
-a- 333,608,0,135,-26,66 0 0257 -- macron
-char175 "
-de 400,683 2 0260 -- degree
-char176 "
-char177 606,501 0 0261 -- plusminus
-S2 300,683,0,71,24,66 2 0262 -- twosuperior
-char178 "
-S3 300,683,0,60,27,60 2 0263 -- threesuperior
-char179 "
-aa 333,699,0,109,-103,66 2 0264 -- acute
-char180 "
-char181 556,469,232,15,65,15 0 0265 -- mu
-ps 556,681,204,123,36,66 2 0266 -- paragraph
-char182 "
-pc 250,324,0,6,-17,6 0 0267 -- periodcentered
-char183 "
-ac 333,5,218,0,38 0 0270 -- cedilla
-char184 "
-S1 300,680,0,48,9,48 2 0271 -- onesuperior
-char185 "
-Om 333,683,0,63,-1,63 2 0272 -- ordmasculine
-char186 "
-fc 333,443,0,0,15 0 0273 -- guilsinglright
-14 750,683,2,32,32,32 2 0274 -- onequarter
-char188 "
-12 750,683,2,36,36,36 2 0275 -- onehalf
-char189 "
-34 750,683,2,32,32,32 2 0276 -- threequarters
-char190 "
-r? 444,479,226,0,62 0 0277 -- questiondown
-char191 "
-`A 722,911,3,13,85,13 2 0300 -- Agrave
-char192 "
-'A 722,911,3,13,85,13 2 0301 -- Aacute
-char193 "
-^A 722,896,3,13,85,13 2 0302 -- Acircumflex
-char194 "
-~A 722,866,3,13,85,13 2 0303 -- Atilde
-char195 "
-:A 722,880,3,13,85,13 2 0304 -- Adieresis
-char196 "
-oA 722,926,3,13,85,13 2 0305 -- Aring
-char197 "
-AE 944,681,3,33,79,33 2 0306 -- AE
-char198 "
-,C 685,695,218,60,-19,60 2 0307 -- Ccedilla
-char199 "
-`E 611,911,3,45,39,45 2 0310 -- Egrave
-char200 "
-'E 611,911,3,45,39,45 2 0311 -- Eacute
-char201 "
-^E 611,896,3,45,39,45 2 0312 -- Ecircumflex
-char202 "
-:E 611,880,3,45,39,45 2 0313 -- Edieresis
-char203 "
-`I 389,911,3,73,51,66 2 0314 -- Igrave
-char204 "
-'I 389,911,3,81,51,66 2 0315 -- Iacute
-char205 "
-^I 389,896,3,104,51,66 2 0316 -- Icircumflex
-char206 "
-:I 389,880,3,115,51,66 2 0317 -- Idieresis
-char207 "
--D 778,682,3,19,50,19 2 0320 -- Eth
-char208 "
-~N 778,866,3,101,52,66 2 0321 -- Ntilde
-char209 "
-`O 833,911,17,11,-26,11 2 0322 -- Ograve
-char210 "
-'O 833,911,17,11,-26,11 2 0323 -- Oacute
-char211 "
-^O 833,896,17,11,-26,11 2 0324 -- Ocircumflex
-char212 "
-~O 833,866,17,11,-26,11 2 0325 -- Otilde
-char213 "
-:O 833,880,17,11,-26,11 2 0326 -- Odieresis
-char214 "
-char215 606,479,0,0,-22 0 0327 -- multiply
-/O 833,730,54,14,-7,14 2 0330 -- Oslash
-char216 "
-`U 778,911,17,97,-33,66 2 0331 -- Ugrave
-char217 "
-'U 778,911,17,97,-33,66 2 0332 -- Uacute
-char218 "
-^U 778,896,17,97,-33,66 2 0333 -- Ucircumflex
-char219 "
-:U 778,880,17,97,-33,66 2 0334 -- Udieresis
-char220 "
-'Y 611,911,3,114,-4,66 2 0335 -- Yacute
-char221 "
-TP 667,681,3,27,39,27 2 0336 -- Thorn
-char222 "
-ss 556,726,271,43,181,43 3 0337 -- germandbls
-char223 "
-`a 556,719,17,13,6,13 2 0340 -- agrave
-char224 "
-'a 556,719,17,13,6,13 2 0341 -- aacute
-char225 "
-^a 556,704,17,21,6,21 2 0342 -- acircumflex
-char226 "
-~a 556,666,17,47,6,47 2 0343 -- atilde
-char227 "
-:a 556,688,17,32,6,32 2 0344 -- adieresis
-char228 "
-oa 556,714,17,13,6,13 2 0345 -- aring
-char229 "
-ae 738,469,17,23,6,23 0 0346 -- ae
-char230 "
-,c 444,469,218,42,18,42 0 0347 -- ccedilla
-char231 "
-`e 444,719,17,24,22,24 2 0350 -- egrave
-char232 "
-'e 444,719,17,54,22,54 2 0351 -- eacute
-char233 "
-^e 444,704,17,77,22,66 2 0352 -- ecircumflex
-char234 "
-:e 444,688,17,88,22,66 2 0353 -- edieresis
-char235 "
-`i 333,719,17,39,24,39 2 0354 -- igrave
-char236 "
-'i 333,719,17,109,24,66 2 0355 -- iacute
-char237 "
-^i 333,704,17,120,24,66 2 0356 -- icircumflex
-char238 "
-:i 333,688,17,143,24,66 2 0357 -- idieresis
-char239 "
-Sd 556,726,17,40,2,40 2 0360 -- eth
-char240 "
-~n 556,666,17,47,33,47 2 0361 -- ntilde
-char241 "
-`o 556,719,17,0,2 2 0362 -- ograve
-char242 "
-'o 556,719,17,0,2 2 0363 -- oacute
-char243 "
-^o 556,704,17,9,2,9 2 0364 -- ocircumflex
-char244 "
-~o 556,666,17,47,2,47 2 0365 -- otilde
-char245 "
-:o 556,688,17,32,2,32 2 0366 -- odieresis
-char246 "
-char247 606,501,5 0 0367 -- divide
-/o 556,506,50,16,36,16 0 0370 -- oslash
-char248 "
-`u 556,719,17,15,28,15 2 0371 -- ugrave
-char249 "
-'u 556,719,17,15,28,15 2 0372 -- uacute
-char250 "
-^u 556,704,17,15,28,15 2 0373 -- ucircumflex
-char251 "
-:u 556,688,17,32,28,32 2 0374 -- udieresis
-char252 "
-'y 556,719,271,35,37,35 3 0375 -- yacute
-char253 "
-Tp 556,726,271,10,71,10 3 0376 -- thorn
-char254 "
-:y 556,688,271,35,37,35 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/PI b/contrib/groff/devps/PI
deleted file mode 100644
index d35c7f8..0000000
--- a/contrib/groff/devps/PI
+++ /dev/null
@@ -1,465 +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 ' -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 ' -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 char173 -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 char173 -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 char173 -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 char173 -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
-' 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 0000 -- asciicircum
-ti 606,339,0,0,-1 0 0001 -- asciitilde
-vS 556,907,18,33,8,33 2 0002 -- Scaron
-vZ 667,907,3,20,30,20 2 0003 -- Zcaron
-vs 389,687,11,80,41,68 2 0004 -- scaron
-vz 444,687,11,53,51,53 2 0005 -- zcaron
-:Y 667,847,3,58,-2,58 2 0006 -- Ydieresis
-tm 1000,689,0,1,-2,1 2 0007 -- trademark
-aq 333,733,0,5,-90,5 2 0010 -- quotesingle
-space 250 0 0040
-! 333,733,8,9,-26,9 2 0041 -- exclam
-" 500,733,0,5,-90,5 2 0042 -- quotedbl
-dq "
-# 500,692,0,45,46,45 2 0043 -- numbersign
-sh "
-$ 500,733,113,2,35,2 2 0044 -- dollar
-Do "
-% 889,710,7,0,-24 2 0045 -- percent
-& 778,692,18,38,3,38 2 0046 -- ampersand
-' 278,733,0,30,-28,30 2 0047 -- quoteright
-cq "
-( 333,733,106,48,-4,48 2 0050 -- parenleft
-) 333,733,106,0,48 2 0051 -- parenright
-* 389,706,0,61,-26,61 2 0052 -- asterisk
-+ 606,504,0,0,-1 0 0053 -- plus
-, 250,123,143,3,42,3 0 0054 -- comma
-- 333,281,0,21,31,21 0 0055 -- hyphen
-hy "
-char173 "
-. 250,112,5,0,-3 0 0056 -- period
-/ 296,733,119,146,90,68 2 0057 -- slash
-sl "
-0 500,699,11,30,14,30 2 0060 -- zero
-1 500,699,3,0,-4 2 0061 -- one
-2 500,699,3,0,38 2 0062 -- two
-3 500,699,11,0,28 2 0063 -- three
-4 500,699,3,28,35,28 2 0064 -- four
-5 500,693,11,41,36,41 2 0065 -- five
-6 500,699,11,19,1,19 2 0066 -- six
-7 500,692,3,52,-3,52 2 0067 -- seven
-8 500,699,11,19,14,19 2 0070 -- eight
-9 500,699,11,18,18,18 2 0071 -- nine
-: 250,458,5,7,6,7 0 0072 -- colon
-; 250,456,146,19,59,19 0 0073 -- semicolon
-< 606,516,6,0,-3 0 0074 -- less
-= 606,378,0,0,-1 0 0075 -- equal
-> 606,516,6,0,-3 0 0076 -- greater
-? 500,706,8,0,-64 2 0077 -- question
-@ 747,706,18,21,23,21 2 0100 -- at
-at "
-A 722,705,3,5,69,5 2 0101 -- A
-B 611,692,6,0,24 2 0102 -- B
-C 667,706,18,34,5,34 2 0103 -- C
-D 778,692,3,13,22,13 2 0104 -- D
-E 611,692,3,9,20,9 2 0105 -- E
-F 556,692,3,42,50,42 2 0106 -- F
-G 722,706,18,22,0,22 2 0107 -- G
-H 778,692,3,72,53,68 2 0110 -- H
-I 333,692,3,71,43,68 2 0111 -- I
-J 333,692,206,75,85,68 2 0112 -- J
-K 667,692,3,66,37,66 2 0113 -- K
-L 556,692,3,17,34,17 2 0114 -- L
-M 944,692,18,46,69,46 2 0115 -- M
-N 778,692,11,76,48,68 2 0116 -- N
-O 778,706,18,20,-3,20 2 0117 -- O
-P 611,692,3,33,41,33 2 0120 -- P
-Q 778,706,201,20,-3,20 2 0121 -- Q
-R 667,692,3,22,41,22 2 0122 -- R
-S 556,706,18,0,8 2 0123 -- S
-T 611,692,3,74,-3,68 2 0124 -- T
-U 778,692,18,70,-38,68 2 0125 -- U
-V 722,692,8,82,-25,68 2 0126 -- V
-W 944,700,8,86,-21,68 2 0127 -- W
-X 722,692,3,62,30,62 2 0130 -- X
-Y 667,705,3,58,-2,58 2 0131 -- Y
-Z 667,692,3,20,30,20 2 0132 -- Z
-[ 333,733,100,43,32,43 2 0133 -- bracketleft
-lB "
-\ 606,733,0,0,-31 2 0134 -- backslash
-rs "
-] 333,733,100,32,43,32 2 0135 -- bracketright
-rB "
-a^ 333,679,0,67,-6,67 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 278,733,0,30,-28,30 2 0140 -- quoteleft
-oq "
-a 444,482,11,12,46,12 0 0141 -- a
-b 463,733,11,20,13,20 2 0142 -- b
-c 407,482,11,32,25,32 0 0143 -- c
-d 500,733,11,33,33,33 2 0144 -- d
-e 389,482,11,35,35,35 0 0145 -- e
-f 278,733,276,185,212,68 3 0146 -- f
-g 500,482,276,48,87,48 1 0147 -- g
-h 500,733,9,21,40,21 2 0150 -- h
-i 278,712,9,36,16,36 2 0151 -- i
-j 278,712,276,37,120,37 3 0152 -- j
-k 444,733,9,55,42,55 2 0153 -- k
-l 278,733,9,23,14,23 2 0154 -- l
-m 778,482,9,12,26,12 0 0155 -- m
-n 556,482,9,8,26,8 0 0156 -- n
-o 444,482,11,17,33,17 0 0157 -- o
-p 500,482,276,15,57,15 1 0160 -- p
-q 463,482,276,19,26,19 1 0161 -- q
-r 389,482,9,45,24,45 0 0162 -- r
-s 389,482,11,6,41,6 0 0163 -- s
-t 333,646,9,27,9,27 2 0164 -- t
-u 556,482,11,6,18,6 0 0165 -- u
-v 500,482,11,27,29,27 0 0166 -- v
-w 722,482,11,27,29,27 0 0167 -- w
-x 500,482,11,34,41,34 0 0170 -- x
-y 500,482,276,40,58,40 1 0171 -- y
-z 444,482,11,22,51,22 0 0172 -- z
-lC 333,733,100,36,35,36 2 0173 -- braceleft
-{ "
-ba 606,733,0,0,-225 2 0174 -- bar
-| "
-rC 333,733,100,35,36,35 2 0175 -- braceright
-} "
-a~ 333,638,0,107,-13,68 0 0176 -- tilde
-~ "
-bq 278,120,122,0,23 0 0200 -- quotesinglbase
-Fo 500,440,0,0,-7 0 0201 -- guillemotleft
-char171 "
-Fc 500,440,0,0,-13 0 0202 -- guillemotright
-char187 "
-bu 500,526,0,0,-36 0 0203 -- bullet
-Fn 500,708,276,20,45,20 3 0204 -- florin
-f/ 167,699,0,220,220,68 2 0205 -- fraction
-%0 1000,717,6,0,-22 2 0206 -- perthousand
-dg 500,692,0,19,2,19 2 0207 -- dagger
-dd 500,692,162,44,40,44 2 0210 -- daggerdbl
-en 500,278,0,60,60,60 0 0211 -- endash
-em 1000,278,0,60,60,60 0 0212 -- emdash
-fi 528,733,276,24,212,24 3 0214 -- fi
-fl 545,733,276,25,212,25 3 0215 -- fl
-.i 278,482,9,13,16,13 0 0220 -- dotlessi
-ga 333,687,0,27,-36,27 2 0222 -- grave
-a" 333,730,0,102,4,68 2 0223 -- hungarumlaut
-a. 333,645,0,0,-125 2 0224 -- dotaccent
-ab 333,677,0,110,-42,68 2 0225 -- breve
-ah 333,679,0,126,-54,68 2 0226 -- caron
-ao 333,708,0,76,-109,68 2 0227 -- ring
-ho 333,0,207,0,12 0 0230 -- ogonek
-lq 500,733,0,25,-48,25 2 0231 -- quotedblleft
-rq 500,733,0,25,-48,25 2 0232 -- quotedblright
-oe 669,482,11,35,33,35 0 0233 -- oe
-/l 278,733,9,74,60,68 2 0234 -- lslash
-Bq 500,120,122,0,7 0 0235 -- quotedblbase
-OE 1028,706,18,11,-6,11 2 0236 -- OE
-/L 556,692,3,17,66,17 2 0237 -- Lslash
-r! 333,467,276,0,35 1 0241 -- exclamdown
-char161 "
-ct 500,551,96,0,-6 0 0242 -- cent
-char162 "
-Po 500,708,18,29,48,29 2 0243 -- sterling
-char163 "
-Cs 500,577,0,36,36,36 0 0244 -- currency
-char164 "
-Ye 500,699,3,62,15,62 2 0245 -- yen
-char165 "
-bb 606,733,0,0,-225 2 0246 -- brokenbar
-char166 "
-sc 500,706,220,13,36,13 2 0247 -- section
-char167 "
-ad 333,637,0,95,-28,68 0 0250 -- dieresis
-char168 "
-co 747,706,18,39,39,39 2 0251 -- copyright
-char169 "
-Of 333,699,0,38,-10,38 2 0252 -- ordfeminine
-char170 "
-fo 333,440,0,0,-7 0 0253 -- guilsinglleft
-no 606,378,0,0,-1 0 0254 -- logicalnot
-char172 "
-\- 606,280,0,0,-1 0 0255 -- minus
-rg 747,706,18,39,39,39 2 0256 -- registered
-char174 "
-a- 333,589,0,103,-24,68 0 0257 -- macron
-char175 "
-de 400,689,0,40,-40,40 2 0260 -- degree
-char176 "
-char177 606,504,0,0,-1 0 0261 -- plusminus
-S2 300,699,0,40,37,40 2 0262 -- twosuperior
-char178 "
-S3 300,699,0,54,22,54 2 0263 -- threesuperior
-char179 "
-aa 333,687,0,63,-72,63 2 0264 -- acute
-char180 "
-char181 556,482,226,6,35,6 0 0265 -- mu
-ps 500,692,224,161,17,68 2 0266 -- paragraph
-char182 "
-pc 250,312,0,0,-3 0 0267 -- periodcentered
-char183 "
-ac 333,0,216,0,59 0 0270 -- cedilla
-char184 "
-S1 300,699,0,35,-11,35 2 0271 -- onesuperior
-char185 "
-Om 333,699,0,39,-16,39 2 0272 -- ordmasculine
-char186 "
-fc 333,440,0,0,-13 0 0273 -- guilsinglright
-14 750,699,2,15,19,15 2 0274 -- onequarter
-char188 "
-12 750,699,2,21,19,21 2 0275 -- onehalf
-char189 "
-34 750,699,2,15,15,15 2 0276 -- threequarters
-char190 "
-r? 500,467,246,0,-7 0 0277 -- questiondown
-char191 "
-`A 722,897,3,5,69,5 2 0300 -- Agrave
-char192 "
-'A 722,897,3,5,69,5 2 0301 -- Aacute
-char193 "
-^A 722,889,3,5,69,5 2 0302 -- Acircumflex
-char194 "
-~A 722,866,3,5,69,5 2 0303 -- Atilde
-char195 "
-:A 722,847,3,5,69,5 2 0304 -- Adieresis
-char196 "
-oA 722,918,3,5,69,5 2 0305 -- Aring
-char197 "
-AE 941,692,3,11,54,11 2 0306 -- AE
-char198 "
-,C 667,706,216,34,5,34 2 0307 -- Ccedilla
-char199 "
-`E 611,897,3,9,20,9 2 0310 -- Egrave
-char200 "
-'E 611,897,3,9,20,9 2 0311 -- Eacute
-char201 "
-^E 611,889,3,9,20,9 2 0312 -- Ecircumflex
-char202 "
-:E 611,847,3,9,20,9 2 0313 -- Edieresis
-char203 "
-`I 333,897,3,71,43,68 2 0314 -- Igrave
-char204 "
-'I 333,897,3,123,43,68 2 0315 -- Iacute
-char205 "
-^I 333,889,3,107,43,68 2 0316 -- Icircumflex
-char206 "
-:I 333,847,3,135,43,68 2 0317 -- Idieresis
-char207 "
--D 778,692,3,13,31,13 2 0320 -- Eth
-char208 "
-~N 778,866,11,76,48,68 2 0321 -- Ntilde
-char209 "
-`O 778,897,18,20,-3,20 2 0322 -- Ograve
-char210 "
-'O 778,897,18,20,-3,20 2 0323 -- Oacute
-char211 "
-^O 778,889,18,20,-3,20 2 0324 -- Ocircumflex
-char212 "
-~O 778,866,18,20,-3,20 2 0325 -- Otilde
-char213 "
-:O 778,847,18,20,-3,20 2 0326 -- Odieresis
-char214 "
-char215 606,474,0,0,-33 0 0327 -- multiply
-/O 778,721,39,34,18,34 2 0330 -- Oslash
-char216 "
-`U 778,897,18,70,-38,68 2 0331 -- Ugrave
-char217 "
-'U 778,897,18,70,-38,68 2 0332 -- Uacute
-char218 "
-^U 778,889,18,70,-38,68 2 0333 -- Ucircumflex
-char219 "
-:U 778,847,18,70,-38,68 2 0334 -- Udieresis
-char220 "
-'Y 667,897,3,58,-2,58 2 0335 -- Yacute
-char221 "
-TP 611,692,3,9,41,9 2 0336 -- Thorn
-char222 "
-ss 500,733,276,38,210,38 3 0337 -- germandbls
-char223 "
-`a 444,707,11,12,46,12 2 0340 -- agrave
-char224 "
-'a 444,707,11,20,46,20 2 0341 -- aacute
-char225 "
-^a 444,699,11,12,46,12 2 0342 -- acircumflex
-char226 "
-~a 444,650,11,52,46,52 2 0343 -- atilde
-char227 "
-:a 444,657,11,40,46,40 2 0344 -- adieresis
-char228 "
-oa 444,728,11,12,46,12 2 0345 -- aring
-char229 "
-ae 638,482,11,35,49,35 0 0346 -- ae
-char230 "
-,c 407,482,216,32,25,32 0 0347 -- ccedilla
-char231 "
-`e 389,707,11,35,35,35 2 0350 -- egrave
-char232 "
-'e 389,707,11,55,35,55 2 0351 -- eacute
-char233 "
-^e 389,699,11,59,35,59 2 0352 -- ecircumflex
-char234 "
-:e 389,657,11,67,35,67 2 0353 -- edieresis
-char235 "
-`i 278,707,9,43,16,43 2 0354 -- igrave
-char236 "
-'i 278,707,9,103,16,68 2 0355 -- iacute
-char237 "
-^i 278,699,9,95,21,68 2 0356 -- icircumflex
-char238 "
-:i 278,657,9,123,16,68 2 0357 -- idieresis
-char239 "
-Sd 444,733,11,84,33,68 2 0360 -- eth
-char240 "
-~n 556,650,9,8,26,8 2 0361 -- ntilde
-char241 "
-`o 444,707,11,17,33,17 2 0362 -- ograve
-char242 "
-'o 444,707,11,20,33,20 2 0363 -- oacute
-char243 "
-^o 444,699,11,17,33,17 2 0364 -- ocircumflex
-char244 "
-~o 444,650,11,52,33,52 2 0365 -- otilde
-char245 "
-:o 444,657,11,40,33,40 2 0366 -- odieresis
-char246 "
-char247 606,504,0,0,-1 0 0367 -- divide
-/o 444,510,24,66,68,66 0 0370 -- oslash
-char248 "
-`u 556,707,11,6,18,6 2 0371 -- ugrave
-char249 "
-'u 556,707,11,6,18,6 2 0372 -- uacute
-char250 "
-^u 556,699,11,6,18,6 2 0373 -- ucircumflex
-char251 "
-:u 556,657,11,6,18,6 2 0374 -- udieresis
-char252 "
-'y 500,707,276,40,58,40 3 0375 -- yacute
-char253 "
-Tp 500,733,276,0,89 3 0376 -- thorn
-char254 "
-:y 500,657,276,40,58,40 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/PR b/contrib/groff/devps/PR
deleted file mode 100644
index 2eccf3c..0000000
--- a/contrib/groff/devps/PR
+++ /dev/null
@@ -1,466 +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 ' -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 ' -74
-L cq -74
-L Y -92
-L W -74
-L V -92
-L T -74
-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 char173 -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 char173 -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 char173 -55
-W e -92
-W , -92
-W : -18
-W a -92
-W A -92
-Y v -90
-Y u -90
-Y ; -74
-Y q -90
-Y . -111
-Y p -111
-Y o -92
-Y i -55
-Y - -92
-Y hy -92
-Y char173 -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 char173 -18
-r h -18
-r g -18
-r e -18
-r d -18
-r , -74
-r c -18
-v . -111
-v , -111
-w . -92
-w , -92
-y . -111
-y , -111
-charset
-ha 606,689 2 0000 -- asciicircum
-ti 606,347 0 0001 -- asciitilde
-vS 525,908,20 2 0002 -- Scaron
-vZ 667,908,3 2 0003 -- Zcaron
-vs 424,685,20 2 0004 -- scaron
-vz 500,685,3 2 0005 -- zcaron
-:Y 667,868,3 2 0006 -- Ydieresis
-tm 979,689 2 0007 -- trademark
-aq 208,709 2 0010 -- quotesingle
-space 250 0 0040
-! 278,694,5 2 0041 -- exclam
-" 371,709 2 0042 -- quotedbl
-dq "
-# 500,684 2 0043 -- numbersign
-sh "
-$ 500,731,116 2 0044 -- dollar
-Do "
-% 840,709,20 2 0045 -- percent
-& 778,689,20 2 0046 -- ampersand
-' 278,709 2 0047 -- quoteright
-cq "
-( 333,726,215 2 0050 -- parenleft
-) 333,726,215 2 0051 -- parenright
-* 389,689 2 0052 -- asterisk
-+ 606,512 0 0053 -- plus
-, 250,123,155 0 0054 -- comma
-- 333,287 0 0055 -- hyphen
-hy "
-char173 "
-. 250,111,5 0 0056 -- period
-/ 606,726,119 2 0057 -- slash
-sl "
-0 500,689,20 2 0060 -- zero
-1 500,694,3 2 0061 -- one
-2 500,689,3 2 0062 -- two
-3 500,689,20 2 0063 -- three
-4 500,694,3 2 0064 -- four
-5 500,689,20 2 0065 -- five
-6 500,689,20 2 0066 -- six
-7 500,689,3 2 0067 -- seven
-8 500,689,20 2 0070 -- eight
-9 500,689,20 2 0071 -- nine
-: 250,456,5 0 0072 -- colon
-; 250,456,153 0 0073 -- semicolon
-< 606,522 0 0074 -- less
-= 606,386 0 0075 -- equal
-> 606,522 0 0076 -- greater
-? 444,694,5 2 0077 -- question
-@ 747,694,20 2 0100 -- at
-at "
-A 778,700,3 2 0101 -- A
-B 611,692,3 2 0102 -- B
-C 709,709,20 2 0103 -- C
-D 774,692,3 2 0104 -- D
-E 611,692,3 2 0105 -- E
-F 556,692,3 2 0106 -- F
-G 763,709,20 2 0107 -- G
-H 832,692,3 2 0110 -- H
-I 337,692,3 2 0111 -- I
-J 333,692,194 2 0112 -- J
-K 726,692,3 2 0113 -- K
-L 611,692,3 2 0114 -- L
-M 946,692,13 2 0115 -- M
-N 831,692,20 2 0116 -- N
-O 786,709,20 2 0117 -- O
-P 604,692,3 2 0120 -- P
-Q 786,709,176 2 0121 -- Q
-R 668,692,3 2 0122 -- R
-S 525,709,20 2 0123 -- S
-T 613,692,3 2 0124 -- T
-U 778,692,20 2 0125 -- U
-V 722,692,9 2 0126 -- V
-W 1000,700,9 2 0127 -- W
-X 667,700,3 2 0130 -- X
-Y 667,704,3 2 0131 -- Y
-Z 667,692,3 2 0132 -- Z
-[ 333,726,184 2 0133 -- bracketleft
-lB "
-\ 606,726 2 0134 -- backslash
-rs "
-] 333,726,184 2 0135 -- bracketright
-rB "
-a^ 333,677 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 278,709 2 0140 -- quoteleft
-oq "
-a 500,469,12 0 0141 -- a
-b 553,726,12 2 0142 -- b
-c 444,469,20 0 0143 -- c
-d 611,726,12 2 0144 -- d
-e 479,469,20 0 0145 -- e
-f 333,728,3 2 0146 -- f
-g 556,469,283 1 0147 -- g
-h 582,726,3 2 0150 -- h
-i 291,687,3 2 0151 -- i
-j 234,688,283 3 0152 -- j
-k 556,726,12 2 0153 -- k
-l 291,726,3 2 0154 -- l
-m 883,469,3 0 0155 -- m
-n 582,469,3 0 0156 -- n
-o 546,469,20 0 0157 -- o
-p 601,469,281 1 0160 -- p
-q 560,469,281 1 0161 -- q
-r 395,469,3 0 0162 -- r
-s 424,469,20 0 0163 -- s
-t 326,621,12 2 0164 -- t
-u 603,469,12 0 0165 -- u
-v 565,459,7 0 0166 -- v
-w 834,469,7 0 0167 -- w
-x 516,469,3 0 0170 -- x
-y 556,459,283 1 0171 -- y
-z 500,462,3 0 0172 -- z
-lC 333,726,175 2 0173 -- braceleft
-{ "
-ba 606,726 2 0174 -- bar
-| "
-rC 333,726,175 2 0175 -- braceright
-} "
-a~ 333,640 2 0176 -- tilde
-~ "
-bq 278,110,153 0 0200 -- quotesinglbase
-Fo 500,428 0 0201 -- guillemotleft
-char171 "
-Fc 500,428 0 0202 -- guillemotright
-char187 "
-bu 606,516 0 0203 -- bullet
-Fn 500,706,262 2 0204 -- florin
-f/ 167,689 2 0205 -- fraction
-%0 1144,709,20 2 0206 -- perthousand
-dg 500,694,5 2 0207 -- dagger
-dd 500,694,249 2 0210 -- daggerdbl
-en 500,277 0 0211 -- endash
-em 1000,277 0 0212 -- emdash
-fi 605,728,3 2 0214 -- fi
-fl 608,728,3 2 0215 -- fl
-.i 287,469,3 0 0220 -- dotlessi
-ga 333,677 2 0222 -- grave
-a" 380,687 2 0223 -- hungarumlaut
-a. 250,637 2 0224 -- dotaccent
-ab 333,664 2 0225 -- breve
-ah 333,677 2 0226 -- caron
-ao 333,696 2 0227 -- ring
-ho 313,0,165 0 0230 -- ogonek
-lq 500,709 2 0231 -- quotedblleft
-rq 500,709 2 0232 -- quotedblright
-oe 827,469,20 0 0233 -- oe
-/l 291,726,3 2 0234 -- lslash
-Bq 500,110,153 0 0235 -- quotedblbase
-OE 998,709,20 2 0236 -- OE
-/L 611,692,3 2 0237 -- Lslash
-r! 278,469,225 0 0241 -- exclamdown
-char161 "
-ct 500,562,101 0 0242 -- cent
-char162 "
-Po 500,694,13 2 0243 -- sterling
-char163 "
-Cs 500,531 0 0244 -- currency
-char164 "
-Ye 500,701,3 2 0245 -- yen
-char165 "
-bb 606,726 2 0246 -- brokenbar
-char166 "
-sc 500,709,219 2 0247 -- section
-char167 "
-ad 333,637 2 0250 -- dieresis
-char168 "
-co 747,706,18 2 0251 -- copyright
-char169 "
-Of 333,709 2 0252 -- ordfeminine
-char170 "
-fo 331,428 0 0253 -- guilsinglleft
-no 606,386 0 0254 -- logicalnot
-char172 "
-\- 606,289 0 0255 -- minus
-rg 747,706,18 2 0256 -- registered
-char174 "
-a- 333,591 0 0257 -- macron
-char175 "
-de 400,689 2 0260 -- degree
-char176 "
-char177 606,512 0 0261 -- plusminus
-S2 300,689 2 0262 -- twosuperior
-char178 "
-S3 300,689 2 0263 -- threesuperior
-char179 "
-aa 333,677 2 0264 -- acute
-char180 "
-char181 603,469,236 0 0265 -- mu
-ps 628,694,150 2 0266 -- paragraph
-char182 "
-pc 250,319 0 0267 -- periodcentered
-char183 "
-ac 333,0,225 0 0270 -- cedilla
-char184 "
-S1 300,692 2 0271 -- onesuperior
-char185 "
-Om 333,709 2 0272 -- ordmasculine
-char186 "
-fc 331,428 0 0273 -- guilsinglright
-14 750,692,3 2 0274 -- onequarter
-char188 "
-12 750,692,3 2 0275 -- onehalf
-char189 "
-34 750,689,3 2 0276 -- threequarters
-char190 "
-r? 444,469,231 0 0277 -- questiondown
-char191 "
-`A 778,908,3 2 0300 -- Agrave
-char192 "
-'A 778,908,3 2 0301 -- Aacute
-char193 "
-^A 778,908,3 2 0302 -- Acircumflex
-char194 "
-~A 778,871,3 2 0303 -- Atilde
-char195 "
-:A 778,868,3 2 0304 -- Adieresis
-char196 "
-oA 778,927,3 2 0305 -- Aring
-char197 "
-AE 944,692,3 2 0306 -- AE
-char198 "
-,C 709,709,225 2 0307 -- Ccedilla
-char199 "
-`E 611,908,3 2 0310 -- Egrave
-char200 "
-'E 611,908,3 2 0311 -- Eacute
-char201 "
-^E 611,908,3 2 0312 -- Ecircumflex
-char202 "
-:E 611,868,3 2 0313 -- Edieresis
-char203 "
-`I 337,908,3 2 0314 -- Igrave
-char204 "
-'I 337,908,3 2 0315 -- Iacute
-char205 "
-^I 337,908,3 2 0316 -- Icircumflex
-char206 "
-:I 337,868,3 2 0317 -- Idieresis
-char207 "
--D 774,692,3 2 0320 -- Eth
-char208 "
-~N 831,871,20 2 0321 -- Ntilde
-char209 "
-`O 786,908,20 2 0322 -- Ograve
-char210 "
-'O 786,908,20 2 0323 -- Oacute
-char211 "
-^O 786,908,20 2 0324 -- Ocircumflex
-char212 "
-~O 786,883,20 2 0325 -- Otilde
-char213 "
-:O 786,868,20 2 0326 -- Odieresis
-char214 "
-char215 606,474 0 0327 -- multiply
-/O 833,709,20 2 0330 -- Oslash
-char216 "
-`U 778,908,20 2 0331 -- Ugrave
-char217 "
-'U 778,908,20 2 0332 -- Uacute
-char218 "
-^U 778,908,20 2 0333 -- Ucircumflex
-char219 "
-:U 778,868,20 2 0334 -- Udieresis
-char220 "
-'Y 667,908,3 2 0335 -- Yacute
-char221 "
-TP 604,692,3 2 0336 -- Thorn
-char222 "
-ss 556,731,9 2 0337 -- germandbls
-char223 "
-`a 500,697,12 2 0340 -- agrave
-char224 "
-'a 500,697,12 2 0341 -- aacute
-char225 "
-^a 500,697,12 2 0342 -- acircumflex
-char226 "
-~a 500,652,12 2 0343 -- atilde
-char227 "
-:a 500,657,12 2 0344 -- adieresis
-char228 "
-oa 500,716,12 2 0345 -- aring
-char229 "
-ae 758,469,20 0 0346 -- ae
-char230 "
-,c 444,469,225 0 0347 -- ccedilla
-char231 "
-`e 479,697,20 2 0350 -- egrave
-char232 "
-'e 479,697,20 2 0351 -- eacute
-char233 "
-^e 479,697,20 2 0352 -- ecircumflex
-char234 "
-:e 479,657,20 2 0353 -- edieresis
-char235 "
-`i 287,697,3 2 0354 -- igrave
-char236 "
-'i 287,697,3 2 0355 -- iacute
-char237 "
-^i 287,697,3 2 0356 -- icircumflex
-char238 "
-:i 287,657,3 2 0357 -- idieresis
-char239 "
-Sd 546,728,20 2 0360 -- eth
-char240 "
-~n 582,652,3 2 0361 -- ntilde
-char241 "
-`o 546,697,20 2 0362 -- ograve
-char242 "
-'o 546,697,20 2 0363 -- oacute
-char243 "
-^o 546,697,20 2 0364 -- ocircumflex
-char244 "
-~o 546,652,20 2 0365 -- otilde
-char245 "
-:o 546,657,20 2 0366 -- odieresis
-char246 "
-char247 606,512 0 0367 -- divide
-/o 556,474,23 0 0370 -- oslash
-char248 "
-`u 603,697,12 2 0371 -- ugrave
-char249 "
-'u 603,697,12 2 0372 -- uacute
-char250 "
-^u 603,697,12 2 0373 -- ucircumflex
-char251 "
-:u 603,657,12 2 0374 -- udieresis
-char252 "
-'y 556,697,283 3 0375 -- yacute
-char253 "
-Tp 601,726,281 3 0376 -- thorn
-char254 "
-:y 556,657,283 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/S b/contrib/groff/devps/S
deleted file mode 100644
index 3cf77d9..0000000
--- a/contrib/groff/devps/S
+++ /dev/null
@@ -1,227 +0,0 @@
-name S
-internalname Symbol
-special
-spacewidth 250
-charset
-space 250 0 0040
-! 333,672,17 3 0041 -- exclam
-fa 713,705 3 0042 -- universal
-# 500,673,16 3 0043 -- numbersign
-sh "
-te 549,707 3 0044 -- existential
-% 833,655,36 3 0045 -- percent
-& 778,661,18 3 0046 -- ampersand
-st 439,500,17 3 0047 -- suchthat
-( 333,673,191 3 0050 -- parenleft
-) 333,673,191 3 0051 -- parenright
-** 500,551 3 0052 -- asteriskmath
-+ 549,533 3 0053 -- plus
-pl "
-, 250,104,152 3 0054 -- comma
-\- 549,288 3 0055 -- minus
-mi "
-. 250,95,17 3 0056 -- period
-/ 278,646,18 3 0057 -- slash
-sl "
-0 500,685,17 3 0060 -- zero
-1 500,673 3 0061 -- one
-2 500,686 3 0062 -- two
-3 500,685,17 3 0063 -- three
-4 500,685 3 0064 -- four
-5 500,685,17 3 0065 -- five
-6 500,685,17 3 0066 -- six
-7 500,673,16 3 0067 -- seven
-8 500,685,18 3 0070 -- eight
-9 500,685,18 3 0071 -- nine
-: 278,460,17 3 0072 -- colon
-; 278,460,152 3 0073 -- semicolon
-< 549,522 3 0074 -- less
-= 549,390 3 0075 -- equal
-eq "
-> 549,522 3 0076 -- greater
-? 444,686,17 3 0077 -- question
-=~ 549,475 3 0100 -- congruent
-*A 722,673 3 0101 -- Alpha
-*B 667,673 3 0102 -- Beta
-*X 722,673 3 0103 -- Chi
-*D 612,688 3 0104 -- Delta
-*E 611,673 3 0105 -- Epsilon
-*F 763,673 3 0106 -- Phi
-*G 603,673 3 0107 -- Gamma
-*Y 722,673 3 0110 -- Eta
-*I 333,673 3 0111 -- Iota
-+h 631,689,18 3 0112 -- theta1
-*K 722,673 3 0113 -- Kappa
-*L 686,688 3 0114 -- Lambda
-*M 889,673 3 0115 -- Mu
-*N 722,673,8 3 0116 -- Nu
-*O 722,685,17 3 0117 -- Omicron
-*P 768,673 3 0120 -- Pi
-*H 741,685,17 3 0121 -- Theta
-*R 556,673 3 0122 -- Rho
-*S 592,673 3 0123 -- Sigma
-*T 611,673 3 0124 -- Tau
---- 690,673 3 0125 -- Upsilon
-ts 439,500,233 3 0126 -- sigma1
-*W 768,688 3 0127 -- Omega
-*C 645,673 3 0130 -- Xi
-*Q 795,684 3 0131 -- Psi
-*Z 611,673 3 0132 -- Zeta
-[ 333,674,155 3 0133 -- bracketleft
-lB "
-3d 863,478 3 0134 -- therefore
-tf "
-] 333,674,155 3 0135 -- bracketright
-rB "
-pp 658,674 3 0136 -- perpendicular
-_ 500,0,252 3 0137 -- underscore
-radicalex 500,917 3 0140 -- radicalex
-*a 631,500,18 3 0141 -- alpha
-*b 549,741,223 3 0142 -- beta
-*x 549,499,231 3 0143 -- chi
-*d 494,740,19 3 0144 -- delta
-*e 439,502,19 3 0145 -- epsilon
-*f 521,671,224 3 0146 -- phi
-*g 411,499,225 3 0147 -- gamma
-*y 603,514,202 3 0150 -- eta
-*i 329,503,17 3 0151 -- iota
-+f 603,499,224 3 0152 -- phi1
-*k 549,501 3 0153 -- kappa
-*l 549,739,17 3 0154 -- lambda
-char181 576,500,223 3 0155 -- mu
-*m "
-*n 521,507,16 3 0156 -- nu
-*o 549,499,19 3 0157 -- omicron
-*p 549,487,19 3 0160 -- pi
-*h 521,690,17 3 0161 -- theta
-*r 549,499,230 3 0162 -- rho
-*s 603,500,21 3 0163 -- sigma
-*t 439,500,19 3 0164 -- tau
-*u 576,507,18 3 0165 -- upsilon
-+p 713,583,18 3 0166 -- omega1
-*w 686,500,17 3 0167 -- omega
-*c 493,766,224 3 0170 -- xi
-*q 686,500,228 3 0171 -- psi
-*z 494,756,225 3 0172 -- zeta
-lC 480,673,183 3 0173 -- braceleft
-{ "
-ba 200,673,177 3 0174 -- bar
-| "
-rC 480,673,183 3 0175 -- braceright
-} "
-ap 549,307 3 0176 -- similar
-*U 620,685 3 0241 -- Upsilon1
-fm 247,735 3 0242 -- minute
-<= 549,639 3 0243 -- lessequal
-f/ 167,677,12 3 0244 -- fraction
-if 713,404 3 0245 -- infinity
-Fn 500,686,193 3 0246 -- florin
-CL 753,533,26 3 0247 -- club
-DI 753,550,36 3 0250 -- diamond
-HE 753,532,33 3 0251 -- heart
-SP 753,548,36 3 0252 -- spade
-<> 1042,511,15 3 0253 -- arrowboth
-<- 987,511,15 3 0254 -- arrowleft
-ua 603,910 3 0255 -- arrowup
-arrowverttp "
--> 987,511,15 3 0256 -- arrowright
-da 603,888,22 3 0257 -- arrowdown
-arrowvertbt "
-de 400,685 3 0260 -- degree
-char176 "
-char177 549,645 3 0261 -- plusminus
-+- "
-sd 411,737 3 0262 -- second
->= 549,639 3 0263 -- greaterequal
-char215 549,524 3 0264 -- multiply
-mu "
-pt 713,404 3 0265 -- proportional
-pd 494,746,20 3 0266 -- partialdiff
-bu 460,473 3 0267 -- bullet
-char247 549,456 3 0270 -- divide
-di "
-!= 549,549,25 3 0271 -- notequal
-== 549,443 3 0272 -- equivalence
-~~ 549,394 3 0273 -- approxequal
-~= "
---- 1000,95,17 3 0274 -- ellipsis
-arrowvertex 603,1010,120 3 0275 -- arrowvertex
-an 1000,276 3 0276 -- arrowhorizex
-CR 658,629,16 3 0277 -- carriagereturn
-Ah 823,658,18 3 0300 -- aleph
-Im 686,740,53 3 0301 -- Ifraktur
-Re 795,734,15 3 0302 -- Rfraktur
-wp 987,573,211 3 0303 -- weierstrass
-c* 768,673,17 3 0304 -- circlemultiply
-c+ 768,675,15 3 0305 -- circleplus
-es 823,719,24 3 0306 -- emptyset
-ca 768,509 3 0307 -- intersection
-cu 768,492,17 3 0310 -- union
-sp 713,470 3 0311 -- propersuperset
-ip 713,470,125 3 0312 -- reflexsuperset
-nb 713,540,70 3 0313 -- notsubset
-sb 713,470 3 0314 -- propersubset
-ib 713,470,125 3 0315 -- reflexsubset
-mo 713,468 3 0316 -- element
-nm 713,555,58 3 0317 -- notelement
-/_ 768,673 3 0320 -- angle
-gr 713,718,19 3 0321 -- gradient
---- 790,673,17 3 0322 -- registerserif
---- 790,675,15 3 0323 -- copyrightserif
---- 890,673 3 0324 -- trademarkserif
-product 823,751,101 3 0325 -- product
-sr 549,917,38 3 0326 -- radical
-md 250,310 3 0327 -- dotmath
-no 713,288 3 0330 -- logicalnot
-char172 "
-AN 603,454 3 0331 -- logicaland
-OR 603,477 3 0332 -- logicalor
-hA 1042,510,20 3 0333 -- arrowdblboth
-lA 987,513,15 3 0334 -- arrowdblleft
-uA 603,911 3 0335 -- arrowdblup
-rA 987,508,20 3 0336 -- arrowdblright
-dA 603,890,19 3 0337 -- arrowdbldown
-lz 494,745 3 0340 -- lozenge
-la 329,746,198 3 0341 -- angleleft
---- 790,670,20 3 0342 -- registersans
---- 790,675,15 3 0343 -- copyrightsans
---- 786,673 3 0344 -- trademarksans
-sum 713,752,108 3 0345 -- summation
-parenlefttp 384,926,293 3 0346 -- parenlefttp
-parenleftex 384,920,80 3 0347 -- parenleftex
-parenleftbt 384,920,293 3 0350 -- parenleftbt
-bracketlefttp 384,925,75 3 0351 -- bracketlefttp
-lc "
-bracketleftex 384,925,75 3 0352 -- bracketleftex
-bracketleftbt 384,925,75 3 0353 -- bracketleftbt
-lf "
-bracelefttp 494,925,75 3 0354 -- bracelefttp
-lt "
-braceleftmid 494,925,75 3 0355 -- braceleftmid
-lk "
-braceleftbt 494,925,75 3 0356 -- braceleftbt
-lb "
-braceex 494,925,75 3 0357 -- braceex
-bracerightex "
-braceleftex "
-barex "
-bv "
-ra 329,746,198 3 0361 -- angleright
-is 274,916,107,67,52,-10 3 0362 -- integral
---- 686,921,83 3 0363 -- integraltp
---- 686,975,88 3 0364 -- integralex
---- 686,921,81 3 0365 -- integralbt
-parenrighttp 384,926,293 3 0366 -- parenrighttp
-parenrightex 384,920,80 3 0367 -- parenrightex
-parenrightbt 384,920,293 3 0370 -- parenrightbt
-bracketrighttp 384,925,75 3 0371 -- bracketrighttp
-rc "
-bracketrightex 384,925,75 3 0372 -- bracketrightex
-bracketrightbt 384,925,75 3 0373 -- bracketrightbt
-rf "
-bracerighttp 494,925,75 3 0374 -- bracerighttp
-rt "
-bracerightmid 494,925,75 3 0375 -- bracerightmid
-rk "
-bracerightbt 494,925,75 3 0376 -- bracerightbt
-rb "
diff --git a/contrib/groff/devps/SS b/contrib/groff/devps/SS
deleted file mode 100644
index 933eb1c..0000000
--- a/contrib/groff/devps/SS
+++ /dev/null
@@ -1,194 +0,0 @@
-name SS
-internalname Symbol-Slanted
-special
-slant 15.5
-spacewidth 223
-charset
-space 223 0 0040
---- 296,599,15,137,-72,99 3 0041 -- exclam
---- 635,627,0,216,-173,99 3 0042 -- universal
---- 445,599,15,162,-21,99 3 0043 -- numbersign
---- 489,629,0,183,28,99 3 0044 -- existential
---- 741,583,32,75,-97,75 3 0045 -- percent
---- 692,589,16,103,-18,99 3 0046 -- ampersand
---- 391,444,15,109,6,99 3 0047 -- suchthat
---- 296,599,170,203,-39,99 3 0050 -- parenleft
---- 296,600,170,93,72,93 3 0051 -- parenright
---- 445,490,0,105,-76,99 3 0052 -- asteriskmath
---- 489,474,0,123,-26,99 3 0053 -- plus
---- 223,93,136,10,41,10 3 0054 -- comma
---- 489,256,0,117,-24,99 3 0055 -- minus
---- 223,85,15,1,-20,1 3 0056 -- period
---- 247,575,15,208,55,99 3 0057 -- slash
---- 445,610,15,142,-40,99 3 0060 -- zero
---- 445,599,0,56,-57,56 3 0061 -- one
---- 445,611,0,129,28,99 3 0062 -- two
---- 445,611,16,115,-6,99 3 0063 -- three
---- 445,610,0,135,-8,99 3 0064 -- four
---- 445,610,15,188,14,99 3 0065 -- five
---- 445,610,16,193,-37,99 3 0066 -- six
---- 445,599,15,190,-101,99 3 0067 -- seven
---- 445,611,16,141,-32,99 3 0070 -- eight
---- 445,609,15,140,-2,99 3 0071 -- nine
---- 247,409,15,89,-31,89 3 0072 -- colon
---- 247,409,136,99,17,99 3 0073 -- semicolon
---- 489,464,0,171,-37,99 3 0074 -- less
---- 489,347,0,147,1,99 3 0075 -- equal
---- 489,464,0,108,27,99 3 0076 -- greater
---- 395,610,15,172,-113,99 3 0077 -- question
---- 489,423,0,158,40,99 3 0100 -- congruent
---- 643,599,0,21,47,21 3 0101 -- Alpha
---- 594,598,0,101,24,99 3 0102 -- Beta
---- 643,599,0,205,58,99 3 0103 -- Chi
---- 545,612,0,46,45,46 3 0104 -- Delta
---- 544,599,0,194,22,99 3 0105 -- Epsilon
---- 679,598,0,132,-55,99 3 0106 -- Phi
---- 537,599,0,227,19,99 3 0107 -- Gamma
---- 643,599,0,243,15,99 3 0110 -- Eta
---- 296,599,0,222,22,99 3 0111 -- Iota
-+h 562,614,15,133,-58,99 3 0112 -- theta1
---- 643,598,0,185,19,99 3 0113 -- Kappa
---- 611,612,0,49,45,49 3 0114 -- Lambda
---- 791,599,0,233,22,99 3 0115 -- Mu
---- 643,599,7,234,24,99 3 0116 -- Nu
---- 643,610,15,154,-62,99 3 0117 -- Omicron
---- 684,599,0,213,28,99 3 0120 -- Pi
---- 659,610,15,138,-62,99 3 0121 -- Theta
---- 495,599,0,200,25,99 3 0122 -- Rho
---- 527,599,0,186,45,99 3 0123 -- Sigma
---- 544,599,0,229,-109,99 3 0124 -- Tau
---- 614,599,0,240,-125,99 3 0125 -- Upsilon
-ts 391,445,208,151,-28,99 3 0126 -- sigma1
---- 684,612,0,126,20,99 3 0127 -- Omega
---- 574,598,0,176,14,99 3 0130 -- Xi
---- 708,608,0,227,-138,99 3 0131 -- Psi
---- 544,599,0,231,11,99 3 0132 -- Zeta
---- 296,599,138,207,16,99 3 0133 -- bracketleft
---- 768,426,0,0,-110 3 0134 -- therefore
---- 296,599,138,159,64,99 3 0135 -- bracketright
---- 586,600,0,60,37,60 3 0136 -- perpendicular
---- 445,0,224,0,122 3 0137 -- underscore
---- 445,816,0,829,-622,99 3 0140 -- radicalex
-*a 562,445,15,146,-34,99 3 0141 -- alpha
-*b 489,659,198,139,57,99 3 0142 -- beta
-*x 489,445,206,134,98,99 3 0143 -- chi
-*d 440,658,16,181,-33,99 3 0144 -- delta
-*e 391,447,17,127,1,99 3 0145 -- epsilon
-*f 464,596,200,103,-28,99 3 0146 -- phi
-*g 366,444,200,252,-42,99 3 0147 -- gamma
-*y 537,457,180,68,-50,68 3 0150 -- eta
-*i 293,448,16,53,-47,53 3 0151 -- iota
-+f 537,444,199,117,-42,99 3 0152 -- phi1
-*k 489,447,0,182,-56,99 3 0153 -- kappa
-*l 489,658,16,91,29,91 3 0154 -- lambda
-*m 513,445,198,70,68,70 3 0155 -- mu
-*n 464,451,15,134,-69,99 3 0156 -- nu
-*o 489,444,17,87,-36,87 3 0157 -- omicron
-*p 489,433,18,160,-8,99 3 0160 -- pi
-*h 464,614,16,140,-53,99 3 0161 -- theta
-*r 489,444,205,82,69,82 3 0162 -- rho
-*s 537,445,19,175,-37,99 3 0163 -- sigma
-*t 391,445,16,170,-45,99 3 0164 -- tau
-*u 513,451,15,95,-55,95 3 0165 -- upsilon
-+p 635,519,15,173,-28,99 3 0166 -- omega1
-*w 611,445,16,126,-35,99 3 0167 -- omega
-*c 439,681,200,126,-20,99 3 0170 -- xi
-*q 611,445,203,198,-91,99 3 0171 -- psi
-*z 440,673,200,190,-50,99 3 0172 -- zeta
---- 427,599,163,163,-66,99 3 0173 -- braceleft
---- 178,599,158,179,41,99 3 0174 -- bar
---- 427,599,163,67,31,67 3 0175 -- braceright
---- 489,273,0,110,-28,99 3 0176 -- similar
---- 552,609,0,208,-84,99 3 0241 -- Upsilon1
---- 220,654,0,223,-106,99 3 0242 -- minute
---- 489,569,0,206,24,99 3 0243 -- lessequal
---- 149,603,11,391,214,99 3 0244 -- fraction
---- 635,360,0,107,-41,99 3 0245 -- infinity
---- 445,612,172,219,86,99 3 0246 -- florin
---- 670,474,23,25,-69,25 3 0247 -- club
---- 670,490,32,0,-148 3 0250 -- diamond
---- 670,473,29,59,-155,59 3 0251 -- heart
---- 670,488,32,0,-82 3 0252 -- spade
---- 927,455,13,103,-40,99 3 0253 -- arrowboth
---- 878,455,13,87,-47,87 3 0254 -- arrowleft
---- 537,810,0,204,-173,99 3 0255 -- arrowup
---- 878,455,13,94,-55,94 3 0256 -- arrowright
---- 537,790,20,85,-54,85 3 0257 -- arrowdown
---- 356,609,0,160,-137,99 3 0260 -- degree
---- 489,574,0,154,41,99 3 0261 -- plusminus
---- 366,656,0,244,-100,99 3 0262 -- second
---- 489,569,0,143,24,99 3 0263 -- greaterequal
---- 489,466,0,170,22,99 3 0264 -- multiply
---- 635,360,0,82,-40,82 3 0265 -- proportional
---- 440,664,18,152,-12,99 3 0266 -- partialdiff
---- 409,421,0,95,-68,95 3 0267 -- bullet
---- 489,406,0,119,-24,99 3 0270 -- divide
---- 489,489,22,148,-1,99 3 0271 -- notequal
---- 489,394,0,163,15,99 3 0272 -- equivalence
---- 489,351,0,133,-7,99 3 0273 -- approxequal
---- 890,85,15,0,-57 3 0274 -- ellipsis
---- 537,899,107,92,-166,92 3 0275 -- arrowvertex
---- 890,246,0,171,42,99 3 0276 -- arrowhorizex
---- 586,560,14,174,10,99 3 0277 -- carriagereturn
---- 732,586,16,58,-109,58 3 0300 -- aleph
---- 611,659,47,123,24,99 3 0301 -- Ifraktur
---- 708,653,13,175,-21,99 3 0302 -- Rfraktur
---- 878,510,188,50,-62,50 3 0303 -- weierstrass
---- 684,599,15,124,-64,99 3 0304 -- circlemultiply
---- 684,601,13,125,-65,99 3 0305 -- circleplus
---- 732,640,21,202,12,99 3 0306 -- emptyset
---- 684,453,0,80,14,80 3 0307 -- intersection
---- 684,438,15,154,-60,99 3 0310 -- union
---- 635,418,0,90,32,90 3 0311 -- propersuperset
---- 635,418,111,89,67,89 3 0312 -- reflexsuperset
---- 635,481,62,159,-37,99 3 0313 -- notsubset
---- 635,418,0,159,-37,99 3 0314 -- propersubset
---- 635,418,111,159,34,99 3 0315 -- reflexsubset
---- 635,417,0,0,-43 3 0316 -- element
---- 635,494,52,0,-24 3 0317 -- notelement
---- 684,599,0,199,27,99 3 0320 -- angle
---- 635,639,17,220,-181,99 3 0321 -- gradient
---- 703,596,18,110,-70,99 3 0322 -- registerserif
---- 703,601,13,113,-72,99 3 0323 -- copyrightserif
---- 792,599,0,205,-119,99 3 0324 -- trademarkserif
---- 732,668,90,238,56,99 3 0325 -- product
---- 489,816,34,272,-84,99 3 0326 -- radical
---- 223,276,0,52,-81,52 3 0327 -- dotmath
---- 635,256,0,100,-28,99 3 0330 -- logicalnot
---- 537,404,0,32,29,32 3 0331 -- logicaland
---- 537,424,0,152,-101,99 3 0332 -- logicalor
---- 927,454,18,101,-42,99 3 0333 -- arrowdblboth
---- 878,457,13,114,-46,99 3 0334 -- arrowdblleft
---- 537,811,0,201,-102,99 3 0335 -- arrowdblup
---- 878,452,18,89,-21,89 3 0336 -- arrowdblright
---- 537,792,17,152,-53,99 3 0337 -- arrowdbldown
---- 440,663,0,129,-71,99 3 0340 -- lozenge
---- 293,664,176,229,-48,99 3 0341 -- angleleft
---- 703,596,18,110,-70,99 3 0342 -- registersans
---- 703,601,13,111,-70,99 3 0343 -- copyrightsans
---- 700,599,0,182,-129,99 3 0344 -- trademarksans
---- 635,669,96,171,65,99 3 0345 -- summation
---- 342,824,261,350,96,99 3 0346 -- parenlefttp
---- 342,823,76,46,38,46 3 0347 -- parenleftex
---- 342,824,261,47,-63,47 3 0350 -- parenleftbt
---- 342,824,71,268,72,99 3 0351 -- bracketlefttp
---- 342,823,70,13,72,13 3 0352 -- bracketleftex
---- 342,824,71,14,72,14 3 0353 -- bracketleftbt
---- 440,824,67,258,-108,99 3 0354 -- bracelefttp
---- 440,832,76,96,-76,96 3 0355 -- braceleftmid
---- 440,824,62,94,-169,94 3 0356 -- braceleftbt
---- 440,832,71,96,-107,96 3 0357 -- braceex
---- 293,664,176,102,79,99 3 0361 -- angleright
---- 244,815,95,305,63,99 3 0362 -- integral
---- 611,820,74,312,-222,99 3 0363 -- integraltp
---- 611,868,78,79,-221,79 3 0364 -- integralex
---- 611,820,72,64,20,64 3 0365 -- integralbt
---- 342,824,261,206,-223,99 3 0366 -- parenrighttp
---- 342,823,76,365,-281,99 3 0367 -- parenrightex
---- 342,824,261,365,80,99 3 0370 -- parenrightbt
---- 342,824,71,285,-199,99 3 0371 -- bracketrighttp
---- 342,823,70,285,-200,99 3 0372 -- bracketrightex
---- 342,824,71,285,54,99 3 0373 -- bracketrightbt
---- 440,824,67,35,-108,35 3 0374 -- bracerighttp
---- 440,832,76,127,-105,99 3 0375 -- bracerightmid
---- 440,824,62,94,54,94 3 0376 -- bracerightbt
diff --git a/contrib/groff/devps/TB b/contrib/groff/devps/TB
deleted file mode 100644
index 4d1fc8c..0000000
--- a/contrib/groff/devps/TB
+++ /dev/null
@@ -1,548 +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 char173 -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 char173 -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 char173 -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 char173 -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
-' 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 char173 -37
-r g -10
-r e -18
-r , -92
-r c -18
-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 0000 -- asciicircum
-ti 520,333 0 0001 -- asciitilde
-vS 556,914,19 2 0002 -- Scaron
-vZ 667,914 2 0003 -- Zcaron
-vs 389,704,14 2 0004 -- scaron
-vz 444,704 2 0005 -- zcaron
-:Y 722,877 2 0006 -- Ydieresis
-tm 1000,676 2 0007 -- trademark
-aq 278,691 2 0010 -- quotesingle
-space 250 0 0040
-! 333,691,13 2 0041 -- exclam
-" 555,691 2 0042 -- quotedbl
-dq "
-# 500,700 2 0043 -- numbersign
-sh "
-$ 500,750,99 2 0044 -- dollar
-Do "
-% 1000,692,14 2 0045 -- percent
-& 833,691,16 2 0046 -- ampersand
-' 333,691 2 0047 -- quoteright
-cq "
-( 333,694,168 2 0050 -- parenleft
-) 333,694,168 2 0051 -- parenright
-* 500,691 2 0052 -- asterisk
-+ 570,506 0 0053 -- plus
-, 250,155,180 0 0054 -- comma
-- 333,287 0 0055 -- hyphen
-hy "
-char173 "
-. 250,156,13 0 0056 -- period
-/ 278,691,19 2 0057 -- slash
-sl "
-0 500,688,13 2 0060 -- zero
-1 500,688 2 0061 -- one
-2 500,688 2 0062 -- two
-3 500,688,14 2 0063 -- three
-4 500,688 2 0064 -- four
-5 500,676,8 2 0065 -- five
-6 500,688,13 2 0066 -- six
-7 500,676 2 0067 -- seven
-8 500,688,13 2 0070 -- eight
-9 500,688,13 2 0071 -- nine
-: 333,472,13 0 0072 -- colon
-; 333,472,180 0 0073 -- semicolon
-< 570,514,8 0 0074 -- less
-= 570,399 0 0075 -- equal
-> 570,514,8 0 0076 -- greater
-? 500,689,13 2 0077 -- question
-@ 930,691,19 2 0100 -- at
-at "
-A 722,690 2 0101 -- A
-B 667,676 2 0102 -- B
-C 722,691,19 2 0103 -- C
-D 722,676 2 0104 -- D
-E 667,676 2 0105 -- E
-F 611,676 2 0106 -- F
-G 778,691,19 2 0107 -- G
-H 778,676 2 0110 -- H
-I 389,676 2 0111 -- I
-J 500,676,96 2 0112 -- J
-K 778,676 2 0113 -- K
-L 667,676 2 0114 -- L
-M 944,676 2 0115 -- M
-N 722,676,18 2 0116 -- N
-O 778,691,19 2 0117 -- O
-P 611,676 2 0120 -- P
-Q 778,691,176 2 0121 -- Q
-R 722,676 2 0122 -- R
-S 556,692,19 2 0123 -- S
-T 667,676 2 0124 -- T
-U 722,676,19 2 0125 -- U
-V 722,676,18 2 0126 -- V
-W 1000,676,15 2 0127 -- W
-X 722,676 2 0130 -- X
-Y 722,676 2 0131 -- Y
-Z 667,676 2 0132 -- Z
-[ 333,678,149 2 0133 -- bracketleft
-lB "
-\ 278,691,19 2 0134 -- backslash
-rs "
-] 333,678,149 2 0135 -- bracketright
-rB "
-a^ 333,704 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 333,691 2 0140 -- quoteleft
-oq "
-a 500,473,14 0 0141 -- a
-b 556,676,14 2 0142 -- b
-c 444,473,14 0 0143 -- c
-d 556,676,14 2 0144 -- d
-e 444,473,14 0 0145 -- e
-f 333,691 2 0146 -- f
-g 500,473,206 1 0147 -- g
-h 556,676 2 0150 -- h
-i 278,691 2 0151 -- i
-j 333,691,203 3 0152 -- j
-k 556,676 2 0153 -- k
-l 278,676 2 0154 -- l
-m 833,473 0 0155 -- m
-n 556,473 0 0156 -- n
-o 500,473,14 0 0157 -- o
-p 556,473,205 1 0160 -- p
-q 556,473,205 1 0161 -- q
-r 444,473 0 0162 -- r
-s 389,473,14 0 0163 -- s
-t 333,630,12 2 0164 -- t
-u 556,461,14 0 0165 -- u
-v 500,461,14 0 0166 -- v
-w 722,461,14 0 0167 -- w
-x 500,461 0 0170 -- x
-y 500,461,205 1 0171 -- y
-z 444,461 0 0172 -- z
-lC 394,698,175 2 0173 -- braceleft
-{ "
-ba 220,691,19 2 0174 -- bar
-| "
-rC 394,698,175 2 0175 -- braceright
-} "
-a~ 333,674 2 0176 -- tilde
-~ "
-bq 333,155,180 0 0200 -- quotesinglbase
-Fo 500,415 0 0201 -- guillemotleft
-char171 "
-Fc 500,415 0 0202 -- guillemotright
-char187 "
-bu 350,478 0 0203 -- bullet
-Fn 500,706,155 2 0204 -- florin
-f/ 167,688,12 2 0205 -- fraction
-%0 1000,706,29 2 0206 -- perthousand
-dg 500,691,134 2 0207 -- dagger
-dd 500,691,132 2 0210 -- daggerdbl
-en 500,271 0 0211 -- endash
-em 1000,271 0 0212 -- emdash
-fi 556,691 2 0214 -- fi
-fl 556,691 2 0215 -- fl
-.i 278,461 0 0220 -- dotlessi
-ga 333,713 2 0222 -- grave
-a" 333,713 2 0223 -- hungarumlaut
-a. 333,667 2 0224 -- dotaccent
-ab 333,691 2 0225 -- breve
-ah 333,704 2 0226 -- caron
-ao 333,740 2 0227 -- ring
-ho 333,44,173 0 0230 -- ogonek
-lq 500,691 2 0231 -- quotedblleft
-rq 500,691 2 0232 -- quotedblright
-oe 722,473,14 0 0233 -- oe
-/l 278,676 2 0234 -- lslash
-Bq 500,155,180 0 0235 -- quotedblbase
-OE 1000,684,5 2 0236 -- OE
-/L 667,676 2 0237 -- Lslash
-r! 333,501,203 1 0241 -- exclamdown
-char161 "
-ct 500,588,140 0 0242 -- cent
-char162 "
-Po 500,684,14 2 0243 -- sterling
-char163 "
-Cs 500,613 0 0244 -- currency
-char164 "
-Ye 500,676 2 0245 -- yen
-char165 "
-bb 220,691,19 2 0246 -- brokenbar
-char166 "
-sc 500,691,132 2 0247 -- section
-char167 "
-ad 333,667 2 0250 -- dieresis
-char168 "
-co 747,691,19 2 0251 -- copyright
-char169 "
-Of 300,688 2 0252 -- ordfeminine
-char170 "
-fo 333,415 0 0253 -- guilsinglleft
-no 570,399 0 0254 -- logicalnot
-char172 "
-\- 570,297 0 0255 -- minus
-rg 747,691,19 2 0256 -- registered
-char174 "
-a- 333,637 2 0257 -- macron
-char175 "
-de 400,688 2 0260 -- degree
-char176 "
-char177 570,506 0 0261 -- plusminus
-S2 300,688 2 0262 -- twosuperior
-char178 "
-S3 300,688 2 0263 -- threesuperior
-char179 "
-aa 333,713 2 0264 -- acute
-char180 "
-char181 556,461,206 1 0265 -- mu
-ps 540,676,186 2 0266 -- paragraph
-char182 "
-pc 250,417 0 0267 -- periodcentered
-char183 "
-ac 333,0,218 1 0270 -- cedilla
-char184 "
-S1 300,688 2 0271 -- onesuperior
-char185 "
-Om 330,688 2 0272 -- ordmasculine
-char186 "
-fc 333,415 0 0273 -- guilsinglright
-14 750,688,12 2 0274 -- onequarter
-char188 "
-12 750,688,12 2 0275 -- onehalf
-char189 "
-34 750,688,12 2 0276 -- threequarters
-char190 "
-r? 500,501,201 0 0277 -- questiondown
-char191 "
-`A 722,923 2 0300 -- Agrave
-char192 "
-'A 722,923 2 0301 -- Aacute
-char193 "
-^A 722,914 2 0302 -- Acircumflex
-char194 "
-~A 722,884 2 0303 -- Atilde
-char195 "
-:A 722,877 2 0304 -- Adieresis
-char196 "
-oA 722,935 2 0305 -- Aring
-char197 "
-AE 1000,676 2 0306 -- AE
-char198 "
-,C 722,691,218 3 0307 -- Ccedilla
-char199 "
-`E 667,923 2 0310 -- Egrave
-char200 "
-'E 667,923 2 0311 -- Eacute
-char201 "
-^E 667,914 2 0312 -- Ecircumflex
-char202 "
-:E 667,877 2 0313 -- Edieresis
-char203 "
-`I 389,923 2 0314 -- Igrave
-char204 "
-'I 389,923 2 0315 -- Iacute
-char205 "
-^I 389,914 2 0316 -- Icircumflex
-char206 "
-:I 389,877 2 0317 -- Idieresis
-char207 "
--D 722,676 2 0320 -- Eth
-char208 "
-~N 722,884,18 2 0321 -- Ntilde
-char209 "
-`O 778,923,19 2 0322 -- Ograve
-char210 "
-'O 778,923,19 2 0323 -- Oacute
-char211 "
-^O 778,914,19 2 0324 -- Ocircumflex
-char212 "
-~O 778,884,19 2 0325 -- Otilde
-char213 "
-:O 778,877,19 2 0326 -- Odieresis
-char214 "
-char215 570,490 0 0327 -- multiply
-/O 778,737,74 2 0330 -- Oslash
-char216 "
-`U 722,923,19 2 0331 -- Ugrave
-char217 "
-'U 722,923,19 2 0332 -- Uacute
-char218 "
-^U 722,914,19 2 0333 -- Ucircumflex
-char219 "
-:U 722,877,19 2 0334 -- Udieresis
-char220 "
-'Y 722,928 2 0335 -- Yacute
-char221 "
-TP 611,676 2 0336 -- Thorn
-char222 "
-ss 556,691,12 2 0337 -- germandbls
-char223 "
-`a 500,713,14 2 0340 -- agrave
-char224 "
-'a 500,713,14 2 0341 -- aacute
-char225 "
-^a 500,704,14 2 0342 -- acircumflex
-char226 "
-~a 500,674,14 2 0343 -- atilde
-char227 "
-:a 500,667,14 2 0344 -- adieresis
-char228 "
-oa 500,740,14 2 0345 -- aring
-char229 "
-ae 722,473,14 0 0346 -- ae
-char230 "
-,c 444,473,218 1 0347 -- ccedilla
-char231 "
-`e 444,713,14 2 0350 -- egrave
-char232 "
-'e 444,713,14 2 0351 -- eacute
-char233 "
-^e 444,704,14 2 0352 -- ecircumflex
-char234 "
-:e 444,667,14 2 0353 -- edieresis
-char235 "
-`i 278,713 2 0354 -- igrave
-char236 "
-'i 278,713 2 0355 -- iacute
-char237 "
-^i 278,704 2 0356 -- icircumflex
-char238 "
-:i 278,667 2 0357 -- idieresis
-char239 "
-Sd 500,691,14 2 0360 -- eth
-char240 "
-~n 556,674 2 0361 -- ntilde
-char241 "
-`o 500,713,14 2 0362 -- ograve
-char242 "
-'o 500,713,14 2 0363 -- oacute
-char243 "
-^o 500,704,14 2 0364 -- ocircumflex
-char244 "
-~o 500,674,14 2 0365 -- otilde
-char245 "
-:o 500,667,14 2 0366 -- odieresis
-char246 "
-char247 570,537,31 0 0367 -- divide
-/o 500,549,92 0 0370 -- oslash
-char248 "
-`u 556,713,14 2 0371 -- ugrave
-char249 "
-'u 556,713,14 2 0372 -- uacute
-char250 "
-^u 556,704,14 2 0373 -- ucircumflex
-char251 "
-:u 556,667,14 2 0374 -- udieresis
-char252 "
-'y 500,713,205 3 0375 -- yacute
-char253 "
-Tp 556,676,205 3 0376 -- thorn
-char254 "
-:y 500,667,205 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/TBI b/contrib/groff/devps/TBI
deleted file mode 100644
index a79efb7..0000000
--- a/contrib/groff/devps/TBI
+++ /dev/null
@@ -1,531 +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 char173 -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 char173 -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 char173 -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 char173 -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
-' 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
-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 0000 -- asciicircum
-ti 570,333,0,0,-4 0 0001 -- asciitilde
-vS 556,897,18,20,48,20 2 0002 -- Scaron
-vZ 611,897,0,29,61,29 2 0003 -- Zcaron
-vs 389,690,13,100,69,99 2 0004 -- scaron
-vz 389,690,78,85,93,85 2 0005 -- zcaron
-:Y 611,862,0,98,-23,98 2 0006 -- Ydieresis
-tm 1000,669,0,18,18,18 2 0007 -- trademark
-aq 278,685,0,40,-78,40 2 0010 -- quotesingle
-space 250 0 0040
-! 389,684,13,31,-17,31 2 0041 -- exclam
-" 555,685,0,31,-86,31 2 0042 -- quotedbl
-dq "
-# 500,700,0,83,83,83 2 0043 -- numbersign
-sh "
-$ 500,733,100,47,70,47 2 0044 -- dollar
-Do "
-% 833,692,10,10,11,10 2 0045 -- percent
-& 778,682,19,0,45 2 0046 -- ampersand
-' 333,685,0,19,-48,19 2 0047 -- quoteright
-cq "
-( 333,685,179,61,22,61 2 0050 -- parenleft
-) 333,685,179,0,94 2 0051 -- parenright
-* 500,685,0,6,-15,6 2 0052 -- asterisk
-+ 570,506,0,17,17,17 0 0053 -- plus
-, 250,134,182,0,110 0 0054 -- comma
-- 333,282,0,0,48 0 0055 -- hyphen
-hy "
-char173 "
-. 250,135,13,0,59 0 0056 -- period
-/ 278,685,18,114,114,99 2 0057 -- slash
-sl "
-0 500,683,14,27,33,27 2 0060 -- zero
-1 500,683,0,0,45 2 0061 -- one
-2 500,683,0,0,77 2 0062 -- two
-3 500,683,13,0,65 2 0063 -- three
-4 500,683,0,53,65,53 2 0064 -- four
-5 500,669,13,37,61,37 2 0065 -- five
-6 500,679,15,59,27,59 2 0066 -- six
-7 500,669,0,75,-2,75 2 0067 -- seven
-8 500,683,13,26,47,26 2 0070 -- eight
-9 500,683,10,25,62,25 2 0071 -- nine
-: 333,459,13,0,27 0 0072 -- colon
-; 333,459,183,0,75 0 0073 -- semicolon
-< 570,514,8,19,19,19 0 0074 -- less
-= 570,399,0,17,17,17 0 0075 -- equal
-> 570,514,8,19,19,19 0 0076 -- greater
-? 500,684,13,20,-29,20 2 0077 -- question
-@ 832,685,18,0,-13 2 0100 -- at
-at "
-A 667,683,0,0,117 2 0101 -- A
-B 667,669,0,7,74,7 2 0102 -- B
-C 667,685,18,60,18,60 2 0103 -- C
-D 722,669,0,13,96,13 2 0104 -- D
-E 667,669,0,36,77,36 2 0105 -- E
-F 667,669,0,43,63,43 2 0106 -- F
-G 722,685,18,34,29,34 2 0107 -- G
-H 778,669,0,71,74,71 2 0110 -- H
-I 389,669,0,67,82,67 2 0111 -- I
-J 500,669,99,74,96,74 2 0112 -- J
-K 667,669,0,85,71,85 2 0113 -- K
-L 611,669,0,29,72,29 2 0114 -- L
-M 889,669,12,78,79,78 2 0115 -- M
-N 722,669,15,76,77,76 2 0116 -- N
-O 722,685,18,19,23,19 2 0117 -- O
-P 611,669,0,52,77,52 2 0120 -- P
-Q 722,685,208,19,23,19 3 0121 -- Q
-R 667,669,0,6,79,6 2 0122 -- R
-S 556,685,18,20,48,20 2 0123 -- S
-T 611,669,0,89,0,89 2 0124 -- T
-U 722,669,18,72,-17,72 2 0125 -- U
-V 667,669,18,98,-15,98 2 0126 -- V
-W 889,669,18,101,-15,99 2 0127 -- W
-X 667,669,0,77,74,77 2 0130 -- X
-Y 611,669,0,98,-23,98 2 0131 -- Y
-Z 611,669,0,29,61,29 2 0132 -- Z
-[ 333,674,159,79,87,79 2 0133 -- bracketleft
-lB "
-\ 278,685,18,51,51,51 2 0134 -- backslash
-rs "
-] 333,674,157,60,106,60 2 0135 -- bracketright
-rB "
-a^ 333,690,0,84,10,84 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 333,685,0,49,-78,49 2 0140 -- quoteleft
-oq "
-a 500,462,14,5,71,5 0 0141 -- a
-b 500,699,13,0,64 2 0142 -- b
-c 444,462,13,0,55 0 0143 -- c
-d 500,699,13,67,71,67 2 0144 -- d
-e 444,462,13,4,45,4 0 0145 -- e
-f 333,698,205,163,219,99 3 0146 -- f
-g 500,462,203,28,102,28 1 0147 -- g
-h 556,699,9,0,63 2 0150 -- h
-i 278,684,9,35,48,35 2 0151 -- i
-j 278,684,207,51,239,51 3 0152 -- j
-k 500,699,8,33,73,33 2 0153 -- k
-l 278,699,9,62,48,62 2 0154 -- l
-m 778,462,9,0,64 0 0155 -- m
-n 556,462,9,0,56 0 0156 -- n
-o 500,462,13,0,53 0 0157 -- o
-p 500,462,205,0,170 1 0160 -- p
-q 500,462,205,21,49,21 1 0161 -- q
-r 389,462,0,50,71,50 0 0162 -- r
-s 389,462,13,0,69 0 0163 -- s
-t 278,594,9,53,61,53 2 0164 -- t
-u 556,462,9,0,35 0 0165 -- u
-v 444,462,13,7,34,7 0 0166 -- v
-w 667,462,13,0,34 0 0167 -- w
-x 500,462,13,19,96,19 0 0170 -- x
-y 444,462,205,0,144 1 0171 -- y
-z 389,449,78,29,93,29 0 0172 -- z
-lC 348,686,187,138,45,99 2 0173 -- braceleft
-{ "
-ba 220,685,18,0,-16 2 0174 -- bar
-| "
-rC 348,686,187,4,179,4 2 0175 -- braceright
-} "
-a~ 333,655,0,124,2,99 2 0176 -- tilde
-~ "
-bq 333,134,182,0,55 0 0200 -- quotesinglbase
-Fo 500,415,0,18,38,18 0 0201 -- guillemotleft
-char171 "
-Fc 500,415,0,18,38,18 0 0202 -- guillemotright
-char187 "
-bu 350,525,0,50,50,50 0 0203 -- bullet
-Fn 500,707,156,87,137,87 2 0204 -- florin
-f/ 167,683,14,207,219,99 2 0205 -- fraction
-%0 1000,706,29,46,43,46 2 0206 -- perthousand
-dg 500,685,145,44,-41,44 2 0207 -- dagger
-dd 500,685,139,43,40,43 2 0210 -- daggerdbl
-en 500,269,0,27,90,27 0 0211 -- endash
-em 1000,269,0,27,90,27 0 0212 -- emdash
-fi 556,703,205,8,238,8 3 0214 -- fi
-fl 556,704,205,47,236,47 3 0215 -- fl
-.i 278,462,9,10,48,10 0 0220 -- dotlessi
-ga 333,697,0,14,-35,14 2 0222 -- grave
-a" 333,697,0,215,-19,99 2 0223 -- hungarumlaut
-a. 333,655,0,10,-113,10 2 0224 -- dotaccent
-ab 333,678,0,104,-21,99 2 0225 -- breve
-ah 333,690,0,128,-29,99 2 0226 -- caron
-ao 333,729,0,57,-77,57 2 0227 -- ring
-ho 333,44,173,0,90 0 0230 -- ogonek
-lq 500,685,0,63,-3,63 2 0231 -- quotedblleft
-rq 500,685,0,63,-3,63 2 0232 -- quotedblright
-oe 722,462,13,2,44,2 0 0233 -- oe
-/l 278,699,9,73,63,73 2 0234 -- lslash
-Bq 500,134,182,0,107 0 0235 -- quotedblbase
-OE 944,677,8,52,27,52 2 0236 -- OE
-/L 611,669,0,29,72,29 2 0237 -- Lslash
-r! 389,492,205,0,31 1 0241 -- exclamdown
-char161 "
-ct 500,576,143,0,8 0 0242 -- cent
-char162 "
-Po 500,683,12,60,82,60 2 0243 -- sterling
-char163 "
-Cs 500,586,0,76,76,76 0 0244 -- currency
-char164 "
-Ye 500,669,0,178,17,99 2 0245 -- yen
-char165 "
-bb 220,685,18,0,-16 2 0246 -- brokenbar
-char166 "
-sc 500,685,143,9,14,9 2 0247 -- section
-char167 "
-ad 333,655,0,114,-5,99 2 0250 -- dieresis
-char168 "
-co 747,685,18,21,20,21 2 0251 -- copyright
-char169 "
-Of 266,685,0,114,34,99 2 0252 -- ordfeminine
-char170 "
-fo 333,415,0,20,18,20 0 0253 -- guilsinglleft
-no 606,399,0,0,-1 0 0254 -- logicalnot
-char172 "
-\- 606,297,0,0,-1 0 0255 -- minus
-rg 747,685,18,21,20,21 2 0256 -- registered
-char174 "
-a- 333,623,0,110,-1,99 2 0257 -- macron
-char175 "
-de 400,683,0,19,-33,19 2 0260 -- degree
-char176 "
-char177 570,506,0,17,17,17 0 0261 -- plusminus
-S2 300,683,0,63,48,63 2 0262 -- twosuperior
-char178 "
-S3 300,683,0,71,33,71 2 0263 -- threesuperior
-char179 "
-aa 333,697,0,96,-89,96 2 0264 -- acute
-char180 "
-char181 576,449,207,0,110 1 0265 -- mu
-ps 500,669,193,112,107,99 2 0266 -- paragraph
-char182 "
-pc 250,405,0,0,-1 0 0267 -- periodcentered
-char183 "
-ac 333,5,218,0,130 1 0270 -- cedilla
-char184 "
-S1 300,683,0,51,20,51 2 0271 -- onesuperior
-char185 "
-Om 300,685,0,97,-6,97 2 0272 -- ordmasculine
-char186 "
-fc 333,415,0,0,40 0 0273 -- guilsinglright
-14 750,683,14,21,43,21 2 0274 -- onequarter
-char188 "
-12 750,683,14,23,59,23 2 0275 -- onehalf
-char189 "
-34 750,683,14,26,43,26 2 0276 -- threequarters
-char190 "
-r? 500,492,205,0,20 1 0277 -- questiondown
-char191 "
-`A 667,904,0,0,117 2 0300 -- Agrave
-char192 "
-'A 667,904,0,0,117 2 0301 -- Aacute
-char193 "
-^A 667,897,0,0,117 2 0302 -- Acircumflex
-char194 "
-~A 667,862,0,0,117 2 0303 -- Atilde
-char195 "
-:A 667,862,0,0,117 2 0304 -- Adieresis
-char196 "
-oA 667,921,0,0,117 2 0305 -- Aring
-char197 "
-AE 944,669,0,24,114,24 2 0306 -- AE
-char198 "
-,C 667,685,218,60,18,60 3 0307 -- Ccedilla
-char199 "
-`E 667,904,0,36,77,36 2 0310 -- Egrave
-char200 "
-'E 667,904,0,36,77,36 2 0311 -- Eacute
-char201 "
-^E 667,897,0,36,77,36 2 0312 -- Ecircumflex
-char202 "
-:E 667,862,0,36,77,36 2 0313 -- Edieresis
-char203 "
-`I 389,904,0,67,82,67 2 0314 -- Igrave
-char204 "
-'I 389,904,0,73,82,73 2 0315 -- Iacute
-char205 "
-^I 389,897,0,81,82,81 2 0316 -- Icircumflex
-char206 "
-:I 389,862,0,106,82,99 2 0317 -- Idieresis
-char207 "
--D 722,669,0,28,81,28 2 0320 -- Eth
-char208 "
-~N 722,862,15,76,77,76 2 0321 -- Ntilde
-char209 "
-`O 722,904,18,19,23,19 2 0322 -- Ograve
-char210 "
-'O 722,904,18,19,23,19 2 0323 -- Oacute
-char211 "
-^O 722,897,18,19,23,19 2 0324 -- Ocircumflex
-char212 "
-~O 722,862,18,19,23,19 2 0325 -- Otilde
-char213 "
-:O 722,862,18,19,23,19 2 0326 -- Odieresis
-char214 "
-char215 570,490,0,2,2,2 0 0327 -- multiply
-/O 722,764,125,19,23,19 2 0330 -- Oslash
-char216 "
-`U 722,904,18,72,-17,72 2 0331 -- Ugrave
-char217 "
-'U 722,904,18,72,-17,72 2 0332 -- Uacute
-char218 "
-^U 722,897,18,72,-17,72 2 0333 -- Ucircumflex
-char219 "
-:U 722,862,18,72,-17,72 2 0334 -- Udieresis
-char220 "
-'Y 611,904,0,98,-23,98 2 0335 -- Yacute
-char221 "
-TP 611,669,0,12,77,12 2 0336 -- Thorn
-char222 "
-ss 500,705,200,23,250,23 2 0337 -- germandbls
-char223 "
-`a 500,697,14,5,71,5 2 0340 -- agrave
-char224 "
-'a 500,697,14,13,71,13 2 0341 -- aacute
-char225 "
-^a 500,690,14,5,71,5 2 0342 -- acircumflex
-char226 "
-~a 500,655,14,41,71,41 2 0343 -- atilde
-char227 "
-:a 500,655,14,21,71,21 2 0344 -- adieresis
-char228 "
-oa 500,729,14,5,71,5 2 0345 -- aring
-char229 "
-ae 722,462,13,1,55,1 0 0346 -- ae
-char230 "
-,c 444,462,218,0,74 1 0347 -- ccedilla
-char231 "
-`e 444,697,13,4,45,4 2 0350 -- egrave
-char232 "
-'e 444,697,13,41,45,41 2 0351 -- eacute
-char233 "
-^e 444,690,13,29,45,29 2 0352 -- ecircumflex
-char234 "
-:e 444,655,13,49,45,49 2 0353 -- edieresis
-char235 "
-`i 278,697,9,32,48,32 2 0354 -- igrave
-char236 "
-'i 278,697,9,124,48,99 2 0355 -- iacute
-char237 "
-^i 278,690,9,97,52,97 2 0356 -- icircumflex
-char238 "
-:i 278,655,9,132,48,99 2 0357 -- idieresis
-char239 "
-Sd 500,699,13,4,53,4 2 0360 -- eth
-char240 "
-~n 556,655,9,0,56 2 0361 -- ntilde
-char241 "
-`o 500,697,13,0,53 2 0362 -- ograve
-char242 "
-'o 500,697,13,13,53,13 2 0363 -- oacute
-char243 "
-^o 500,690,13,1,53,1 2 0364 -- ocircumflex
-char244 "
-~o 500,655,13,41,53,41 2 0365 -- otilde
-char245 "
-:o 500,655,13,16,53,16 2 0366 -- odieresis
-char246 "
-char247 570,535,29,17,17,17 0 0367 -- divide
-/o 500,560,119,0,53 0 0370 -- oslash
-char248 "
-`u 556,697,9,0,35 2 0371 -- ugrave
-char249 "
-'u 556,697,9,0,35 2 0372 -- uacute
-char250 "
-^u 556,690,9,0,35 2 0373 -- ucircumflex
-char251 "
-:u 556,655,9,0,35 2 0374 -- udieresis
-char252 "
-'y 444,697,205,41,144,41 3 0375 -- yacute
-char253 "
-Tp 500,699,205,0,170 3 0376 -- thorn
-char254 "
-:y 444,655,205,44,144,44 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/TI b/contrib/groff/devps/TI
deleted file mode 100644
index 992089d..0000000
--- a/contrib/groff/devps/TI
+++ /dev/null
@@ -1,544 +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 char173 -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 char173 -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 char173 -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 char173 -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
-' 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 char173 -20
-r g -37
-r e -37
-r d -37
-r , -111
-r c -37
-r a -15
-v . -74
-v , -74
-w . -74
-w , -74
-y . -55
-y , -55
-charset
-ha 422,666,0,50,50,43 2 0000 -- asciicircum
-ti 541,323,0,11,10,11 0 0001 -- asciitilde
-vS 500,873,18,70,33,43 2 0002 -- Scaron
-vZ 556,873,0,100,56,43 2 0003 -- Zcaron
-vs 389,661,13,115,34,43 2 0004 -- scaron
-vz 389,661,81,95,52,43 2 0005 -- zcaron
-:Y 556,818,0,127,-28,43 2 0006 -- Ydieresis
-tm 980,653,0,27,20,27 2 0007 -- trademark
-aq 214,666,0,77,-82,43 2 0010 -- quotesingle
-space 250 0 0040
-! 333,667,11,19,11,19 2 0041 -- exclam
-" 420,666,0,62,-94,43 2 0042 -- quotedbl
-dq "
-# 500,676,0,90,48,43 2 0043 -- numbersign
-sh "
-$ 500,731,89,47,19,43 2 0044 -- dollar
-Do "
-% 833,676,13,7,-29,7 2 0045 -- percent
-& 778,666,18,0,-26 2 0046 -- ampersand
-' 333,666,0,7,-101,7 2 0047 -- quoteright
-cq "
-( 333,669,181,32,8,32 2 0050 -- parenleft
-) 333,669,180,6,34,6 2 0051 -- parenright
-* 500,666,0,42,-78,42 2 0052 -- asterisk
-+ 675,506,0,0,-36 0 0053 -- plus
-, 250,101,129,0,54 0 0054 -- comma
-- 333,255,0,0,1 0 0055 -- hyphen
-hy "
-char173 "
-. 250,100,11,0,23 0 0056 -- period
-/ 278,666,18,158,115,43 2 0057 -- slash
-sl "
-0 500,676,7,47,18,43 2 0060 -- zero
-1 500,676,0,0,1 2 0061 -- one
-2 500,676,0,2,38,2 2 0062 -- two
-3 500,676,7,15,35,15 2 0063 -- three
-4 500,676,0,29,49,29 2 0064 -- four
-5 500,666,7,41,35,41 2 0065 -- five
-6 500,686,7,71,20,43 2 0066 -- six
-7 500,666,8,87,-25,43 2 0067 -- seven
-8 500,676,7,43,20,43 2 0070 -- eight
-9 500,676,17,42,27,42 2 0071 -- nine
-: 333,441,11 0 0072 -- colon
-; 333,441,129,0,23 0 0073 -- semicolon
-< 675,514,8,0,-34 0 0074 -- less
-= 675,386,0,0,-36 0 0075 -- equal
-> 675,514,8,0,-34 0 0076 -- greater
-? 500,664,12,22,-82,22 2 0077 -- question
-@ 920,666,18,0,-68 2 0100 -- at
-at "
-A 611,668,0,3,101,3 2 0101 -- A
-B 611,653,0,27,58,27 2 0102 -- B
-C 667,666,18,72,-16,43 2 0103 -- C
-D 722,653,0,28,58,28 2 0104 -- D
-E 611,653,0,73,51,43 2 0105 -- E
-F 611,653,0,84,42,43 2 0106 -- F
-G 722,666,18,50,-2,43 2 0107 -- G
-H 722,653,0,95,58,43 2 0110 -- H
-I 333,653,0,101,58,43 2 0111 -- I
-J 444,653,18,97,56,43 2 0112 -- J
-K 667,653,0,105,43,43 2 0113 -- K
-L 556,653,0,53,58,43 2 0114 -- L
-M 833,653,0,90,68,43 2 0115 -- M
-N 667,653,15,110,70,43 2 0116 -- N
-O 722,666,18,27,-10,27 2 0117 -- O
-P 611,653,0,44,50,43 2 0120 -- P
-Q 722,666,182,27,-9,27 2 0121 -- Q
-R 611,653,0,27,63,27 2 0122 -- R
-S 500,667,18,58,33,43 2 0123 -- S
-T 556,653,0,127,-9,43 2 0124 -- T
-U 722,653,18,93,-52,43 2 0125 -- U
-V 611,653,18,127,-26,43 2 0126 -- V
-W 833,653,18,123,-21,43 2 0127 -- W
-X 611,653,0,94,79,43 2 0130 -- X
-Y 556,653,0,127,-28,43 2 0131 -- Y
-Z 556,653,0,100,56,43 2 0132 -- Z
-[ 389,663,153,52,29,43 2 0133 -- bracketleft
-lB "
-\ 278,666,18,91,91,43 2 0134 -- backslash
-rs "
-] 389,663,153,43,38,43 2 0135 -- bracketright
-rB "
-a^ 333,661,0,102,-41,43 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,43 0 0137 -- underscore
-` 333,666,0,27,-121,27 2 0140 -- quoteleft
-oq "
-a 500,441,11,26,33,26 0 0141 -- a
-b 500,683,11,23,27,23 2 0142 -- b
-c 444,441,11,31,20,31 0 0143 -- c
-d 500,683,13,77,35,43 2 0144 -- d
-e 444,441,11,18,19,18 0 0145 -- e
-f 278,678,207,196,197,43 3 0146 -- f
-g 500,441,206,22,42,22 1 0147 -- g
-h 500,683,9,28,31,28 2 0150 -- h
-i 278,654,11,36,1,36 2 0151 -- i
-j 278,654,207,48,174,43 3 0152 -- j
-k 444,683,11,67,36,43 2 0153 -- k
-l 278,683,11,51,9,43 2 0154 -- l
-m 722,441,9,32,38,32 0 0155 -- m
-n 500,441,9,24,36,24 0 0156 -- n
-o 500,441,11,18,23,18 0 0157 -- o
-p 500,441,205,19,125,19 1 0160 -- p
-q 500,441,209,33,25,33 1 0161 -- q
-r 389,441,0,73,5,43 0 0162 -- r
-s 389,442,13,27,34,27 0 0163 -- s
-t 278,546,11,68,13,43 2 0164 -- t
-u 500,441,11,25,8,25 0 0165 -- u
-v 444,441,18,32,29,32 0 0166 -- v
-w 667,441,18,31,34,31 0 0167 -- w
-x 444,441,11,53,77,43 0 0170 -- x
-y 444,441,206,32,74,32 1 0171 -- y
-z 389,428,81,41,52,41 0 0172 -- z
-lC 400,687,177,57,-1,43 2 0173 -- braceleft
-{ "
-ba 275,666,18,0,-55 2 0174 -- bar
-| "
-rC 400,687,177,0,57 2 0175 -- braceright
-} "
-a~ 333,624,0,144,-50,43 2 0176 -- tilde
-~ "
-bq 333,101,129,0,6 0 0200 -- quotesinglbase
-Fo 500,403,0,0,-3 0 0201 -- guillemotleft
-char171 "
-Fc 500,403,0,0,-5 0 0202 -- guillemotright
-char187 "
-bu 350,461,0,10,10,10 0 0203 -- bullet
-Fn 500,682,182,57,25,43 2 0204 -- florin
-f/ 167,676,10,220,219,43 2 0205 -- fraction
-%0 1000,706,19,60,25,43 2 0206 -- perthousand
-dg 500,666,159,38,-51,38 2 0207 -- dagger
-dd 500,666,143,41,28,41 2 0210 -- daggerdbl
-en 500,243,0,55,56,43 0 0211 -- endash
-em 889,243,0,55,56,43 0 0212 -- emdash
-fi 500,681,207,31,191,31 3 0214 -- fi
-fl 500,682,204,68,191,43 3 0215 -- fl
-.i 278,441,11,7,1,7 0 0220 -- dotlessi
-ga 333,664,0,28,-71,28 2 0222 -- grave
-a" 333,664,0,203,-43,43 2 0223 -- hungarumlaut
-a. 333,606,0,22,-157,22 2 0224 -- dotaccent
-ab 333,650,0,135,-67,43 2 0225 -- breve
-ah 333,661,0,143,-71,43 2 0226 -- caron
-ao 333,691,0,72,-105,43 2 0227 -- ring
-ho 333,40,169,0,70 0 0230 -- ogonek
-lq 556,666,0,8,-116,8 2 0231 -- quotedblleft
-rq 556,666,0,0,-101 2 0232 -- quotedblright
-oe 667,441,12,29,30,29 0 0233 -- oe
-/l 278,683,11,79,13,43 2 0234 -- lslash
-Bq 556,101,129,0,-7 0 0235 -- quotedblbase
-OE 944,666,8,70,1,43 2 0236 -- OE
-/L 556,653,0,53,58,43 2 0237 -- Lslash
-r! 389,473,205,0,-9 1 0241 -- exclamdown
-char161 "
-ct 500,560,143,22,-27,22 2 0242 -- cent
-char162 "
-Po 500,670,6,67,40,43 2 0243 -- sterling
-char163 "
-Cs 500,597,0,72,72,43 2 0244 -- currency
-char164 "
-Ye 500,653,0,153,23,43 2 0245 -- yen
-char165 "
-bb 275,666,18,0,-55 2 0246 -- brokenbar
-char166 "
-sc 500,666,162,11,-3,11 2 0247 -- section
-char167 "
-ad 333,606,0,122,-57,43 2 0250 -- dieresis
-char168 "
-co 760,666,18,9,9,9 2 0251 -- copyright
-char169 "
-Of 276,676,0,126,8,43 2 0252 -- ordfeminine
-char170 "
-fo 333,403,0,0,-1 0 0253 -- guilsinglleft
-no 675,386,0,0,-36 0 0254 -- logicalnot
-char172 "
-\- 675,286,0,0,-36 0 0255 -- minus
-rg 760,666,18,9,9,9 2 0256 -- registered
-char174 "
-a- 333,583,0,128,-49,43 2 0257 -- macron
-char175 "
-de 400,676,0,37,-51,37 2 0260 -- degree
-char176 "
-char177 675,506,0,0,-36 0 0261 -- plusminus
-S2 300,676,0,74,17,43 2 0262 -- twosuperior
-char178 "
-S3 300,676,0,89,7,43 2 0263 -- threesuperior
-char179 "
-aa 333,664,0,120,-130,43 2 0264 -- acute
-char180 "
-char181 500,428,209,47,80,43 1 0265 -- mu
-ps 523,653,123,143,-5,43 2 0266 -- paragraph
-char182 "
-pc 250,310,0,0,-20 0 0267 -- periodcentered
-char183 "
-ac 333,0,217,0,80 1 0270 -- cedilla
-char184 "
-S1 300,676,0,34,7,34 2 0271 -- onesuperior
-char185 "
-Om 310,676,0,102,-17,43 2 0272 -- ordmasculine
-char186 "
-fc 333,403,0,0,-2 0 0273 -- guilsinglright
-14 750,676,10,36,17,36 2 0274 -- onequarter
-char188 "
-12 750,676,10,49,16,43 2 0275 -- onehalf
-char189 "
-34 750,676,10,36,27,36 2 0276 -- threequarters
-char190 "
-r? 500,471,205,0,22 1 0277 -- questiondown
-char191 "
-`A 611,876,0,3,101,3 2 0300 -- Agrave
-char192 "
-'A 611,876,0,3,101,3 2 0301 -- Aacute
-char193 "
-^A 611,873,0,3,101,3 2 0302 -- Acircumflex
-char194 "
-~A 611,836,0,5,101,5 2 0303 -- Atilde
-char195 "
-:A 611,818,0,3,101,3 2 0304 -- Adieresis
-char196 "
-oA 611,883,0,3,101,3 2 0305 -- Aring
-char197 "
-AE 889,653,0,72,77,43 2 0306 -- AE
-char198 "
-,C 667,666,217,72,-16,43 3 0307 -- Ccedilla
-char199 "
-`E 611,876,0,73,51,43 2 0310 -- Egrave
-char200 "
-'E 611,876,0,73,51,43 2 0311 -- Eacute
-char201 "
-^E 611,873,0,73,51,43 2 0312 -- Ecircumflex
-char202 "
-:E 611,818,0,73,51,43 2 0313 -- Edieresis
-char203 "
-`I 333,876,0,101,58,43 2 0314 -- Igrave
-char204 "
-'I 333,876,0,130,58,43 2 0315 -- Iacute
-char205 "
-^I 333,873,0,142,58,43 2 0316 -- Icircumflex
-char206 "
-:I 333,818,0,152,58,43 2 0317 -- Idieresis
-char207 "
--D 722,653,0,28,58,28 2 0320 -- Eth
-char208 "
-~N 667,836,15,110,70,43 2 0321 -- Ntilde
-char209 "
-`O 722,876,18,27,-10,27 2 0322 -- Ograve
-char210 "
-'O 722,876,18,27,-10,27 2 0323 -- Oacute
-char211 "
-^O 722,873,18,27,-10,27 2 0324 -- Ocircumflex
-char212 "
-~O 722,836,18,27,-10,27 2 0325 -- Otilde
-char213 "
-:O 722,818,18,27,-10,27 2 0326 -- Odieresis
-char214 "
-char215 675,497,0,0,-43 0 0327 -- multiply
-/O 722,722,105,27,-10,27 2 0330 -- Oslash
-char216 "
-`U 722,876,18,93,-52,43 2 0331 -- Ugrave
-char217 "
-'U 722,876,18,93,-52,43 2 0332 -- Uacute
-char218 "
-^U 722,873,18,93,-52,43 2 0333 -- Ucircumflex
-char219 "
-:U 722,818,18,93,-52,43 2 0334 -- Udieresis
-char220 "
-'Y 556,876,0,127,-28,43 2 0335 -- Yacute
-char221 "
-TP 611,653,0,8,50,8 2 0336 -- Thorn
-char222 "
-ss 500,679,207,43,218,43 3 0337 -- germandbls
-char223 "
-`a 500,664,11,26,33,26 2 0340 -- agrave
-char224 "
-'a 500,664,11,37,33,37 2 0341 -- aacute
-char225 "
-^a 500,661,11,26,33,26 2 0342 -- acircumflex
-char226 "
-~a 500,624,11,61,33,43 2 0343 -- atilde
-char227 "
-:a 500,606,11,39,33,39 2 0344 -- adieresis
-char228 "
-oa 500,691,11,26,33,26 2 0345 -- aring
-char229 "
-ae 667,441,11,23,27,23 0 0346 -- ae
-char230 "
-,c 444,441,217,31,24,31 1 0347 -- ccedilla
-char231 "
-`e 444,664,11,18,19,18 2 0350 -- egrave
-char232 "
-'e 444,664,11,65,19,43 2 0351 -- eacute
-char233 "
-^e 444,661,11,47,19,43 2 0352 -- ecircumflex
-char234 "
-:e 444,606,11,57,19,43 2 0353 -- edieresis
-char235 "
-`i 278,664,11,56,1,43 2 0354 -- igrave
-char236 "
-'i 278,664,11,128,1,43 2 0355 -- iacute
-char237 "
-^i 278,661,11,100,16,43 2 0356 -- icircumflex
-char238 "
-:i 278,606,11,125,1,43 2 0357 -- idieresis
-char239 "
-Sd 500,683,11,32,23,32 2 0360 -- eth
-char240 "
-~n 500,624,9,26,36,26 2 0361 -- ntilde
-char241 "
-`o 500,664,11,18,23,18 2 0362 -- ograve
-char242 "
-'o 500,664,11,37,23,37 2 0363 -- oacute
-char243 "
-^o 500,661,11,18,23,18 2 0364 -- ocircumflex
-char244 "
-~o 500,624,11,46,23,43 2 0365 -- otilde
-char245 "
-:o 500,606,11,39,23,39 2 0366 -- odieresis
-char246 "
-char247 675,517,11,0,-36 0 0367 -- divide
-/o 500,554,135,19,22,19 2 0370 -- oslash
-char248 "
-`u 500,664,11,25,8,25 2 0371 -- ugrave
-char249 "
-'u 500,664,11,27,8,27 2 0372 -- uacute
-char250 "
-^u 500,661,11,25,8,25 2 0373 -- ucircumflex
-char251 "
-:u 500,606,11,29,8,29 2 0374 -- udieresis
-char252 "
-'y 444,664,206,65,74,43 3 0375 -- yacute
-char253 "
-Tp 500,683,205,19,125,19 3 0376 -- thorn
-char254 "
-:y 444,606,206,47,74,43 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/TR b/contrib/groff/devps/TR
deleted file mode 100644
index 6b98075..0000000
--- a/contrib/groff/devps/TR
+++ /dev/null
@@ -1,536 +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 char173 -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 char173 -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 char173 -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 char173 -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
-' 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 char173 -20
-r g -18
-r , -40
-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 0000 -- asciicircum
-ti 541,323 0 0001 -- asciitilde
-vS 556,886,14 2 0002 -- Scaron
-vZ 611,886 2 0003 -- Zcaron
-vs 389,674,10 2 0004 -- scaron
-vz 444,674 2 0005 -- zcaron
-:Y 722,835 2 0006 -- Ydieresis
-tm 980,662 2 0007 -- trademark
-aq 180,676 2 0010 -- quotesingle
-space 250 0 0040
-! 333,676,9 2 0041 -- exclam
-" 408,676 2 0042 -- quotedbl
-dq "
-# 500,662 2 0043 -- numbersign
-sh "
-$ 500,727,87 2 0044 -- dollar
-Do "
-% 833,676,13 2 0045 -- percent
-& 778,676,13 2 0046 -- ampersand
-' 333,676 2 0047 -- quoteright
-cq "
-( 333,676,177 2 0050 -- parenleft
-) 333,676,177 2 0051 -- parenright
-* 500,676 2 0052 -- asterisk
-+ 564,506 0 0053 -- plus
-, 250,102,141 0 0054 -- comma
-- 333,257 0 0055 -- hyphen
-hy "
-char173 "
-. 250,100,11 0 0056 -- period
-/ 278,676,14 2 0057 -- slash
-sl "
-0 500,676,14 2 0060 -- zero
-1 500,676 2 0061 -- one
-2 500,676 2 0062 -- two
-3 500,676,14 2 0063 -- three
-4 500,676 2 0064 -- four
-5 500,688,14 2 0065 -- five
-6 500,684,14 2 0066 -- six
-7 500,662,8 2 0067 -- seven
-8 500,676,14 2 0070 -- eight
-9 500,676,22 2 0071 -- nine
-: 278,459,11 0 0072 -- colon
-; 278,459,141 0 0073 -- semicolon
-< 564,514,8 0 0074 -- less
-= 564,386 0 0075 -- equal
-> 564,514,8 0 0076 -- greater
-? 444,676,8 2 0077 -- question
-@ 921,676,14 2 0100 -- at
-at "
-A 722,674 2 0101 -- A
-B 667,662 2 0102 -- B
-C 667,676,14 2 0103 -- C
-D 722,662 2 0104 -- D
-E 611,662 2 0105 -- E
-F 556,662 2 0106 -- F
-G 722,676,14 2 0107 -- G
-H 722,662 2 0110 -- H
-I 333,662 2 0111 -- I
-J 389,662,14 2 0112 -- J
-K 722,662 2 0113 -- K
-L 611,662 2 0114 -- L
-M 889,662 2 0115 -- M
-N 722,662,11 2 0116 -- N
-O 722,676,14 2 0117 -- O
-P 556,662 2 0120 -- P
-Q 722,676,178 2 0121 -- Q
-R 667,662 2 0122 -- R
-S 556,676,14 2 0123 -- S
-T 611,662 2 0124 -- T
-U 722,662,14 2 0125 -- U
-V 722,662,11 2 0126 -- V
-W 944,662,11 2 0127 -- W
-X 722,662 2 0130 -- X
-Y 722,662 2 0131 -- Y
-Z 611,662 2 0132 -- Z
-[ 333,662,156 2 0133 -- bracketleft
-lB "
-\ 278,676,14 2 0134 -- backslash
-rs "
-] 333,662,156 2 0135 -- bracketright
-rB "
-a^ 333,674 2 0136 -- circumflex
-^ "
-_ 500,0,125 0 0137 -- underscore
-` 333,676 2 0140 -- quoteleft
-oq "
-a 444,460,10 0 0141 -- a
-b 500,683,10 2 0142 -- b
-c 444,460,10 0 0143 -- c
-d 500,683,10 2 0144 -- d
-e 444,460,10 0 0145 -- e
-f 333,683 2 0146 -- f
-g 500,460,218 1 0147 -- g
-h 500,683 2 0150 -- h
-i 278,683 2 0151 -- i
-j 278,683,218 3 0152 -- j
-k 500,683 2 0153 -- k
-l 278,683 2 0154 -- l
-m 778,460 0 0155 -- m
-n 500,460 0 0156 -- n
-o 500,460,10 0 0157 -- o
-p 500,460,217 1 0160 -- p
-q 500,460,217 1 0161 -- q
-r 333,460 0 0162 -- r
-s 389,460,10 0 0163 -- s
-t 278,579,10 2 0164 -- t
-u 500,450,10 0 0165 -- u
-v 500,450,14 0 0166 -- v
-w 722,450,14 0 0167 -- w
-x 500,450 0 0170 -- x
-y 500,450,218 1 0171 -- y
-z 444,450 0 0172 -- z
-lC 480,680,181 2 0173 -- braceleft
-{ "
-ba 200,676,14 2 0174 -- bar
-| "
-rC 480,680,181 2 0175 -- braceright
-} "
-a~ 333,638 2 0176 -- tilde
-~ "
-bq 333,102,141 0 0200 -- quotesinglbase
-Fo 500,416 0 0201 -- guillemotleft
-char171 "
-Fc 500,416 0 0202 -- guillemotright
-char187 "
-bu 350,466 0 0203 -- bullet
-Fn 500,676,189 2 0204 -- florin
-f/ 167,676,14 2 0205 -- fraction
-%0 1000,706,19 2 0206 -- perthousand
-dg 500,676,149 2 0207 -- dagger
-dd 500,676,153 2 0210 -- daggerdbl
-en 500,250 0 0211 -- endash
-em 1000,250 0 0212 -- emdash
-fi 556,683 2 0214 -- fi
-fl 556,683 2 0215 -- fl
-.i 278,460 0 0220 -- dotlessi
-ga 333,678 2 0222 -- grave
-a" 333,678 2 0223 -- hungarumlaut
-a. 333,623 2 0224 -- dotaccent
-ab 333,664 2 0225 -- breve
-ah 333,674 2 0226 -- caron
-ao 333,711 2 0227 -- ring
-ho 333,0,165 0 0230 -- ogonek
-lq 444,676 2 0231 -- quotedblleft
-rq 444,676 2 0232 -- quotedblright
-oe 722,460,10 0 0233 -- oe
-/l 278,683 2 0234 -- lslash
-Bq 444,102,141 0 0235 -- quotedblbase
-OE 889,668,6 2 0236 -- OE
-/L 611,662 2 0237 -- Lslash
-r! 333,467,218 1 0241 -- exclamdown
-char161 "
-ct 500,579,138 2 0242 -- cent
-char162 "
-Po 500,676,8 2 0243 -- sterling
-char163 "
-Cs 500,602 2 0244 -- currency
-char164 "
-Ye 500,662 2 0245 -- yen
-char165 "
-bb 200,676,14 2 0246 -- brokenbar
-char166 "
-sc 500,676,148 2 0247 -- section
-char167 "
-ad 333,623 2 0250 -- dieresis
-char168 "
-co 760,676,14 2 0251 -- copyright
-char169 "
-Of 276,676 2 0252 -- ordfeminine
-char170 "
-fo 333,416 0 0253 -- guilsinglleft
-no 564,386 0 0254 -- logicalnot
-char172 "
-\- 564,286 0 0255 -- minus
-rg 760,676,14 2 0256 -- registered
-char174 "
-a- 333,601 2 0257 -- macron
-char175 "
-de 400,676 2 0260 -- degree
-char176 "
-char177 564,506 0 0261 -- plusminus
-S2 300,676 2 0262 -- twosuperior
-char178 "
-S3 300,676 2 0263 -- threesuperior
-char179 "
-aa 333,678 2 0264 -- acute
-char180 "
-char181 500,450,218 1 0265 -- mu
-ps 453,662,154 2 0266 -- paragraph
-char182 "
-pc 250,310 0 0267 -- periodcentered
-char183 "
-ac 333,0,215 0 0270 -- cedilla
-char184 "
-S1 300,676 2 0271 -- onesuperior
-char185 "
-Om 310,676 2 0272 -- ordmasculine
-char186 "
-fc 333,416 0 0273 -- guilsinglright
-14 750,676,14 2 0274 -- onequarter
-char188 "
-12 750,676,14 2 0275 -- onehalf
-char189 "
-34 750,676,14 2 0276 -- threequarters
-char190 "
-r? 444,466,218 1 0277 -- questiondown
-char191 "
-`A 722,890 2 0300 -- Agrave
-char192 "
-'A 722,890 2 0301 -- Aacute
-char193 "
-^A 722,886 2 0302 -- Acircumflex
-char194 "
-~A 722,850 2 0303 -- Atilde
-char195 "
-:A 722,835 2 0304 -- Adieresis
-char196 "
-oA 722,898 2 0305 -- Aring
-char197 "
-AE 889,662 2 0306 -- AE
-char198 "
-,C 667,676,215 2 0307 -- Ccedilla
-char199 "
-`E 611,890 2 0310 -- Egrave
-char200 "
-'E 611,890 2 0311 -- Eacute
-char201 "
-^E 611,886 2 0312 -- Ecircumflex
-char202 "
-:E 611,835 2 0313 -- Edieresis
-char203 "
-`I 333,890 2 0314 -- Igrave
-char204 "
-'I 333,890 2 0315 -- Iacute
-char205 "
-^I 333,886 2 0316 -- Icircumflex
-char206 "
-:I 333,835 2 0317 -- Idieresis
-char207 "
--D 722,662 2 0320 -- Eth
-char208 "
-~N 722,850,11 2 0321 -- Ntilde
-char209 "
-`O 722,890,14 2 0322 -- Ograve
-char210 "
-'O 722,890,14 2 0323 -- Oacute
-char211 "
-^O 722,886,14 2 0324 -- Ocircumflex
-char212 "
-~O 722,850,14 2 0325 -- Otilde
-char213 "
-:O 722,835,14 2 0326 -- Odieresis
-char214 "
-char215 564,497 0 0327 -- multiply
-/O 722,734,80 2 0330 -- Oslash
-char216 "
-`U 722,890,14 2 0331 -- Ugrave
-char217 "
-'U 722,890,14 2 0332 -- Uacute
-char218 "
-^U 722,886,14 2 0333 -- Ucircumflex
-char219 "
-:U 722,835,14 2 0334 -- Udieresis
-char220 "
-'Y 722,890 2 0335 -- Yacute
-char221 "
-TP 556,662 2 0336 -- Thorn
-char222 "
-ss 500,683,9 2 0337 -- germandbls
-char223 "
-`a 444,678,10 2 0340 -- agrave
-char224 "
-'a 444,678,10 2 0341 -- aacute
-char225 "
-^a 444,674,10 2 0342 -- acircumflex
-char226 "
-~a 444,638,10 2 0343 -- atilde
-char227 "
-:a 444,623,10 2 0344 -- adieresis
-char228 "
-oa 444,711,10 2 0345 -- aring
-char229 "
-ae 667,460,10 0 0346 -- ae
-char230 "
-,c 444,460,215 0 0347 -- ccedilla
-char231 "
-`e 444,678,10 2 0350 -- egrave
-char232 "
-'e 444,678,10 2 0351 -- eacute
-char233 "
-^e 444,674,10 2 0352 -- ecircumflex
-char234 "
-:e 444,623,10 2 0353 -- edieresis
-char235 "
-`i 278,678 2 0354 -- igrave
-char236 "
-'i 278,678 2 0355 -- iacute
-char237 "
-^i 278,674 2 0356 -- icircumflex
-char238 "
-:i 278,623 2 0357 -- idieresis
-char239 "
-Sd 500,686,10 2 0360 -- eth
-char240 "
-~n 500,638 2 0361 -- ntilde
-char241 "
-`o 500,678,10 2 0362 -- ograve
-char242 "
-'o 500,678,10 2 0363 -- oacute
-char243 "
-^o 500,674,10 2 0364 -- ocircumflex
-char244 "
-~o 500,638,10 2 0365 -- otilde
-char245 "
-:o 500,623,10 2 0366 -- odieresis
-char246 "
-char247 564,516,10 0 0367 -- divide
-/o 500,551,112 0 0370 -- oslash
-char248 "
-`u 500,678,10 2 0371 -- ugrave
-char249 "
-'u 500,678,10 2 0372 -- uacute
-char250 "
-^u 500,674,10 2 0373 -- ucircumflex
-char251 "
-:u 500,623,10 2 0374 -- udieresis
-char252 "
-'y 500,678,218 3 0375 -- yacute
-char253 "
-Tp 500,683,217 3 0376 -- thorn
-char254 "
-:y 500,623,218 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/ZCMI b/contrib/groff/devps/ZCMI
deleted file mode 100644
index e25c2a6..0000000
--- a/contrib/groff/devps/ZCMI
+++ /dev/null
@@ -1,494 +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 char173 -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 0000 -- asciicircum
-ti 520,320,0,69,-73,69 0 0001 -- asciitilde
-vS 460,831,81,184,5,87 2 0002 -- Scaron
-vZ 620,831,19,99,8,87 2 0003 -- Zcaron
-vs 320,659,14,194,4,87 2 0004 -- scaron
-vz 440,659,14,124,24,87 2 0005 -- zcaron
-:Y 560,762,168,264,9,87 2 0006 -- Ydieresis
-tm 1000,594,0,96,-77,87 2 0007 -- trademark
-aq 160,610,0,105,-95,87 2 0010 -- quotesingle
-space 220 0 0040
-! 280,610,14,123,-69,87 2 0041 -- exclam
-" 220,610,0,163,-70,87 2 0042 -- quotedbl
-dq "
-# 440,594,0,131,-33,87 2 0043 -- numbersign
-sh "
-$ 440,709,144,118,-10,87 2 0044 -- dollar
-Do "
-% 680,700,160,80,-82,80 2 0045 -- percent
-& 780,610,16,185,-76,87 2 0046 -- ampersand
-' 240,610,0,148,-118,87 2 0047 -- quoteright
-cq "
-( 260,664,216,201,-46,87 2 0050 -- parenleft
-) 220,664,216,132,63,87 2 0051 -- parenright
-* 420,610,0,109,-89,87 2 0052 -- asterisk
-+ 520,426,0,73,-67,73 0 0053 -- plus
-, 220,148,140,43,25,43 0 0054 -- comma
-- 280,248,0,104,-19,87 0 0055 -- hyphen
-hy "
-char173 "
-. 220,128,14,58,-52,58 0 0056 -- period
-/ 340,610,16,168,-24,87 2 0057 -- slash
-sl "
-0 440,610,16,148,-29,87 2 0060 -- zero
-1 440,610,0,38,9,38 2 0061 -- one
-2 440,610,16,95,33,87 2 0062 -- two
-3 440,610,16,95,49,87 2 0063 -- three
-4 440,610,35,109,-27,87 2 0064 -- four
-5 440,679,16,205,-10,87 2 0065 -- five
-6 440,610,16,166,-40,87 2 0066 -- six
-7 440,645,33,171,-107,87 2 0067 -- seven
-8 440,610,16,139,-15,87 2 0070 -- eight
-9 440,610,16,127,18,87 2 0071 -- nine
-: 260,438,14,86,-48,86 0 0072 -- colon
-; 240,438,140,109,21,87 0 0073 -- semicolon
-< 520,468,0,57,-89,57 0 0074 -- less
-= 520,340,0,73,-67,73 0 0075 -- equal
-> 520,468,0,57,-89,57 0 0076 -- greater
-? 380,610,14,125,-100,87 2 0077 -- question
-@ 700,610,16,103,-77,87 2 0100 -- at
-at "
-A 620,632,16,127,37,87 2 0101 -- A
-B 600,640,6,124,-35,87 2 0102 -- B
-C 520,610,16,161,-43,87 2 0103 -- C
-D 700,640,6,118,-36,87 2 0104 -- D
-E 620,618,12,139,-41,87 2 0105 -- E
-F 580,629,118,263,-70,87 2 0106 -- F
-G 620,610,242,139,-98,87 2 0107 -- G
-H 680,708,16,248,32,87 2 0110 -- H
-I 380,594,0,174,-49,87 2 0111 -- I
-J 400,594,147,188,64,87 2 0112 -- J
-K 660,610,153,234,-3,87 2 0113 -- K
-L 580,610,16,127,-3,87 2 0114 -- L
-M 840,722,16,230,-8,87 2 0115 -- M
-N 700,708,168,265,-35,87 2 0116 -- N
-O 600,610,16,110,-44,87 2 0117 -- O
-P 540,628,0,168,8,87 2 0120 -- P
-Q 600,610,177,225,-34,87 2 0121 -- Q
-R 600,640,168,255,-8,87 2 0122 -- R
-S 460,610,81,148,5,87 2 0123 -- S
-T 500,667,0,294,-13,87 2 0124 -- T
-U 740,617,16,102,-76,87 2 0125 -- U
-V 640,714,16,220,-74,87 2 0126 -- V
-W 880,723,16,216,-44,87 2 0127 -- W
-X 560,610,16,189,80,87 2 0130 -- X
-Y 560,647,168,264,9,87 2 0131 -- Y
-Z 620,624,19,99,8,87 2 0132 -- Z
-[ 240,655,207,215,63,87 2 0133 -- bracketleft
-lB "
-\ 480,610,16,94,-90,87 2 0134 -- backslash
-rs "
-] 320,655,207,121,77,87 2 0135 -- bracketright
-rB "
-a^ 340,649,0,153,-173,87 2 0136 -- circumflex
-^ "
-_ 500,0,125,50,50,50 0 0137 -- underscore
-` 240,610,0,149,-119,87 2 0140 -- quoteleft
-oq "
-a 420,438,15,115,-42,87 0 0141 -- a
-b 420,714,23,122,-32,87 2 0142 -- b
-c 340,438,14,116,-37,87 0 0143 -- c
-d 440,714,14,261,-52,87 2 0144 -- d
-e 340,438,14,113,-37,87 0 0145 -- e
-f 320,714,314,277,169,87 3 0146 -- f
-g 400,438,314,153,158,87 1 0147 -- g
-h 440,714,14,134,-5,87 2 0150 -- h
-i 240,635,14,151,-50,87 2 0151 -- i
-j 220,635,314,162,162,87 3 0152 -- j
-k 440,714,184,238,-37,87 2 0153 -- k
-l 240,714,14,290,-52,87 2 0154 -- l
-m 620,438,14,134,-36,87 0 0155 -- m
-n 460,438,14,134,-51,87 0 0156 -- n
-o 400,438,14,99,-37,87 0 0157 -- o
-p 440,432,314,94,73,87 1 0160 -- p
-q 400,510,300,140,-37,87 1 0161 -- q
-r 300,438,14,174,-51,87 0 0162 -- r
-s 320,438,14,133,4,87 0 0163 -- s
-t 320,539,14,156,-56,87 2 0164 -- t
-u 460,438,14,118,-52,87 0 0165 -- u
-v 440,488,14,143,-37,87 0 0166 -- v
-w 680,488,14,152,-37,87 0 0167 -- w
-x 420,438,195,219,-20,87 0 0170 -- x
-y 400,438,314,133,74,87 1 0171 -- y
-z 440,445,14,118,24,87 0 0172 -- z
-lC 240,655,207,193,-5,87 2 0173 -- braceleft
-{ "
-ba 520,714,16,0,-270 2 0174 -- bar
-| "
-rC 240,655,207,128,60,87 2 0175 -- braceright
-} "
-a~ 440,619,0,132,-193,87 2 0176 -- tilde
-~ "
-bq 180,146,121,61,29,61 0 0200 -- quotesinglbase
-Fo 340,414,0,66,-48,66 0 0201 -- guillemotleft
-char171 "
-Fc 380,414,0,45,-67,45 0 0202 -- guillemotright
-char187 "
-bu 600,445,0,0,-178 0 0203 -- bullet
-Fn 440,610,314,192,114,87 3 0204 -- florin
-f/ 60,610,16,310,231,87 2 0205 -- fraction
-%0 960,700,160,95,-62,87 2 0206 -- perthousand
-dg 460,610,37,158,-88,87 2 0207 -- dagger
-dd 480,610,59,103,-88,87 2 0210 -- daggerdbl
-en 500,239,0,115,-1,87 0 0211 -- endash
-em 1000,239,0,115,-1,87 0 0212 -- emdash
-fi 520,714,314,135,174,87 3 0214 -- fi
-fl 520,714,314,200,174,87 3 0215 -- fl
-.i 240,438,14,116,-50,87 0 0220 -- dotlessi
-ga 220,659,0,169,-143,87 2 0222 -- grave
-a" 400,659,0,145,-158,87 2 0223 -- hungarumlaut
-a. 220,610,0,158,-186,87 2 0224 -- dotaccent
-ab 440,631,0,111,-203,87 2 0225 -- breve
-ah 340,659,0,184,-204,87 2 0226 -- caron
-ao 300,659,0,166,-190,87 2 0227 -- ring
-ho 280,6,191,3,12,3 0 0230 -- ogonek
-lq 340,610,0,174,-119,87 2 0231 -- quotedblleft
-rq 360,610,0,143,-108,87 2 0232 -- quotedblright
-oe 560,438,14,118,-28,87 0 0233 -- oe
-/l 300,714,14,265,-71,87 2 0234 -- lslash
-Bq 280,146,121,51,64,51 0 0235 -- quotedblbase
-OE 820,610,16,139,-13,87 2 0236 -- OE
-/L 580,610,16,127,1,87 2 0237 -- Lslash
-r! 280,438,186,76,-22,76 0 0241 -- exclamdown
-char161 "
-ct 440,543,134,86,-72,86 2 0242 -- cent
-char162 "
-Po 440,610,52,116,66,87 2 0243 -- sterling
-char163 "
-Cs 440,509,0,84,0,84 0 0244 -- currency
-char164 "
-Ye 440,647,168,223,51,87 2 0245 -- yen
-char165 "
-bb 520,714,16,0,-270 2 0246 -- brokenbar
-char166 "
-sc 420,610,215,144,-3,87 2 0247 -- section
-char167 "
-ad 360,610,0,159,-193,87 2 0250 -- dieresis
-char168 "
-co 740,610,16,73,-87,73 2 0251 -- copyright
-char169 "
-Of 260,610,0,176,-61,87 2 0252 -- ordfeminine
-char170 "
-fo 240,414,0,68,-48,68 0 0253 -- guilsinglleft
-no 520,340,0,73,-67,73 0 0254 -- logicalnot
-char172 "
-\- 520,242,0,73,-67,73 0 0255 -- minus
-rg 740,610,16,73,-87,73 2 0256 -- registered
-char174 "
-a- 440,578,0,75,-172,75 2 0257 -- macron
-char175 "
-de 400,610,0,107,-121,87 2 0260 -- degree
-char176 "
-char177 520,436,0,73,-67,73 0 0261 -- plusminus
-S2 264,610,0,140,-22,87 2 0262 -- twosuperior
-char178 "
-S3 264,610,0,134,-9,87 2 0263 -- threesuperior
-char179 "
-aa 300,659,0,172,-215,87 2 0264 -- acute
-char180 "
-char181 460,438,314,113,43,87 1 0265 -- mu
-ps 500,594,199,188,-55,87 2 0266 -- paragraph
-char182 "
-pc 220,310,0,71,-89,71 0 0267 -- periodcentered
-char183 "
-ac 300,6,191,0,38 0 0270 -- cedilla
-char184 "
-S1 264,610,0,97,-33,87 2 0271 -- onesuperior
-char185 "
-Om 260,610,0,163,-78,87 2 0272 -- ordmasculine
-char186 "
-fc 260,414,0,56,-56,56 0 0273 -- guilsinglright
-14 660,610,16,92,-6,87 2 0274 -- onequarter
-char188 "
-12 660,610,16,92,-6,87 2 0275 -- onehalf
-char189 "
-34 660,610,16,96,11,87 2 0276 -- threequarters
-char190 "
-r? 400,438,186,37,-32,37 0 0277 -- questiondown
-char191 "
-`A 620,821,16,127,37,87 2 0300 -- Agrave
-char192 "
-'A 620,821,16,132,37,87 2 0301 -- Aacute
-char193 "
-^A 620,821,16,127,37,87 2 0302 -- Acircumflex
-char194 "
-~A 620,771,16,132,37,87 2 0303 -- Atilde
-char195 "
-:A 620,762,16,139,37,87 2 0304 -- Adieresis
-char196 "
-oA 620,831,16,127,37,87 2 0305 -- Aring
-char197 "
-AE 740,594,16,109,71,87 2 0306 -- AE
-char198 "
-,C 520,610,191,161,-43,87 2 0307 -- Ccedilla
-char199 "
-`E 620,821,12,139,-41,87 2 0310 -- Egrave
-char200 "
-'E 620,821,12,139,-41,87 2 0311 -- Eacute
-char201 "
-^E 620,821,12,139,-41,87 2 0312 -- Ecircumflex
-char202 "
-:E 620,762,12,139,-41,87 2 0313 -- Edieresis
-char203 "
-`I 380,821,0,174,-49,87 2 0314 -- Igrave
-char204 "
-'I 380,821,0,202,-49,87 2 0315 -- Iacute
-char205 "
-^I 380,821,0,174,-49,87 2 0316 -- Icircumflex
-char206 "
-:I 380,762,0,189,-49,87 2 0317 -- Idieresis
-char207 "
--D 700,640,6,118,-36,87 2 0320 -- Eth
-char208 "
-~N 700,761,168,265,-35,87 2 0321 -- Ntilde
-char209 "
-`O 600,821,16,110,-44,87 2 0322 -- Ograve
-char210 "
-'O 600,821,16,110,-44,87 2 0323 -- Oacute
-char211 "
-^O 600,821,16,110,-44,87 2 0324 -- Ocircumflex
-char212 "
-~O 600,761,16,110,-44,87 2 0325 -- Otilde
-char213 "
-:O 600,762,16,110,-44,87 2 0326 -- Odieresis
-char214 "
-char215 520,410,0,57,-83,57 0 0327 -- multiply
-/O 660,672,78,141,-33,87 2 0330 -- Oslash
-char216 "
-`U 740,821,16,102,-76,87 2 0331 -- Ugrave
-char217 "
-'U 740,821,16,102,-76,87 2 0332 -- Uacute
-char218 "
-^U 740,821,16,102,-76,87 2 0333 -- Ucircumflex
-char219 "
-:U 740,762,16,102,-76,87 2 0334 -- Udieresis
-char220 "
-'Y 560,821,168,264,9,87 2 0335 -- Yacute
-char221 "
-TP 540,623,0,157,-2,87 2 0336 -- Thorn
-char222 "
-ss 420,714,314,172,177,87 3 0337 -- germandbls
-char223 "
-`a 420,659,15,115,-42,87 2 0340 -- agrave
-char224 "
-'a 420,659,15,122,-42,87 2 0341 -- aacute
-char225 "
-^a 420,649,15,115,-42,87 2 0342 -- acircumflex
-char226 "
-~a 420,619,15,152,-42,87 2 0343 -- atilde
-char227 "
-:a 420,610,15,115,-42,87 2 0344 -- adieresis
-char228 "
-oa 420,659,15,115,-42,87 2 0345 -- aring
-char229 "
-ae 540,468,14,134,-17,87 0 0346 -- ae
-char230 "
-,c 340,438,191,116,-12,87 0 0347 -- ccedilla
-char231 "
-`e 340,659,14,113,-37,87 2 0350 -- egrave
-char232 "
-'e 340,659,14,172,-37,87 2 0351 -- eacute
-char233 "
-^e 340,649,14,143,-37,87 2 0352 -- ecircumflex
-char234 "
-:e 340,610,14,159,-37,87 2 0353 -- edieresis
-char235 "
-`i 240,659,14,116,-50,87 2 0354 -- igrave
-char236 "
-'i 240,659,14,202,-50,87 2 0355 -- iacute
-char237 "
-^i 240,649,14,173,-50,87 2 0356 -- icircumflex
-char238 "
-:i 240,610,14,179,-50,87 2 0357 -- idieresis
-char239 "
-Sd 400,714,14,172,-37,87 2 0360 -- eth
-char240 "
-~n 460,619,14,134,-51,87 2 0361 -- ntilde
-char241 "
-`o 400,659,14,99,-37,87 2 0362 -- ograve
-char242 "
-'o 400,659,14,132,-37,87 2 0363 -- oacute
-char243 "
-^o 400,649,14,103,-37,87 2 0364 -- ocircumflex
-char244 "
-~o 400,619,14,152,-37,87 2 0365 -- otilde
-char245 "
-:o 400,610,14,129,-37,87 2 0366 -- odieresis
-char246 "
-char247 520,440,14,73,-67,73 0 0367 -- divide
-/o 440,488,64,150,4,87 0 0370 -- oslash
-char248 "
-`u 460,659,14,118,-52,87 2 0371 -- ugrave
-char249 "
-'u 460,659,14,118,-52,87 2 0372 -- uacute
-char250 "
-^u 460,649,14,118,-52,87 2 0373 -- ucircumflex
-char251 "
-:u 460,610,14,118,-52,87 2 0374 -- udieresis
-char252 "
-'y 400,659,314,133,74,87 3 0375 -- yacute
-char253 "
-Tp 440,714,314,115,88,87 3 0376 -- thorn
-char254 "
-:y 400,610,314,133,74,87 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/devps/ZD b/contrib/groff/devps/ZD
deleted file mode 100644
index 3066c39..0000000
--- a/contrib/groff/devps/ZD
+++ /dev/null
@@ -1,193 +0,0 @@
-name ZD
-internalname ZapfDingbats
-special
-spacewidth 278
-charset
-space 278 0 0040
---- 974,621 3 0041 -- a1
---- 961,611 3 0042 -- a2
---- 974,621 3 0043 -- a202
---- 980,692 3 0044 -- a3
---- 719,566 3 0045 -- a4
---- 789,705,14 3 0046 -- a5
---- 790,705,14 3 0047 -- a119
---- 791,705,13 3 0050 -- a118
---- 690,553 3 0051 -- a117
---- 960,568 3 0052 -- a11
-rh 939,559 3 0053 -- a12
---- 549,705,11 3 0054 -- a13
---- 855,632 3 0055 -- a14
---- 911,642 3 0056 -- a15
---- 933,550 3 0057 -- a16
---- 911,642 3 0060 -- a105
---- 945,553 3 0061 -- a17
---- 974,587 3 0062 -- a18
-OK 755,705,13 3 0063 -- a19
---- 846,705,14 3 0064 -- a20
---- 762,692 3 0065 -- a21
---- 761,692 3 0066 -- a22
---- 571,661,68 3 0067 -- a23
---- 677,705,13 3 0070 -- a24
---- 763,692 3 0071 -- a25
---- 760,692 3 0072 -- a26
---- 759,692 3 0073 -- a27
---- 754,692 3 0074 -- a28
---- 494,692 3 0075 -- a6
---- 552,692 3 0076 -- a7
---- 537,692 3 0077 -- a8
---- 577,596 3 0100 -- a9
---- 692,705,14 3 0101 -- a10
---- 786,705,14 3 0102 -- a29
---- 788,705,14 3 0103 -- a30
---- 788,705,14 3 0104 -- a31
---- 790,705,14 3 0105 -- a32
---- 793,705,13 3 0106 -- a33
---- 794,705,13 3 0107 -- a34
---- 816,705,14 3 0110 -- a35
---- 823,705,14 3 0111 -- a36
---- 789,705,14 3 0112 -- a37
---- 841,705,14 3 0113 -- a38
---- 823,705,14 3 0114 -- a39
---- 833,705,14 3 0115 -- a40
---- 816,705,13 3 0116 -- a41
---- 831,705,14 3 0117 -- a42
---- 923,705,14 3 0120 -- a43
---- 744,692 3 0121 -- a44
---- 723,692 3 0122 -- a45
---- 749,692 3 0123 -- a46
---- 790,705,14 3 0124 -- a47
---- 792,705,14 3 0125 -- a48
---- 695,706,14 3 0126 -- a49
---- 776,699,6 3 0127 -- a50
---- 768,699,7 3 0130 -- a51
---- 792,705,14 3 0131 -- a52
---- 759,692 3 0132 -- a53
---- 707,704,13 3 0133 -- a54
---- 708,705,14 3 0134 -- a55
---- 682,705,14 3 0135 -- a56
---- 701,705,14 3 0136 -- a57
---- 826,705,14 3 0137 -- a58
---- 815,705,14 3 0140 -- a59
---- 789,705,14 3 0141 -- a60
---- 789,705,14 3 0142 -- a61
---- 707,705,14 3 0143 -- a62
---- 687,692 3 0144 -- a63
---- 696,691 3 0145 -- a64
---- 689,692 3 0146 -- a65
---- 786,705,14 3 0147 -- a66
---- 787,705,14 3 0150 -- a67
---- 713,705,14 3 0151 -- a68
---- 791,705,14 3 0152 -- a69
---- 785,705,14 3 0153 -- a70
---- 791,705,14 3 0154 -- a71
---- 873,705,14 3 0155 -- a72
---- 761,692 3 0156 -- a73
---- 762,692 3 0157 -- a74
---- 762,692 3 0160 -- a203
---- 759,692 3 0161 -- a75
---- 759,692 3 0162 -- a204
---- 892,705 3 0163 -- a76
---- 892,692,14 3 0164 -- a77
---- 788,705,14 3 0165 -- a78
---- 784,705,14 3 0166 -- a79
---- 438,705,14 3 0167 -- a81
---- 138,692 3 0170 -- a82
---- 277,692 3 0171 -- a83
---- 415,692 3 0172 -- a84
---- 392,705 3 0173 -- a97
---- 392,705 3 0174 -- a98
---- 668,705 3 0175 -- a99
---- 668,705 3 0176 -- a100
---- 732,806,143 3 0241 -- a101
---- 544,706,14 3 0242 -- a102
---- 544,705,14 3 0243 -- a103
---- 910,651 3 0244 -- a104
---- 667,705,14 3 0245 -- a106
---- 760,705,14 3 0246 -- a107
---- 760,569 3 0247 -- a108
---- 776,705 3 0250 -- a112
---- 595,705,14 3 0251 -- a111
---- 694,705,14 3 0252 -- a110
---- 626,705 3 0253 -- a109
---- 788,705,14 3 0254 -- a120
---- 788,705,14 3 0255 -- a121
---- 788,705,14 3 0256 -- a122
---- 788,705,14 3 0257 -- a123
---- 788,705,14 3 0260 -- a124
---- 788,705,14 3 0261 -- a125
---- 788,705,14 3 0262 -- a126
---- 788,705,14 3 0263 -- a127
---- 788,705,14 3 0264 -- a128
---- 788,705,14 3 0265 -- a129
---- 788,705,14 3 0266 -- a130
---- 788,705,14 3 0267 -- a131
---- 788,705,14 3 0270 -- a132
---- 788,705,14 3 0271 -- a133
---- 788,705,14 3 0272 -- a134
---- 788,705,14 3 0273 -- a135
---- 788,705,14 3 0274 -- a136
---- 788,705,14 3 0275 -- a137
---- 788,705,14 3 0276 -- a138
---- 788,705,14 3 0277 -- a139
---- 788,705,14 3 0300 -- a140
---- 788,705,14 3 0301 -- a141
---- 788,705,14 3 0302 -- a142
---- 788,705,14 3 0303 -- a143
---- 788,705,14 3 0304 -- a144
---- 788,705,14 3 0305 -- a145
---- 788,705,14 3 0306 -- a146
---- 788,705,14 3 0307 -- a147
---- 788,705,14 3 0310 -- a148
---- 788,705,14 3 0311 -- a149
---- 788,705,14 3 0312 -- a150
---- 788,705,14 3 0313 -- a151
---- 788,705,14 3 0314 -- a152
---- 788,705,14 3 0315 -- a153
---- 788,705,14 3 0316 -- a154
---- 788,705,14 3 0317 -- a155
---- 788,705,14 3 0320 -- a156
---- 788,705,14 3 0321 -- a157
---- 788,705,14 3 0322 -- a158
---- 788,705,14 3 0323 -- a159
---- 894,634 3 0324 -- a160
---- 838,540 3 0325 -- a161
---- 1016,540 3 0326 -- a163
---- 458,820,127 3 0327 -- a164
---- 748,597 3 0330 -- a196
---- 924,552 3 0331 -- a165
---- 748,597 3 0332 -- a192
---- 918,526 3 0333 -- a166
---- 927,660 3 0334 -- a167
---- 928,562 3 0335 -- a168
---- 928,563 3 0336 -- a169
---- 834,537 3 0337 -- a170
---- 873,599 3 0340 -- a171
---- 828,588 3 0341 -- a172
---- 924,594 3 0342 -- a173
---- 924,594 3 0343 -- a162
---- 917,692 3 0344 -- a174
---- 930,608 3 0345 -- a175
---- 931,608 3 0346 -- a176
---- 463,791,99 3 0347 -- a177
---- 883,623 3 0350 -- a178
---- 836,648 3 0351 -- a179
---- 836,648 3 0352 -- a193
---- 867,591 3 0353 -- a180
---- 867,591 3 0354 -- a199
---- 696,648 3 0355 -- a181
---- 696,648 3 0356 -- a200
---- 874,619 3 0357 -- a182
---- 874,615 3 0361 -- a201
---- 760,692 3 0362 -- a183
---- 946,533 3 0363 -- a184
---- 771,655 3 0364 -- a197
---- 865,481 3 0365 -- a185
---- 771,655 3 0366 -- a194
---- 888,712,19 3 0367 -- a198
---- 967,568 3 0370 -- a186
---- 888,712,19 3 0371 -- a195
---- 831,579 3 0372 -- a187
---- 873,578 3 0373 -- a188
---- 927,542 3 0374 -- a189
---- 970,616 3 0375 -- a190
---- 918,593 3 0376 -- a191
diff --git a/contrib/groff/devps/ZDR b/contrib/groff/devps/ZDR
deleted file mode 100644
index ab5b54f..0000000
--- a/contrib/groff/devps/ZDR
+++ /dev/null
@@ -1,193 +0,0 @@
-name ZDR
-internalname ZapfDingbats-Reverse
-special
-spacewidth 278
-charset
-space 278 0 0040
---- 974,621 3 0041 -- a1
---- 961,611 3 0042 -- a2
---- 974,621 3 0043 -- a202
---- 980,692 3 0044 -- a3
---- 719,566 3 0045 -- a4
---- 789,705,14 3 0046 -- a5
---- 790,705,14 3 0047 -- a119
---- 791,705,13 3 0050 -- a118
---- 690,553 3 0051 -- a117
---- 960,568 3 0052 -- a11
-lh 939,559 3 0053 -- a12
---- 549,705,11 3 0054 -- a13
---- 855,632 3 0055 -- a14
---- 911,642 3 0056 -- a15
---- 933,550 3 0057 -- a16
---- 911,642 3 0060 -- a105
---- 945,553 3 0061 -- a17
---- 974,587 3 0062 -- a18
---- 755,705,13 3 0063 -- a19
---- 846,705,14 3 0064 -- a20
---- 762,692 3 0065 -- a21
---- 761,692 3 0066 -- a22
---- 571,661,68 3 0067 -- a23
---- 677,705,13 3 0070 -- a24
---- 763,692 3 0071 -- a25
---- 760,692 3 0072 -- a26
---- 759,692 3 0073 -- a27
---- 754,692 3 0074 -- a28
---- 494,692 3 0075 -- a6
---- 552,692 3 0076 -- a7
---- 537,692 3 0077 -- a8
---- 577,596 3 0100 -- a9
---- 692,705,14 3 0101 -- a10
---- 786,705,14 3 0102 -- a29
---- 788,705,14 3 0103 -- a30
---- 788,705,14 3 0104 -- a31
---- 790,705,14 3 0105 -- a32
---- 793,705,13 3 0106 -- a33
---- 794,705,13 3 0107 -- a34
---- 816,705,14 3 0110 -- a35
---- 823,705,14 3 0111 -- a36
---- 789,705,14 3 0112 -- a37
---- 841,705,14 3 0113 -- a38
---- 823,705,14 3 0114 -- a39
---- 833,705,14 3 0115 -- a40
---- 816,705,13 3 0116 -- a41
---- 831,705,14 3 0117 -- a42
---- 923,705,14 3 0120 -- a43
---- 744,692 3 0121 -- a44
---- 723,692 3 0122 -- a45
---- 749,692 3 0123 -- a46
---- 790,705,14 3 0124 -- a47
---- 792,705,14 3 0125 -- a48
---- 695,706,14 3 0126 -- a49
---- 776,699,6 3 0127 -- a50
---- 768,699,7 3 0130 -- a51
---- 792,705,14 3 0131 -- a52
---- 759,692 3 0132 -- a53
---- 707,704,13 3 0133 -- a54
---- 708,705,14 3 0134 -- a55
---- 682,705,14 3 0135 -- a56
---- 701,705,14 3 0136 -- a57
---- 826,705,14 3 0137 -- a58
---- 815,705,14 3 0140 -- a59
---- 789,705,14 3 0141 -- a60
---- 789,705,14 3 0142 -- a61
---- 707,705,14 3 0143 -- a62
---- 687,692 3 0144 -- a63
---- 696,691 3 0145 -- a64
---- 689,692 3 0146 -- a65
---- 786,705,14 3 0147 -- a66
---- 787,705,14 3 0150 -- a67
---- 713,705,14 3 0151 -- a68
---- 791,705,14 3 0152 -- a69
---- 785,705,14 3 0153 -- a70
---- 791,705,14 3 0154 -- a71
---- 873,705,14 3 0155 -- a72
---- 761,692 3 0156 -- a73
---- 762,692 3 0157 -- a74
---- 762,692 3 0160 -- a203
---- 759,692 3 0161 -- a75
---- 759,692 3 0162 -- a204
---- 892,705 3 0163 -- a76
---- 892,692,14 3 0164 -- a77
---- 788,705,14 3 0165 -- a78
---- 784,705,14 3 0166 -- a79
---- 438,705,14 3 0167 -- a81
---- 138,692 3 0170 -- a82
---- 277,692 3 0171 -- a83
---- 415,692 3 0172 -- a84
---- 392,705 3 0173 -- a97
---- 392,705 3 0174 -- a98
---- 668,705 3 0175 -- a99
---- 668,705 3 0176 -- a100
---- 732,806,143 3 0241 -- a101
---- 544,706,14 3 0242 -- a102
---- 544,705,14 3 0243 -- a103
---- 910,651 3 0244 -- a104
---- 667,705,14 3 0245 -- a106
---- 760,705,14 3 0246 -- a107
---- 760,569 3 0247 -- a108
---- 776,705 3 0250 -- a112
---- 595,705,14 3 0251 -- a111
---- 694,705,14 3 0252 -- a110
---- 626,705 3 0253 -- a109
---- 788,705,14 3 0254 -- a120
---- 788,705,14 3 0255 -- a121
---- 788,705,14 3 0256 -- a122
---- 788,705,14 3 0257 -- a123
---- 788,705,14 3 0260 -- a124
---- 788,705,14 3 0261 -- a125
---- 788,705,14 3 0262 -- a126
---- 788,705,14 3 0263 -- a127
---- 788,705,14 3 0264 -- a128
---- 788,705,14 3 0265 -- a129
---- 788,705,14 3 0266 -- a130
---- 788,705,14 3 0267 -- a131
---- 788,705,14 3 0270 -- a132
---- 788,705,14 3 0271 -- a133
---- 788,705,14 3 0272 -- a134
---- 788,705,14 3 0273 -- a135
---- 788,705,14 3 0274 -- a136
---- 788,705,14 3 0275 -- a137
---- 788,705,14 3 0276 -- a138
---- 788,705,14 3 0277 -- a139
---- 788,705,14 3 0300 -- a140
---- 788,705,14 3 0301 -- a141
---- 788,705,14 3 0302 -- a142
---- 788,705,14 3 0303 -- a143
---- 788,705,14 3 0304 -- a144
---- 788,705,14 3 0305 -- a145
---- 788,705,14 3 0306 -- a146
---- 788,705,14 3 0307 -- a147
---- 788,705,14 3 0310 -- a148
---- 788,705,14 3 0311 -- a149
---- 788,705,14 3 0312 -- a150
---- 788,705,14 3 0313 -- a151
---- 788,705,14 3 0314 -- a152
---- 788,705,14 3 0315 -- a153
---- 788,705,14 3 0316 -- a154
---- 788,705,14 3 0317 -- a155
---- 788,705,14 3 0320 -- a156
---- 788,705,14 3 0321 -- a157
---- 788,705,14 3 0322 -- a158
---- 788,705,14 3 0323 -- a159
---- 894,634 3 0324 -- a160
---- 838,540 3 0325 -- a161
---- 1016,540 3 0326 -- a163
---- 458,820,127 3 0327 -- a164
---- 748,597 3 0330 -- a196
---- 924,552 3 0331 -- a165
---- 748,597 3 0332 -- a192
---- 918,526 3 0333 -- a166
---- 927,660 3 0334 -- a167
---- 928,562 3 0335 -- a168
---- 928,563 3 0336 -- a169
---- 834,537 3 0337 -- a170
---- 873,599 3 0340 -- a171
---- 828,588 3 0341 -- a172
---- 924,594 3 0342 -- a173
---- 924,594 3 0343 -- a162
---- 917,692 3 0344 -- a174
---- 930,608 3 0345 -- a175
---- 931,608 3 0346 -- a176
---- 463,791,99 3 0347 -- a177
---- 883,623 3 0350 -- a178
---- 836,648 3 0351 -- a179
---- 836,648 3 0352 -- a193
---- 867,591 3 0353 -- a180
---- 867,591 3 0354 -- a199
---- 696,648 3 0355 -- a181
---- 696,648 3 0356 -- a200
---- 874,619 3 0357 -- a182
---- 874,615 3 0361 -- a201
---- 760,692 3 0362 -- a183
---- 946,533 3 0363 -- a184
---- 771,655 3 0364 -- a197
---- 865,481 3 0365 -- a185
---- 771,655 3 0366 -- a194
---- 888,712,19 3 0367 -- a198
---- 967,568 3 0370 -- a186
---- 888,712,19 3 0371 -- a195
---- 831,579 3 0372 -- a187
---- 873,578 3 0373 -- a188
---- 927,542 3 0374 -- a189
---- 970,616 3 0375 -- a190
---- 918,593 3 0376 -- a191
diff --git a/contrib/groff/devps/download b/contrib/groff/devps/download
deleted file mode 100644
index b98885c..0000000
--- a/contrib/groff/devps/download
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of downloadable fonts
-# PostScript-name Filename
-
-Symbol-Slanted symbolsl.pfa
-ZapfDingbats-Reverse zapfdr.pfa
diff --git a/contrib/groff/devps/generate/Makefile b/contrib/groff/devps/generate/Makefile
deleted file mode 100644
index fb5c3d5..0000000
--- a/contrib/groff/devps/generate/Makefile
+++ /dev/null
@@ -1,223 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# This is set up so you can do
-# make -f generate/Makefile
-# in the parent directory of this directory.
-
-# 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)
-
-DESC=$(srcdir)/../DESC
-AFMTODIT=afmtodit -d$(DESC)
-IFLAG=-i 50
-NOLIGFLAG=-n
-TEXTENC=$(srcdir)/../text.enc
-EFLAG=-e $(TEXTENC)
-TEXTMAP=$(srcdir)/textmap
-AFMNAME=$(srcdir)/afmname
-
-all: $(FONTS)
-
-TR:
- $(AFMTODIT) $(EFLAG) \
- `$(AFMNAME) $(afmdir)/Times-Roman.afm` $(TEXTMAP) $@
-
-TB:
- $(AFMTODIT) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/Helvetica.afm` $(TEXTMAP) $@
-
-HB:
- $(AFMTODIT) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/Courier.afm` $(TEXTMAP) $@
-
-CB:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` $(TEXTMAP) $@
-
-PB:
- $(AFMTODIT) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` $(TEXTMAP) $@
-
-NB:
- $(AFMTODIT) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/Bookman-Light.afm` $(TEXTMAP) $@
-
-BMB:
- $(AFMTODIT) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` $(TEXTMAP) $@
-
-AB:
- $(AFMTODIT) $(EFLAG) \
- `$(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) \
- `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` $(TEXTMAP) $@
-
-HNB:
- $(AFMTODIT) $(EFLAG) \
- `$(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 \
- `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` $(srcdir)/dingbatsmap $@
-
-SS: $(srcdir)/symbolsl.afm
- $(AFMTODIT) -s $(IFLAG) $(srcdir)/symbolsl.afm $(srcdir)/lgreekmap $@
-
-S: symbol.afm
- $(AFMTODIT) -s symbol.afm symbolmap $@
-
-ZDR: zapfdr.afm
- $(AFMTODIT) -s zapfdr.afm $(srcdir)/dingbatsrmap $@
-
-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)/dingbatsmap
-ZDR: $(srcdir)/dingbatsrmap
-$(TEXTFONTS): $(TEXTMAP) $(TEXTENC)
-$(SPECIALFONTS): symbolmap
-$(GREEKFONTS): $(srcdir)/lgreekmap
-$(FONTS): $(DESC)
-
-symbolmap: $(TEXTMAP) $(srcdir)/symbolchars
- 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/devps/generate/afmname b/contrib/groff/devps/generate/afmname
deleted file mode 100755
index 3e837df..0000000
--- a/contrib/groff/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/devps/generate/dingbatsmap b/contrib/groff/devps/generate/dingbatsmap
deleted file mode 100644
index 3a97fa9..0000000
--- a/contrib/groff/devps/generate/dingbatsmap
+++ /dev/null
@@ -1,2 +0,0 @@
-a19 OK
-a12 rh
diff --git a/contrib/groff/devps/generate/dingbatsrmap b/contrib/groff/devps/generate/dingbatsrmap
deleted file mode 100644
index ccc14cb..0000000
--- a/contrib/groff/devps/generate/dingbatsrmap
+++ /dev/null
@@ -1 +0,0 @@
-a12 lh
diff --git a/contrib/groff/devps/generate/lgreekmap b/contrib/groff/devps/generate/lgreekmap
deleted file mode 100644
index 0b0c197..0000000
--- a/contrib/groff/devps/generate/lgreekmap
+++ /dev/null
@@ -1,28 +0,0 @@
-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/devps/generate/symbol.sed b/contrib/groff/devps/generate/symbol.sed
deleted file mode 100644
index b4b02ab..0000000
--- a/contrib/groff/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/devps/generate/symbolchars b/contrib/groff/devps/generate/symbolchars
deleted file mode 100644
index 41ec3e4..0000000
--- a/contrib/groff/devps/generate/symbolchars
+++ /dev/null
@@ -1,60 +0,0 @@
-plus pl
-minus mi
-plusminus +-
-equal eq
-divide di
-multiply mu
-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
-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/devps/generate/symbolsl.afm b/contrib/groff/devps/generate/symbolsl.afm
deleted file mode 100644
index 90939ad..0000000
--- a/contrib/groff/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/devps/generate/textmap b/contrib/groff/devps/generate/textmap
deleted file mode 100644
index 5b5e0ea..0000000
--- a/contrib/groff/devps/generate/textmap
+++ /dev/null
@@ -1,453 +0,0 @@
-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
-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
-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
-asciicircum ha
-asciitilde ti
-asterisk *
-asteriskmath **
-at @
-at at
-atilde ~a
-backslash \
-backslash rs
-bar ba
-bar |
-bell bs
-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 =
-equalmath eq
-equivalence ==
-eth Sd
-exclam !
-exclamdown r!
-existential te
-ff ff
-ffi Fi
-ffl Fl
-fi fi
-five 5
-fl fl
-florin Fn
-four 4
-germandbls ss
-gradient gr
-grave ga
-greater >
-greaterequal >=
-guillemotleft Fo
-guillemotright Fc
-guilsinglleft fo
-guilsinglright fc
-handleft lh
-handright rh
-hbar -h
-hungarumlaut a"
-hyphen -
-hyphen hy
-iacute 'i
-icircumflex ^i
-idieresis :i
-igrave `i
-ij ij
-infinity if
-integral is
-intersection ca
-less <
-lessequal <=
-logicaland AN
-logicalnot no
-logicalor OR
-lozenge lz
-lslash /l
-macron a-
-minus \-
-minusplus -+
-minute fm
-nine 9
-notelement nm
-notequal !=
-notequivalence ne
-notpropersuperset nc
-notsubset nb
-ntilde ~n
-numbersign #
-numbersign sh
-oacute 'o
-ocircumflex ^o
-odieresis :o
-oe oe
-ogonek ho
-ograve `o
-one 1
-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 +
-plusmath pl
-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
-similar ap
-similarequal ~=
-six 6
-slash /
-slash sl
-square sq
-sterling Po
-therefore 3d
-therefore tf
-thorn Tp
-three 3
-threequarters 34
-threesuperior S3
-tilde a~
-tilde ~
-trademark tm
-two 2
-twosuperior S2
-uacute 'u
-ucircumflex ^u
-udieresis :u
-ugrave `u
-underscore _
-union cu
-universal fa
-weierstrass wp
-yacute 'y
-ydieresis :y
-yen Ye
-zcaron vz
-zero 0
-exclamdown char161
-cent char162
-sterling char163
-currency char164
-yen char165
-brokenbar char166
-section char167
-dieresis char168
-copyright char169
-ordfeminine char170
-guillemotleft char171
-logicalnot char172
-hyphen char173
-registered char174
-macron char175
-degree char176
-plusminus char177
-twosuperior char178
-threesuperior char179
-acute char180
-mu char181
-paragraph char182
-periodcentered char183
-cedilla char184
-onesuperior char185
-ordmasculine char186
-guillemotright char187
-onequarter char188
-onehalf char189
-threequarters char190
-questiondown char191
-Agrave char192
-Aacute char193
-Acircumflex char194
-Atilde char195
-Adieresis char196
-Aring char197
-AE char198
-Ccedilla char199
-Egrave char200
-Eacute char201
-Ecircumflex char202
-Edieresis char203
-Igrave char204
-Iacute char205
-Icircumflex char206
-Idieresis char207
-Eth char208
-Ntilde char209
-Ograve char210
-Oacute char211
-Ocircumflex char212
-Otilde char213
-Odieresis char214
-multiply char215
-Oslash char216
-Ugrave char217
-Uacute char218
-Ucircumflex char219
-Udieresis char220
-Yacute char221
-Thorn char222
-germandbls char223
-agrave char224
-aacute char225
-acircumflex char226
-atilde char227
-adieresis char228
-aring char229
-ae char230
-ccedilla char231
-egrave char232
-eacute char233
-ecircumflex char234
-edieresis char235
-igrave char236
-iacute char237
-icircumflex char238
-idieresis char239
-eth char240
-ntilde char241
-ograve char242
-oacute char243
-ocircumflex char244
-otilde char245
-odieresis char246
-divide char247
-oslash char248
-ugrave char249
-uacute char250
-ucircumflex char251
-udieresis char252
-yacute char253
-thorn char254
-ydieresis char255
-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
-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
diff --git a/contrib/groff/devps/prologue.ps b/contrib/groff/devps/prologue.ps
deleted file mode 100644
index b7bad1c..0000000
--- a/contrib/groff/devps/prologue.ps
+++ /dev/null
@@ -1,228 +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
-} bind 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
-
-% amount FL -
-
-/FL {
- currentgray exch setgray fill setgray
-} bind def
-
-% fill with the ``current color''
-
-/BL /fill load def
-
-/LW /setlinewidth 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
-} bind def
-
-/PEND {
- clear
- countdictstack CNT sub { end } repeat
- level1 restore
-} bind def
-
-end def
-
-/setpacking where {
- pop
- setpacking
-} if
diff --git a/contrib/groff/devps/psstrip.sed b/contrib/groff/devps/psstrip.sed
deleted file mode 100644
index 3e61775..0000000
--- a/contrib/groff/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/devps/symbol.afm b/contrib/groff/devps/symbol.afm
deleted file mode 100644
index 33cba6a..0000000
--- a/contrib/groff/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/devps/symbolmap b/contrib/groff/devps/symbolmap
deleted file mode 100644
index 03d6e70..0000000
--- a/contrib/groff/devps/symbolmap
+++ /dev/null
@@ -1,513 +0,0 @@
-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
-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
-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
-asciicircum ha
-asciitilde ti
-asterisk *
-asteriskmath **
-at @
-at at
-atilde ~a
-backslash \
-backslash rs
-bar ba
-bar |
-bell bs
-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 =
-equalmath eq
-equivalence ==
-eth Sd
-exclam !
-exclamdown r!
-existential te
-ff ff
-ffi Fi
-ffl Fl
-fi fi
-five 5
-fl fl
-florin Fn
-four 4
-germandbls ss
-gradient gr
-grave ga
-greater >
-greaterequal >=
-guillemotleft Fo
-guillemotright Fc
-guilsinglleft fo
-guilsinglright fc
-handleft lh
-handright rh
-hbar -h
-hungarumlaut a"
-hyphen -
-hyphen hy
-iacute 'i
-icircumflex ^i
-idieresis :i
-igrave `i
-ij ij
-infinity if
-integral is
-intersection ca
-less <
-lessequal <=
-logicaland AN
-logicalnot no
-logicalor OR
-lozenge lz
-lslash /l
-macron a-
-minus \-
-minusplus -+
-minute fm
-nine 9
-notelement nm
-notequal !=
-notequivalence ne
-notpropersuperset nc
-notsubset nb
-ntilde ~n
-numbersign #
-numbersign sh
-oacute 'o
-ocircumflex ^o
-odieresis :o
-oe oe
-ogonek ho
-ograve `o
-one 1
-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 +
-plusmath pl
-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
-similar ap
-similarequal ~=
-six 6
-slash /
-slash sl
-square sq
-sterling Po
-therefore 3d
-therefore tf
-thorn Tp
-three 3
-threequarters 34
-threesuperior S3
-tilde a~
-tilde ~
-trademark tm
-two 2
-twosuperior S2
-uacute 'u
-ucircumflex ^u
-udieresis :u
-ugrave `u
-underscore _
-union cu
-universal fa
-weierstrass wp
-yacute 'y
-ydieresis :y
-yen Ye
-zcaron vz
-zero 0
-exclamdown char161
-cent char162
-sterling char163
-currency char164
-yen char165
-brokenbar char166
-section char167
-dieresis char168
-copyright char169
-ordfeminine char170
-guillemotleft char171
-logicalnot char172
-hyphen char173
-registered char174
-macron char175
-degree char176
-plusminus char177
-twosuperior char178
-threesuperior char179
-acute char180
-mu char181
-paragraph char182
-periodcentered char183
-cedilla char184
-onesuperior char185
-ordmasculine char186
-guillemotright char187
-onequarter char188
-onehalf char189
-threequarters char190
-questiondown char191
-Agrave char192
-Aacute char193
-Acircumflex char194
-Atilde char195
-Adieresis char196
-Aring char197
-AE char198
-Ccedilla char199
-Egrave char200
-Eacute char201
-Ecircumflex char202
-Edieresis char203
-Igrave char204
-Iacute char205
-Icircumflex char206
-Idieresis char207
-Eth char208
-Ntilde char209
-Ograve char210
-Oacute char211
-Ocircumflex char212
-Otilde char213
-Odieresis char214
-multiply char215
-Oslash char216
-Ugrave char217
-Uacute char218
-Ucircumflex char219
-Udieresis char220
-Yacute char221
-Thorn char222
-germandbls char223
-agrave char224
-aacute char225
-acircumflex char226
-atilde char227
-adieresis char228
-aring char229
-ae char230
-ccedilla char231
-egrave char232
-eacute char233
-ecircumflex char234
-edieresis char235
-igrave char236
-iacute char237
-icircumflex char238
-idieresis char239
-eth char240
-ntilde char241
-ograve char242
-oacute char243
-ocircumflex char244
-otilde char245
-odieresis char246
-divide char247
-oslash char248
-ugrave char249
-uacute char250
-ucircumflex char251
-udieresis char252
-yacute char253
-thorn char254
-ydieresis char255
-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
-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
-plus pl
-minus mi
-plusminus +-
-equal eq
-divide di
-multiply mu
-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
-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/devps/symbolsl.ps b/contrib/groff/devps/symbolsl.ps
deleted file mode 100644
index d384203..0000000
--- a/contrib/groff/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/devps/text.enc b/contrib/groff/devps/text.enc
deleted file mode 100644
index dde5bb7..0000000
--- a/contrib/groff/devps/text.enc
+++ /dev/null
@@ -1,231 +0,0 @@
-asciicircum 0
-asciitilde 1
-Scaron 2
-Zcaron 3
-scaron 4
-zcaron 5
-Ydieresis 6
-trademark 7
-quotesingle 8
-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
-registered 174
-minus 173
-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/devps/zapfdr.afm b/contrib/groff/devps/zapfdr.afm
deleted file mode 100644
index ce216de..0000000
--- a/contrib/groff/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/devps/zapfdr.ps b/contrib/groff/devps/zapfdr.ps
deleted file mode 100644
index 8283be2..0000000
--- a/contrib/groff/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/devutf8/DESC.proto b/contrib/groff/devutf8/DESC.proto
deleted file mode 100644
index 88399ab..0000000
--- a/contrib/groff/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/devutf8/Makefile.sub b/contrib/groff/devutf8/Makefile.sub
deleted file mode 100644
index f6ce659..0000000
--- a/contrib/groff/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/devutf8/NOTES b/contrib/groff/devutf8/NOTES
deleted file mode 100644
index 6742155..0000000
--- a/contrib/groff/devutf8/NOTES
+++ /dev/null
@@ -1,92 +0,0 @@
-The following 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's unusable for serious typographic use.
-
-The following, mentioned in the original troff manual, are only approximate:
-
- \(lk middle part of big left curly brace
- \(rk middle part of big right curly brace
-
-\(wp has been mapped to 0x2118, because according to unicode.org's
-NamesList-3.0.0.txt, U+2118 "SCRIPT CAPITAL P" is really a Weierstrass p,
-neither SCRIPT not CAPITAL.
-
-The following lines could be added, to define names which are known to
-"devps" but are not documented and not known to "devdvi".
-space 24 0 0x0020
-vS 24 0 0x0160
-vs 24 0 0x0161
-:Y 24 0 0x0178
-vZ 24 0 0x017D
-vz 24 0 0x017E
-3d 24 0 0x2234
-nb 24 0 0x2284
-product 24 0 0x220F
-sum 24 0 0x2211
-SP 24 0 0x2660
-CL 24 0 0x2663
-HE 24 0 0x2665
-DI 24 0 0x2666
-
-The following lines could be added, to define names which are known to e.g.
-"devdvi" but are not known to "devps".
-<< 24 0 0x226A
->> 24 0 0x226B
-
-"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 *m to mu, which is equivalent to either 0x00B5 or 0x03BC. We
-map it to 0x03BC.
-
-"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.
-
-"devps" maps CR to carriagereturn, which is equivalent to 0x21B5. We map it
-to 0x240D instead.
-
-The line
-
-shc 24 0 0x00AD
-
-has been removed, because tmac.tty contains the line
-
-.if c\[shc] .shc \[shc]
-
-(i.e. if `shc' is defined, then tell the troff engine that it shall use
-`shc' as soft hyphen - otherwise it will use `hy' = HYPHEN), and `shc' in
-Markus Kuhn's UCS-fonts looks more like a minus sign than like a hyphen.
-Once Markus Kuhn's fonts are fixed, this line should be added again, because
-ISO-8859-x describes the soft hyphen character as "a graphic character that
-is imaged by a graphic symbol identical with, or similar to, that representing
-HYPHEN, for use when a line break has been established within a word" - which
-is exactly groff's use of `shc'.
-
-Using unnamed 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
-
- --- 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/font/devutf8/.
-
-- In your source file, use the notation \N'8364' where 8364 is the decimal
- representation of 0x20AC.
diff --git a/contrib/groff/devutf8/R.proto b/contrib/groff/devutf8/R.proto
deleted file mode 100644
index 2b40b97..0000000
--- a/contrib/groff/devutf8/R.proto
+++ /dev/null
@@ -1,471 +0,0 @@
-name R
-internalname 0
-spacewidth 24
-charset
-! 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 "
-r! 24 0 0x00A1
-char161 "
-ct 24 0 0x00A2
-char162 "
-Po 24 0 0x00A3
-char163 "
-Cs 24 0 0x00A4
-char164 "
-Ye 24 0 0x00A5
-char165 "
-bb 24 0 0x00A6
-char166 "
-sc 24 0 0x00A7
-char167 "
-ad 24 0 0x00A8
-char168 "
-co 24 0 0x00A9
-char169 "
-Of 24 0 0x00AA
-char170 "
-Fo 24 0 0x00AB
-char171 "
-no 24 0 0x00AC
-char172 "
-rg 24 0 0x00AE
-char174 "
-a- 24 0 0x00AF
-char175 "
-de 24 0 0x00B0
-char176 "
-+- 24 0 0x00B1
-char177 "
-S2 24 0 0x00B2
-char178 "
-S3 24 0 0x00B3
-char179 "
-aa 24 0 0x00B4
-char180 "
-char181 24 0 0x00B5
-ps 24 0 0x00B6
-char182 "
-pc 24 0 0x00B7
-char183 "
-ac 24 0 0x00B8
-char184 "
-S1 24 0 0x00B9
-char185 "
-Om 24 0 0x00BA
-char186 "
-Fc 24 0 0x00BB
-char187 "
-14 24 0 0x00BC
-char188 "
-12 24 0 0x00BD
-char189 "
-34 24 0 0x00BE
-char190 "
-r? 24 0 0x00BF
-char191 "
-`A 24 0 0x00C0
-char192 "
-'A 24 0 0x00C1
-char193 "
-^A 24 0 0x00C2
-char194 "
-~A 24 0 0x00C3
-char195 "
-:A 24 0 0x00C4
-char196 "
-oA 24 0 0x00C5
-char197 "
-AE 24 0 0x00C6
-char198 "
-,C 24 0 0x00C7
-char199 "
-`E 24 0 0x00C8
-char200 "
-'E 24 0 0x00C9
-char201 "
-^E 24 0 0x00CA
-char202 "
-:E 24 0 0x00CB
-char203 "
-`I 24 0 0x00CC
-char204 "
-'I 24 0 0x00CD
-char205 "
-^I 24 0 0x00CE
-char206 "
-:I 24 0 0x00CF
-char207 "
--D 24 0 0x00D0
-char208 "
-~N 24 0 0x00D1
-char209 "
-`O 24 0 0x00D2
-char210 "
-'O 24 0 0x00D3
-char211 "
-^O 24 0 0x00D4
-char212 "
-~O 24 0 0x00D5
-char213 "
-:O 24 0 0x00D6
-char214 "
-mu 24 0 0x00D7
-char215 "
-/O 24 0 0x00D8
-char216 "
-`U 24 0 0x00D9
-char217 "
-'U 24 0 0x00DA
-char218 "
-^U 24 0 0x00DB
-char219 "
-:U 24 0 0x00DC
-char220 "
-'Y 24 0 0x00DD
-char221 "
-TP 24 0 0x00DE
-char222 "
-ss 24 0 0x00DF
-char223 "
-`a 24 0 0x00E0
-char224 "
-'a 24 0 0x00E1
-char225 "
-^a 24 0 0x00E2
-char226 "
-~a 24 0 0x00E3
-char227 "
-:a 24 0 0x00E4
-char228 "
-oa 24 0 0x00E5
-char229 "
-ae 24 0 0x00E6
-char230 "
-,c 24 0 0x00E7
-char231 "
-`e 24 0 0x00E8
-char232 "
-'e 24 0 0x00E9
-char233 "
-^e 24 0 0x00EA
-char234 "
-:e 24 0 0x00EB
-char235 "
-`i 24 0 0x00EC
-char236 "
-'i 24 0 0x00ED
-char237 "
-^i 24 0 0x00EE
-char238 "
-:i 24 0 0x00EF
-char239 "
-Sd 24 0 0x00F0
-char240 "
-~n 24 0 0x00F1
-char241 "
-`o 24 0 0x00F2
-char242 "
-'o 24 0 0x00F3
-char243 "
-^o 24 0 0x00F4
-char244 "
-~o 24 0 0x00F5
-char245 "
-:o 24 0 0x00F6
-char246 "
-di 24 0 0x00F7
-char247 "
-/o 24 0 0x00F8
-char248 "
-`u 24 0 0x00F9
-char249 "
-'u 24 0 0x00FA
-char250 "
-^u 24 0 0x00FB
-char251 "
-:u 24 0 0x00FC
-char252 "
-'y 24 0 0x00FD
-char253 "
-Tp 24 0 0x00FE
-char254 "
-:y 24 0 0x00FF
-char255 "
-.i 24 0 0x0131
-/L 24 0 0x0141
-/l 24 0 0x0142
-OE 24 0 0x0152
-oe 24 0 0x0153
-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
-- 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
-Im 24 0 0x2111
-wp 24 0 0x2118
-Re 24 0 0x211C
-tm 24 0 0x2122
-Ah 24 0 0x2135
-<- 24 0 0x2190
-ua 24 0 0x2191
--> 24 0 0x2192
-da 24 0 0x2193
-<> 24 0 0x2194
-lA 24 0 0x21D0
-uA 24 0 0x21D1
-rA 24 0 0x21D2
-dA 24 0 0x21D3
-hA 24 0 0x21D4
-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
-\- 24 0 0x2212
-mi "
-** 24 0 0x2217
-sr 24 0 0x221A
-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
-tf 24 0 0x2234
-ti 24 0 0x223C
-ap "
-=~ 24 0 0x2245
-~~ 24 0 0x2248
-~= "
-!= 24 0 0x2260
-== 24 0 0x2261
-<= 24 0 0x2264
->= 24 0 0x2265
-sb 24 0 0x2282
-sp 24 0 0x2283
-ib 24 0 0x2286
-ip 24 0 0x2287
-c+ 24 0 0x2295
-c* 24 0 0x2297
-pp 24 0 0x22A5
-pc 24 0 0x22C5
-lc 24 0 0x2308
-rc 24 0 0x2309
-lf 24 0 0x230A
-rf 24 0 0x230B
-la 24 0 0x2329
-ra 24 0 0x232A
-CR 24 0 0x240D
-an 24 0 0x2500
-br 24 0 0x2502
-bv "
-rk 24 0 0x251D
-lk 24 0 0x2525
-lt 24 0 0x256D
-rt 24 0 0x256E
-rb 24 0 0x256F
-lb 24 0 0x2570
-sq 24 0 0x25A1
-lz 24 0 0x25CA
-ci 24 0 0x25EF
-lh 24 0 0x261C
-rh 24 0 0x261E
-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/eqn/Makefile.sub b/contrib/groff/eqn/Makefile.sub
deleted file mode 100644
index 7b43a6e..0000000
--- a/contrib/groff/eqn/Makefile.sub
+++ /dev/null
@@ -1,57 +0,0 @@
-PROG=eqn
-MAN1=eqn.n
-XLIBS=$(LIBGROFF)
-OBJS=\
- eqn.o \
- main.o \
- lex.o \
- box.o \
- limit.o \
- list.o \
- over.o \
- text.o \
- script.o \
- mark.o \
- other.o \
- delim.o \
- sqrt.o \
- pile.o \
- special.o
-CCSRCS=\
- $(srcdir)/main.cc \
- $(srcdir)/lex.cc \
- $(srcdir)/box.cc \
- $(srcdir)/limit.cc \
- $(srcdir)/list.cc \
- $(srcdir)/over.cc \
- $(srcdir)/text.cc \
- $(srcdir)/script.cc \
- $(srcdir)/mark.cc \
- $(srcdir)/other.cc \
- $(srcdir)/delim.cc \
- $(srcdir)/sqrt.cc \
- $(srcdir)/pile.cc \
- $(srcdir)/special.cc
-HDRS=\
- $(srcdir)/box.h \
- $(srcdir)/eqn.h \
- $(srcdir)/pbox.h
-GRAM=$(srcdir)/eqn.y
-YTABC=$(srcdir)/eqn.cc
-YTABH=$(srcdir)/eqn_tab.h
-NAMEPREFIX=$(g)
-CLEANADD=neqn
-
-all: neqn
-
-neqn: neqn.sh
- -rm -f neqn
- sed -e 's/@g@/$(g)/g' -e "$(SH_SCRIPT_SED_CMD)" $(srcdir)/neqn.sh >neqn
- chmod +x neqn
-
-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/eqn/TODO b/contrib/groff/eqn/TODO
deleted file mode 100644
index 210d0ab..0000000
--- a/contrib/groff/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/eqn/box.cc b/contrib/groff/eqn/box.cc
deleted file mode 100644
index 4e61b5d..0000000
--- a/contrib/groff/eqn/box.cc
+++ /dev/null
@@ -1,611 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 {
- 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[.s]*7+5/10>?%d)*1z\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[.s]z\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 " .as " 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[.s]z'"
- "\\s0"
- "\\R'" SAVED_INLINE_PREV_SIZE_REG " \\\\n[.s]z'"
- "\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(".as " 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 " .as " 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 "] "
- ".as " LINE_STRING " \\x'-%dM'\n", positive_space);
- if (negative_space > 0)
- printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".as " 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 .as " 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 .as " 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/eqn/box.h b/contrib/groff/eqn/box.h
deleted file mode 100644
index 01bfe96..0000000
--- a/contrib/groff/eqn/box.h
+++ /dev/null
@@ -1,277 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-struct 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;
-};
-
-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_script_box(box *, box *, box *);
-box *make_mark_box(box *);
-box *make_lineup_box(box *);
-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/eqn/delim.cc b/contrib/groff/eqn/delim.cc
deleted file mode 100644
index 29deded..0000000
--- a/contrib/groff/eqn/delim.cc
+++ /dev/null
@@ -1,381 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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]",
- },
- {
- "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]",
- },
- {
- "ceiling", RIGHT_DELIM, "\\(rc", "\\[ceilingright%s]",
- "\\[bracketrightex]",
- "\\[bracketrighttp]",
- },
- {
- "||", LEFT_DELIM|RIGHT_DELIM, "|", "\\[bar%s]",
- "\\[bardblex]",
- },
- {
- "<", LEFT_DELIM|RIGHT_DELIM, "\\(la", "\\[angleleft%s]",
- },
- {
- ">", LEFT_DELIM|RIGHT_DELIM, "\\(ra", "\\[angleright%s]",
- },
- {
- "uparrow", LEFT_DELIM|RIGHT_DELIM, "\\(ua", "\\[arrowup%s]",
- "\\[arrowvertex]",
- "\\[arrowverttp]",
- },
- {
- "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/eqn/eqn.h b/contrib/groff/eqn/eqn.h
deleted file mode 100644
index 70b1927..0000000
--- a/contrib/groff/eqn/eqn.h
+++ /dev/null
@@ -1,51 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "cset.h"
-#include "errarg.h"
-#include "error.h"
-#include "lib.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/eqn/eqn.man b/contrib/groff/eqn/eqn.man
deleted file mode 100644
index e194ecf..0000000
--- a/contrib/groff/eqn/eqn.man
+++ /dev/null
@@ -1,877 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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"
-..
-.\" 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 cc
-.OP \-T name
-.OP \-M dir
-.OP \-f F
-.OP \-s n
-.OP \-p n
-.OP \-m n
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.PP
-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 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
-using the path
-.BR @MACROPATH@ .
-If it exists, eqn will process it before the other input files.
-The
-.B \-R
-option prevents this.
-.LP
-GNU 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
-.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
-.IR n .
-eqn will not reduce the size of subscripts or superscripts to
-a smaller size than
-.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
-.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.
-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
-points smaller than the surrounding text.
-This option is deprecated.
-Normally eqn makes sets subscripts and superscripts at 70%
-of the size of the surrounding text.
-.SH USAGE
-Only the differences between GNU eqn and Unix eqn are described here.
-.LP
-Most of the new features of GNU eqn
-are based on \*(tx.
-There are some references to the differences between \*(tx and GNU eqn below;
-these may safely be ignored if you do not know \*(tx.
-.SS Automatic spacing
-.LP
-.B eqn
-gives each component of an equation a type, and adjusts the spacing
-between components using that type.
-Possible types are:
-.TP \w'punctuation'u+2n
-ordinary
-an ordinary character such as 1 or
-.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 +;
-.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.
-.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
-.I e
-but that has type
-.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
-.IR t .
-For example,
-.RS
-.IP
-.B
-chartype "punctuation" .,;:
-.RE
-.IP
-would make the characters
-.B .,;:
-have type punctuation
-whenever they subsequently appeared in an equation.
-The type
-.I t
-can also be
-.B letter
-or
-.BR digit ;
-in these cases
-.B chartype
-changes the font type of the characters.
-See the 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 + and - 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 ,
-.B 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
-.IR e .
-It produces a different result from
-.B prime
-in a case such as
-.BR A\ opprime\ sub\ 1 :
-with
-.B opprime
-the
-.B 1
-will be tucked under the prime as a subscript to the
-.B A
-(as is conventional in mathematical typesetting),
-whereas with
-.B prime
-the
-.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
-.B '
-that is not the first character will be treated like
-.BR opprime .
-.TP
-.BI special\ text\ e
-This constructs a new object from
-.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
-.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
-.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.
-.RS
-.LP
-For example, suppose you wanted a construct that `cancels' an expression
-by drawing a diagonal line through it.
-.IP
-.nf
-.ft B
-.ne 6+\n(.Vu
-\&.EQ
-define cancel 'special Ca'
-\&.EN
-\&.de Ca
-\&.ds 0s \eZ'\e\e*(0s'\ev'\e\en(0du'\eD'l \e\en(0wu -\e\en(0hu-\e\en(0du'\ev'\e\en(0hu'
-\&..
-.ft
-.fi
-.LP
-Then you could cancel an expression
-.I e
-with
-.BI cancel\ {\ e\ }
-.LP
-Here's a more complicated construct that draws a box round an expression:
-.IP
-.nf
-.ft B
-.ne 11+\n(.Vu
-\&.EQ
-define box 'special Bx'
-\&.EN
-\&.de Bx
-\&.ds 0s \eZ'\eh'1n'\e\e*(0s'\e
-\eZ'\ev'\e\en(0du+1n'\eD'l \e\en(0wu+2n 0'\eD'l 0 -\e\en(0hu-\e\en(0du-2n'\e
-\eD'l -\e\en(0wu-2n 0'\eD'l 0 \e\en(0hu+\e\en(0du+2n''\eh'\e\en(0wu+2n'
-\&.nr 0w +2n
-\&.nr 0d +1n
-\&.nr 0h +1n
-\&..
-.ft
-.fi
-.RE
-.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
-.I p
-to value
-.I n ;
-.I n
-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.
-.TP \w'\fBdefault_rule_thickness'u+2n
-.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
-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
-Include the contents of
-.IR file .
-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 .
-.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
-.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
-.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 groff_font (@MAN5EXT@),
-.I The\ \*(txbook
diff --git a/contrib/groff/eqn/eqn.y b/contrib/groff/eqn/eqn.y
deleted file mode 100644
index 833a0f0..0000000
--- a/contrib/groff/eqn/eqn.y
+++ /dev/null
@@ -1,331 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-%{
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "lib.h"
-#include "box.h"
-extern int non_empty_flag;
-char *strsave(const char *);
-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/eqn/lex.cc b/contrib/groff/eqn/lex.cc
deleted file mode 100644
index 0a5a4e2..0000000
--- a/contrib/groff/eqn/lex.cc
+++ /dev/null
@@ -1,1165 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "eqn.h"
-#include "eqn_tab.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-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)
-{
- int i;
- for (i = 0; i < sizeof(token_table)/sizeof(token_table[0]); i++) {
- definition *def = new definition;
- 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;
- 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;
- 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 (illegal_input_char(c))
- lex_error("illegal 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 illegal 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;
- 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/eqn/limit.cc b/contrib/groff/eqn/limit.cc
deleted file mode 100644
index 046885d..0000000
--- a/contrib/groff/eqn/limit.cc
+++ /dev/null
@@ -1,195 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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[.s]\n", uid);
- if (!(style <= SCRIPT_STYLE && one_size_reduction_flag))
- set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\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 "]\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 "]]", 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 "]]", 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/eqn/list.cc b/contrib/groff/eqn/list.cc
deleted file mode 100644
index 1118fa1..0000000
--- a/contrib/groff/eqn/list.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/eqn/main.cc b/contrib/groff/eqn/main.cc
deleted file mode 100644
index c0f4020..0000000
--- a/contrib/groff/eqn/main.cc
+++ /dev/null
@@ -1,358 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "eqn.h"
-#include "stringclass.h"
-#include "device.h"
-#include "searchpath.h"
-#include "macropath.h"
-#include "htmlindicate.h"
-
-#define STARTUP_FILE "eqnrc"
-
-extern int yyparse();
-
-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 read_line(FILE *fp, string *p)
-{
- p->clear();
- int c = -1;
- while ((c = getc(fp)) != EOF) {
- if (!illegal_input_char(c))
- *p += char(c);
- else
- error("illegal 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);
- graphic_start();
- 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();
- if (non_empty_flag) {
- printf(".lf %d\n", current_lineno - 1);
- output_string();
- }
- restore_compatibility();
- printf(".lf %d\n", current_lineno);
- graphic_end();
- 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,
-0 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("end of file before `%1'", end_delim);
- linebuf += '\0';
- ptr = &linebuf[0];
- }
- str += '\0';
- graphic_start();
- init_lex(str.contents(), current_filename, start_lineno);
- yyparse();
- start = delim_search(ptr, start_delim);
- if (start == 0) {
- char *nl = strchr(ptr, '\n');
- if (nl != 0)
- *nl = '\0';
- do_text(ptr);
- break;
- }
- }
- printf(".lf %d\n", current_lineno);
- output_string();
- restore_compatibility();
- graphic_end();
- 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()
-{
- fprintf(stderr,
- "usage: %s [ -rvDCNR ] -dxx -fn -sn -pn -mn -Mdir -Ts [ files ... ]\n",
- program_name);
- exit(1);
-}
-
-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;
- while ((opt = getopt(argc, argv, "DCRvd:f:p:s:m:T:M:rN")) != EOF)
- switch (opt) {
- case 'C':
- compatible_flag = 1;
- break;
- case 'R': // don't load eqnchar
- load_startup_file = 0;
- break;
- case 'M':
- macro_path.command_line_dir(optarg);
- break;
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU eqn version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'd':
- if (optarg[0] == '\0' || optarg[1] == '\0')
- error("-d requires two character argument");
- else if (illegal_input_char(optarg[0]))
- error("bad delimiter `%1'", optarg[0]);
- else if (illegal_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;
- 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 '?':
- usage();
- break;
- default:
- assert(0);
- }
- init_table(device);
- init_char_table();
- printf(".if !'\\*(.T'%s' "
- ".tm warning: %s should have been given a `-T\\*(.T' option\n",
- device, program_name);
- if (load_startup_file) {
- char *path;
- FILE *fp = 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/eqn/mark.cc b/contrib/groff/eqn/mark.cc
deleted file mode 100644
index 99d1b75..0000000
--- a/contrib/groff/eqn/mark.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/eqn/other.cc b/contrib/groff/eqn/other.cc
deleted file mode 100644
index eb9e50a..0000000
--- a/contrib/groff/eqn/other.cc
+++ /dev/null
@@ -1,601 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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[.s]\n", uid);
- printf(".ps %s\n", size);
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
- int r = p->compute_metrics(style);
- printf(".ps \\n[" SIZE_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 size_box::output()
-{
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
- p->output();
- printf("\\s[\\n[" SIZE_FORMAT "]]", 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/eqn/over.cc b/contrib/groff/eqn/over.cc
deleted file mode 100644
index 06b0321..0000000
--- a/contrib/groff/eqn/over.cc
+++ /dev/null
@@ -1,196 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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[.s]\n", uid);
- set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
- }
- int mark_uid;
- 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 "]\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 "]]", 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 "]]", 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/eqn/pbox.h b/contrib/groff/eqn/pbox.h
deleted file mode 100644
index d1f16ac..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/eqn/pile.cc b/contrib/groff/eqn/pile.cc
deleted file mode 100644
index 0df5241..0000000
--- a/contrib/groff/eqn/pile.cc
+++ /dev/null
@@ -1,293 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 maxlen = 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 > maxlen)
- maxlen = 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, maxlen-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, maxlen-1, uid);
- for (i = 0; i < len; i++)
- if (p[i]->len == maxlen)
- printf(">?\\n[" DEPTH_FORMAT "]", p[i]->p[maxlen-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/eqn/script.cc b/contrib/groff/eqn/script.cc
deleted file mode 100644
index 7c2e6c2..0000000
--- a/contrib/groff/eqn/script.cc
+++ /dev/null
@@ -1,221 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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[.s]\n", uid);
- if (!(style <= SCRIPT_STYLE && one_size_reduction_flag))
- set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\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 "]\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 p;
- if (style == DISPLAY_STYLE)
- p = sup1;
- else if (style & 1) // not cramped
- p = sup2;
- else
- p = sup3;
- printf(".nr " SUP_RAISE_FORMAT " \\n[" SUP_RAISE_FORMAT
- "]>?%dM>?(\\n[" DEPTH_FORMAT "]+(%dM/4))\n",
- uid, uid, p, 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 "]]", uid);
- sup->output();
- printf("\\s[\\n[" SIZE_FORMAT "]]", 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 "]]", uid);
- printf("\\h'-\\n[" SUB_KERN_FORMAT "]u'", p->uid);
- sub->output();
- printf("\\s[\\n[" SIZE_FORMAT "]]", 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/eqn/special.cc b/contrib/groff/eqn/special.cc
deleted file mode 100644
index 310261a..0000000
--- a/contrib/groff/eqn/special.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/eqn/sqrt.cc b/contrib/groff/eqn/sqrt.cc
deleted file mode 100644
index 6109ffe..0000000
--- a/contrib/groff/eqn/sqrt.cc
+++ /dev/null
@@ -1,179 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 "\\(sr"
-#define RADICAL_EXTENSION_CHAR "\\[radicalex]"
-
-#define SQRT_CHAIN "\\[sr\\\\n[" INDEX_REG "]]"
-#define BAR_CHAIN "\\[radicalex\\\\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[.s]\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[.s]\n");
- printf(".ps \\n[" SIZE_FORMAT "]\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[.s]<\\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[.s]\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 "]\n", uid);
- return r;
-}
-
-void sqrt_box::output()
-{
- printf("\\Z" DELIMITER_CHAR);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
- printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\*[" SQRT_STRING_FORMAT "]", uid);
- printf("\\s[\\n[" SIZE_FORMAT "]]", 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/eqn/text.cc b/contrib/groff/eqn/text.cc
deleted file mode 100644
index b0f1700..0000000
--- a/contrib/groff/eqn/text.cc
+++ /dev/null
@@ -1,528 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
- 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;
- }
- }
- 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/grn/Makefile.sub b/contrib/groff/grn/Makefile.sub
deleted file mode 100644
index ffa0ad2..0000000
--- a/contrib/groff/grn/Makefile.sub
+++ /dev/null
@@ -1,17 +0,0 @@
-PROG=grn
-MAN1=grn.n
-MLIB=$(LIBM)
-XLIBS=$(LIBGROFF)
-OBJS=\
- hdb.o \
- hpoint.o \
- hgraph.o \
- main.o
-CCSRCS=\
- $(srcdir)/hdb.cc \
- $(srcdir)/hpoint.cc \
- $(srcdir)/hgraph.cc \
- $(srcdir)/main.cc
-HDRS=\
- $(srcdir)/gprint.h
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/grn/README b/contrib/groff/grn/README
deleted file mode 100644
index b5b9fc9..0000000
--- a/contrib/groff/grn/README
+++ /dev/null
@@ -1,60 +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)
-
-=====================================================================
-
-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 *.cc; updates as needed for C++ (prototypes, proper
- casts, standard header files etc). Heavy formatting.
-
- . main.cc:
-
- 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/grn/gprint.h b/contrib/groff/grn/gprint.h
deleted file mode 100644
index b25305b..0000000
--- a/contrib/groff/grn/gprint.h
+++ /dev/null
@@ -1,84 +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 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 {
- float 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/grn/grn.man b/contrib/groff/grn/grn.man
deleted file mode 100644
index 96a062c..0000000
--- a/contrib/groff/grn/grn.man
+++ /dev/null
@@ -1,634 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2000 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"
-..
-.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
-Set the library to directory
-.IR dir .
-If a
-.I gremlin
-file cannot be found in the current directory,
-.I dir
-is prepended to the filename for a second try.
-The default library directory is
-.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 normal
-.BR @FONTDIR@ .
-.TP
-.B \-C
-Recognize
-.B .GS
-and
-.B .GE
-(resp.
-.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 (resp. 16, 24, and 36).
-.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 (resp. I, B, and S).
-.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
-illegal 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 (resp. medium and thick) lines to
-.I N
-times 0.15pt (this value can be changed at compile time).
-The default is 1.0 (resp. 3.0 and 5.0), which corresponds to 0.15pt
-(resp. 0.45pt and 0.75pt).
-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 ,\ 2 ,\ 3 ,\ 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
-.DS
-.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
-.DE
-.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''.
-.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
-.DS
-.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
-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
-.DE
-.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
-.DS
-.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
-.DE
-.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
-.DS
-.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
-.DE
-.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
-``\\fI''
-or
-``\\d''
-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 .
diff --git a/contrib/groff/grn/hdb.cc b/contrib/groff/grn/hdb.cc
deleted file mode 100644
index bf72ea1..0000000
--- a/contrib/groff/grn/hdb.cc
+++ /dev/null
@@ -1,326 +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
-
-/* imports from main.cc */
-
-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 void savebounds(float x, float y);
-
-/* imports from hpoint.cc */
-
-extern POINT *PTInit();
-extern POINT *PTMakePoint(float x, float 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(void)
-{
- 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 float 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;
- float x, y; /* x and y are read in point coords */
- int len, brush, size;
- int lastpoint;
-
- SUNFILE = FALSE;
- elist = DBInit();
- (void) fscanf(file, "%s\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%f%f\n", &size, &x, &y);
- /* ignore orientation and file positioning point */
-
- done = FALSE;
- while (!done) {
- /* if (fscanf(file,"%s\n", string) == EOF) */
- /* I changed the scanf format because the element */
- /* can have two words (e.g. CURVE SPLINE) */
- if (fscanf(file, "\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;
- (void) fclose(file);
- } else {
-#ifdef UW_FASTSCAN
- (void) xscanf(file, &x, &y); /* always one point */
-#else
- (void) fscanf(file, "%f%f\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, "%f%f", &x, &y);
- if ((x == -1.00 && y == -1.00) && (!SUNFILE))
- lastpoint = TRUE;
- }
- } 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, "%f%f", &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 */
- txt[i] = getc(file);
- }
- 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')
- 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,
- float *xp,
- float *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/grn/hgraph.cc b/contrib/groff/grn/hgraph.cc
deleted file mode 100644
index db3bfef..0000000
--- a/contrib/groff/grn/hgraph.cc
+++ /dev/null
@@ -1,1043 +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 "gprint.h"
-
-#ifdef NEED_DECLARATION_HYPOT
-extern "C" {
- double hypot(double, double);
-}
-#endif /* NEED_DECLARATION_HYPOT */
-
-#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) 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 {
- 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);
-void drawwig(POINT * ptr);
-void HGtline(int x1, int y1);
-void dx(double x);
-void dy(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 Paramaterize(int x[], int y[], float h[], int n);
-void PeriodicSpline(float h[], int z[],
- float dz[], float d2z[], float d3z[],
- int npoints);
-void NaturalEndSpline(float h[], int z[],
- float dz[], float d2z[], float 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);
- 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.
- */
- float firstx = p1->x;
- float 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("\\h'-%du'\\D'f %du'",
- stipple_index[graylevel],
- stipple_index[graylevel]);
- cr();
- tmove(p1);
- printf("\\D'%c", command);
-
- while (!Nullpoint((PTNextPoint(p1)))) {
- p1 = PTNextPoint(p1);
- dx((double) p1->x);
- dy((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)) {
- dx((double) firstx);
- dy((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: dx (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
-dx(double x)
-{
- register int ix = (int) (x * troffscale);
-
- printf(" %du", ix - lastx);
- lastx = ix;
-}
-
-
-/*----------------------------------------------------------------------------*
- | Routine: dy (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
-dy(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(void)
-{
- 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)
- |
- | 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 proper parameters, HGCurve is
- | called.
- *----------------------------------------------------------------------------*/
-
-void
-drawwig(POINT * ptr)
-{
- 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) {
- /* HGCurve(&x[0], &y[0], npts); */ /*Gremlin looks different, so... */
- 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 + 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) 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) 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)
-{
- float h[MAXPOINTS], dx[MAXPOINTS], dy[MAXPOINTS];
- float d2x[MAXPOINTS], d2y[MAXPOINTS], d3x[MAXPOINTS], d3y[MAXPOINTS];
- float 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 = (float) k *h[j] / (float) 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[],
- float h[],
- int n)
-{
- register int dx;
- register int dy;
- register int i;
- register int j;
- float 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] += 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(float h[], /* paramaterization */
- int z[], /* point list */
- float dz[], /* to return the 1st derivative */
- float d2z[], /* 2nd derivative */
- float d3z[], /* 3rd derivative */
- int npoints) /* number of valid points */
-{
- float d[MAXPOINTS];
- float deltaz[MAXPOINTS], a[MAXPOINTS], b[MAXPOINTS];
- float 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(float h[], /* parameterization */
- int z[], /* Point list */
- float dz[], /* to return the 1st derivative */
- float d2z[], /* 2nd derivative */
- float d3z[], /* 3rd derivative */
- int npoints) /* number of valid points */
-{
- float d[MAXPOINTS];
- float 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 x1,
- int y1)
-{
- register int x0 = lastx;
- register int y0 = 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(x1, y1);
- return;
- }
-
- /* for handling different resolutions */
- dotcounter = linmod << dotshifter;
-
- xinc = 1;
- yinc = 1;
- if ((dx = x1 - x0) < 0) {
- xinc = -xinc;
- dx = -dx;
- }
- if ((dy = y1 - y0) < 0) {
- yinc = -yinc;
- dy = -dy;
- }
- res1 = 0;
- res2 = 0;
- visible = 0;
- if (dx >= dy) {
- oldcoord = y0;
- while (x0 != x1) {
- if ((x0 & dotcounter) && !visible) {
- change(x0, y0, 0);
- visible = 1;
- } else if (visible && !(x0 & dotcounter)) {
- change(x0 - xinc, oldcoord, 1);
- visible = 0;
- }
- if (res1 > res2) {
- oldcoord = y0;
- res2 += dx - res1;
- res1 = 0;
- y0 += yinc;
- }
- res1 += dy;
- x0 += xinc;
- }
- } else {
- oldcoord = x0;
- while (y0 != y1) {
- if ((y0 & dotcounter) && !visible) {
- change(x0, y0, 0);
- visible = 1;
- } else if (visible && !(y0 & dotcounter)) {
- change(oldcoord, y0 - yinc, 1);
- visible = 0;
- }
- if (res1 > res2) {
- oldcoord = x0;
- res2 += dy - res1;
- res1 = 0;
- x0 += xinc;
- }
- res1 += dx;
- y0 += yinc;
- }
- }
- if (visible)
- change(x1, y1, 1);
- else
- change(x1, y1, 0);
-}
-
-/* EOF */
diff --git a/contrib/groff/grn/hpoint.cc b/contrib/groff/grn/hpoint.cc
deleted file mode 100644
index f4e1ca8..0000000
--- a/contrib/groff/grn/hpoint.cc
+++ /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(float x,
- float y,
- POINT **pplist)
-{
- register POINT *point;
-
- if (Nullpoint(point = *pplist)) { /* empty list */
- *pplist = (POINT *) malloc(sizeof(POINT));
- point = *pplist;
- } else {
- while (!Nullpoint(point->nextpt))
- point = point->nextpt;
- point->nextpt = (POINT *) malloc(sizeof(POINT));
- point = point->nextpt;
- }
-
- point->x = x;
- point->y = y;
- point->nextpt = PTInit();
- return (point);
-} /* end PTMakePoint */
-
-/* EOF */
diff --git a/contrib/groff/grn/main.cc b/contrib/groff/grn/main.cc
deleted file mode 100644
index bcbb2df..0000000
--- a/contrib/groff/grn/main.cc
+++ /dev/null
@@ -1,901 +0,0 @@
-/* Last non-groff version: main.cc 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 <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gprint.h"
-
-#include "device.h"
-#include "font.h"
-#include "searchpath.h"
-#include "macropath.h"
-
-#include "lib.h"
-#include "errarg.h"
-#include "error.h"
-#include "defs.h"
-
-/* database imports */
-
-extern void HGPrintElt(ELT *element, int baseline);
-extern ELT *DBInit(void);
-extern ELT *DBRead(register FILE *file);
-extern POINT *PTInit();
-extern POINT *PTMakePoint(float x, float 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. */
-
-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 {
- 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(void);
-char *doinput(FILE *fp);
-void conv(register FILE *fp, int baseline);
-void savestate(void);
-int has_polygon(register ELT *elist);
-void interpret(char *line);
-
-
-void
-usage()
-{
- fprintf(stderr,
- "usage: %s [ -vCs ] [ -M dir ] [ -F dir ] [ -T dev ] [ file ]\n",
- program_name);
- exit(1);
-}
-
-
-/*----------------------------------------------------------------------------*
- | 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)
-{
- 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 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU grn version %s\n", Version_string);
- fflush(stderr);
- 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 '?':
- usage();
- break;
-
- default:
- error("unknown switch: %1", c);
- usage();
- }
- }
-
- 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) != NULL) {
- 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);
- }
- }
-}
-
-
-/*----------------------------------------------------------------------------*
- | 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(void)
-{
- 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: char * 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'.
- *----------------------------------------------------------------------------*/
-
-char *
-doinput(FILE *fp)
-{
- char *k;
-
- if ((k = fgets(inputline, MAXINLINE, fp)) == NULL)
- return k;
- if (strchr(inputline, '\n')) /* ++ only if it's a complete line */
- linenum++;
- return (char *) !NULL;
-}
-
-
-/*----------------------------------------------------------------------------*
- | 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(void)
-{
- 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] = 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) == NULL); /* 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 = 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(void)
-{
- 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(float x,
- float 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 index = atoi(str1 + 1), val;
-
- if (index < 0 || index > NSTIPPLES) {
- error("bad stipple number %1 at line %2", index, linenum);
- break;
- }
- if (!defstipple_index)
- defstipple_index = other_stipple_index;
- val = atoi(str2);
- if (val >= 0 && val < 256)
- stipple_index[index] = 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("illegal 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/grodvi/Makefile.sub b/contrib/groff/grodvi/Makefile.sub
deleted file mode 100644
index 0e5d32c..0000000
--- a/contrib/groff/grodvi/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grodvi
-MAN1=grodvi.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=dvi.o
-CCSRCS=$(srcdir)/dvi.cc
diff --git a/contrib/groff/grodvi/dvi.cc b/contrib/groff/grodvi/dvi.cc
deleted file mode 100644
index 305470e1..0000000
--- a/contrib/groff/grodvi/dvi.cc
+++ /dev/null
@@ -1,900 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "nonposix.h"
-
-#define DEFAULT_LINEWIDTH 40
-static int linewidth = DEFAULT_LINEWIDTH;
-
-static int draw_flag = 1;
-
-/* 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
-
-#define FILL_MAX 1000
-
-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;
- 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();
-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);
- 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;
- int fill;
- void set_line_thickness(const environment *);
- void fill_next();
-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), fill(FILL_MAX)
-{
-}
-
-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_char(int index, font *f, const environment *env, int w, const char *name)
-{
- int code = f->get_code(index);
- 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(index, 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;
-}
-
-void dvi_printer::end_page(int)
-{
- 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)
-{
- 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, y;
- int height = 0, width;
- 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()
-{
- char buf[256];
- sprintf(buf, "sh %.3f", double(fill)/FILL_MAX);
- 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();
- 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();
- 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();
- 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]));
- sprintf(buf, "ar 0 0 %d %d %f %f",
- rad,
- rad,
- atan2(p[1] + p[3] - c[1], p[0] + p[2] - c[0]),
- atan2(-c[1], -c[0]));
- 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 'f':
- {
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- fill = p[0];
- if (fill < 0 || fill > FILL_MAX)
- fill = FILL_MAX;
- 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();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- while ((c = getopt(argc, argv, "F:vw:d")) != EOF)
- switch(c) {
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "grodvi version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'w':
- if (sscanf(optarg, "%d", &linewidth) != 1
- || linewidth < 0 || linewidth > 1000) {
- error("bad line width");
- linewidth = DEFAULT_LINEWIDTH;
- }
- break;
- case 'd':
- draw_flag = 0;
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case '?':
- usage();
- break;
- default:
- assert(0);
- }
-#ifdef SET_BINARY
- SET_BINARY(fileno(stdout));
-#endif
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- delete pr;
- return 0;
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-dv] [-F dir] [-w n] [files ...]\n",
- program_name);
- exit(1);
-}
diff --git a/contrib/groff/grodvi/grodvi.man b/contrib/groff/grodvi/grodvi.man
deleted file mode 100644
index 72baf24..0000000
--- a/contrib/groff/grodvi/grodvi.man
+++ /dev/null
@@ -1,174 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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 GRODVI @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grodvi \- convert groff output to TeX dvi format
-.SH SYNOPSIS
-.B grodvi
-[
-.B \-dv
-] [
-.BI \-w n
-] [
-.BI \-F dir
-] [
-.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
-.BR @MACRODIR@/tmac.dvi ;
-if the input is being preprocessed with
-.B @g@eqn
-it will also input
-.BR @FONTDIR@/devdvi/eqnchar .
-.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 \eD
-commands will not produce any output.
-.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
-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 \eD
-commands.
-.LP
-The groff command
-.BI \eX' anything '
-is translated into the same command in the dvi file as would be
-produced by
-.BI \especial{ anything }
-in \*(tx;
-.I anything may not contain a newline.
-.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
-In
-.B troff
-the
-.B \eN
-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.
-.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
-.B \-v
-Print the version number.
-.TP
-.BI \-w n
-Set the default line thickness to
-.I n
-thousandths of an em.
-.TP
-.BI \-F dir
-Search directory
-.IB dir /devdvi
-for font and device description files.
-.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@/tmac.dvi
-Macros for use with
-.BR grodvi .
-.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@)
diff --git a/contrib/groff/groff/Makefile.sub b/contrib/groff/groff/Makefile.sub
deleted file mode 100644
index 42ae221..0000000
--- a/contrib/groff/groff/Makefile.sub
+++ /dev/null
@@ -1,8 +0,0 @@
-PROG=groff
-MAN1=groff.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=groff.o pipeline.o
-CCSRCS=$(srcdir)/groff.cc
-CSRCS=$(srcdir)/pipeline.c
-HDRS=$(srcdir)/pipeline.h
diff --git a/contrib/groff/groff/groff.cc b/contrib/groff/groff/groff.cc
deleted file mode 100644
index 034052a..0000000
--- a/contrib/groff/groff/groff.cc
+++ /dev/null
@@ -1,647 +0,0 @@
-// -*- C++ -*-
-/* 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-// A front end for groff.
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <errno.h>
-
-#include "lib.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 */
-
-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 clear_args();
- char **get_argv();
- void print(int is_last, FILE *fp);
-};
-
-int lflag = 0;
-char *spooler = 0;
-char *driver = 0;
-
-possible_command commands[NCOMMANDS];
-
-int run_commands();
-void print_commands();
-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();
-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 zflag = 0;
- int iflag = 0;
- int Xflag = 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");
- while ((opt = getopt(argc, argv,
- "abCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ"))
- != 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);
- 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':
- case 'C':
- commands[SOELIM_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 'S':
- safer_flag = 1;
- break;
- case 'U':
- safer_flag = 0;
- break;
- case 'T':
- 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[0];
- Fargs += optarg;
- }
- else
- Fargs = optarg;
- break;
- case 'f':
- case 'o':
- 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();
- break;
- default:
- assert(0);
- break;
- }
- }
- if (safer_flag) {
- commands[PIC_INDEX].append_arg("-S");
- commands[TROFF_INDEX].insert_arg("-msafer");
- } 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 (!driver)
- fatal("no `postpro' command in DESC file for device `%1'", device);
- const char *real_driver = 0;
- if (Xflag) {
- real_driver = driver;
- driver = GXDITVIEW;
- commands[TROFF_INDEX].append_arg("-r" XREG "=", "1");
- }
- if (driver)
- commands[POST_INDEX].set_name(driver);
- int gxditview_flag = driver && strcmp(xbasename(driver), 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 && !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);
- 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[0];
- e += fontpath;
- }
- e += '\0';
- if (putenv(strsave(e.contents())))
- fatal("putenv failed");
- }
- if (Vflag) {
- print_commands();
- exit(0);
- }
- return run_commands();
-}
-
-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, "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;
- }
- driver = strsave(arg);
- }
- }
-}
-
-void print_commands()
-{
- 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, stdout);
-}
-
-// Run the commands. Return the code with which to exit.
-
-int run_commands()
-{
- 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);
-}
-
-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::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()
-{
- fprintf(stderr,
-"usage: %s [-abeghilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n"
-" [-wname] [-Wname] [-Mdir] [-dcs] [-rcn] [-nnum] [-olist] [-Parg]\n"
-" [-Larg] [-Idir] [files...]\n",
- program_name);
-}
-
-void help()
-{
- synopsis();
- 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\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. Implies -s\n"
-"\n",
- stderr);
- exit(0);
-}
-
-void usage()
-{
- synopsis();
- fprintf(stderr, "%s -h gives more help\n", program_name);
- exit(1);
-}
-
-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/groff/pipeline.c b/contrib/groff/groff/pipeline.c
deleted file mode 100644
index 9638120..0000000
--- a/contrib/groff/groff/pipeline.c
+++ /dev/null
@@ -1,421 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/*
-Compile options are:
-
--DWCOREFLAG=0200 (or whatever)
--DHAVE_SYS_SIGLIST
--DSYS_SIGLIST_DECLARED
--DHAVE_UNISTD_H
-*/
-
-#include <stdio.h>
-#include <signal.h>
-#include <errno.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifndef errno
-extern int errno;
-#endif
-
-extern char *strerror();
-
-#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"
-
-#ifdef __STDC__
-#define P(parms) parms
-#else
-#define P(parms) ()
-#define const /* as nothing */
-#endif
-
-#define error c_error
-extern void error P((const char *, const char *, const char *, const char *));
-extern void c_fatal P((const char *, const char *, const char *, const char *));
-
-static void sys_fatal P((const char *));
-static const char *xstrsignal P((int));
-static char *i_to_a P((int));
-
-/* MSVC can support asynchronous processes, but it's unlikely to have
- fork(). So, until someone writes an emulation, let them at least
- have a workable groff by using the good-ole DOS pipe simulation
- via temporary files... */
-
-#if defined(__MSDOS__) || (defined(_WIN32) && !defined(__CYGWIN32__))
-
-#include <process.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <string.h>
-
-#include "nonposix.h"
-
-/* A signal handler that just records that a signal has happened. */
-static int child_interrupted;
-
-static RETSIGTYPE signal_catcher (int signo)
-{
- child_interrupted++;
-}
-
-static const char *sh = "sh";
-static const char *command = "command";
-
-const char *
-system_shell_name (void)
-{
- static const char *shell_name;
-
- /* We want them to be able to use a Unixy shell if they have it
- installed. Let spawnlp try to find it, but if it fails, default
- to COMMAND.COM. */
- if (shell_name == NULL)
- {
- int sh_found = spawnlp (P_WAIT, sh, sh, "-c", ":", NULL) == 0;
-
- if (sh_found)
- shell_name = sh;
- else
- shell_name = command;
- }
- return shell_name;
-}
-
-const char *
-system_shell_dash_c (void)
-{
- if (strcmp (system_shell_name(), sh) == 0)
- return "-c";
- else
- return "/c";
-}
-
-int
-is_system_shell (const char *shell)
-{
- char monocased_shell[FILENAME_MAX];
- size_t shlen;
- int ibase = 0, idot, i;
-
- if (!shell) /* paranoia */
- return 0;
- idot = shlen = strlen(shell);
-
- for (i = 0; i < shlen; i++)
- {
- if (isalpha(shell[i]))
- monocased_shell[i] = tolower(shell[i]);
- else
- {
- monocased_shell[i] = shell[i];
- if (shell[i] == '.')
- idot = i;
- else if (shell[i] == '/' || shell[i] == '\\' || shell[i] == ':')
- {
- ibase = i + 1;
- idot = shlen;
- }
- }
- }
- monocased_shell[i] = '\0';
-
- /* "sh" and "sh.exe" should compare equal. */
- return
- strncmp(monocased_shell + ibase, system_shell_name(), idot - ibase) == 0
- && (idot == shlen
- || strcmp(monocased_shell + idot, ".exe") == 0
- || strcmp(monocased_shell + idot, ".com") == 0);
-}
-
-/* MSDOS doesn't have `fork', so we need to simulate the pipe by
- running the programs in sequence with redirected standard streams. */
-
-int run_pipeline (ncommands, commands)
- int ncommands;
- char ***commands;
-{
- int save_stdin = dup(0);
- int save_stdout = dup(1);
- char *tmpfiles[2];
- char tem1[L_tmpnam], tem2[L_tmpnam];
- int infile = 0;
- int outfile = 1;
- int i, f, ret = 0;
-
- tmpfiles[0] = tmpnam(tem1);
- tmpfiles[1] = tmpnam(tem2);
-
- for (i = 0; i < ncommands; i++)
- {
- int exit_status;
- RETSIGTYPE (*prev_handler)(int);
-
- if (i)
- {
- /* 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)
- {
- /* 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;
-}
-
-#else /* not __MSDOS__, not _WIN32 */
-
-int run_pipeline(ncommands, commands)
- int ncommands;
- char ***commands;
-{
- 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) {
- 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) {
- 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) {
- 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(s)
- const char *s;
-{
- c_fatal("%1: %2", s, strerror(errno), (char *)0);
-}
-
-static char *i_to_a(n)
- int n;
-{
- static char buf[12];
- sprintf(buf, "%d", n);
- return buf;
-}
-
-static const char *xstrsignal(n)
- int n;
-{
- static char buf[sizeof("Signal ") + 1 + sizeof(int)*3];
-#ifdef NSIG
-#ifdef SYS_SIGLIST_DECLARED
- if (n >= 0 && n < NSIG && sys_siglist[n] != 0)
- return sys_siglist[n];
-#endif /* SYS_SIGLIST_DECLARED */
-#endif /* NSIG */
- sprintf(buf, "Signal %d", n);
- return buf;
-}
diff --git a/contrib/groff/groff/pipeline.h b/contrib/groff/groff/pipeline.h
deleted file mode 100644
index 72c4dac..0000000
--- a/contrib/groff/groff/pipeline.h
+++ /dev/null
@@ -1,30 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifdef __cplusplus
-extern "C" {
- int run_pipeline(int, char ***);
-}
-#endif
-
-/* run_pipeline can handle at most this many commands */
-#define MAX_COMMANDS 10
-
-/* Children exit with this status if execvp fails. */
-#define EXEC_FAILED_EXIT_STATUS 0xff
diff --git a/contrib/groff/grog/Makefile.sub b/contrib/groff/grog/Makefile.sub
deleted file mode 100644
index 35b2b3c..0000000
--- a/contrib/groff/grog/Makefile.sub
+++ /dev/null
@@ -1,24 +0,0 @@
-MAN1=grog.n
-CLEANADD=grog
-NAMEPREFIX=$(g)
-
-all: grog
-
-grog: grog.pl grog.sh
- if test -n "$(PERLPATH)" && test -f "$(PERLPATH)"; then \
- rm -f $@; \
- sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/grog.pl >$@; \
- else \
- rm -f $@; \
- sed -e 's/@g@/$(g)/g' \
- -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/grog/grog.man b/contrib/groff/grog/grog.man
deleted file mode 100644
index 86902d2..0000000
--- a/contrib/groff/grog/grog.man
+++ /dev/null
@@ -1,78 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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 \-ms ,
-.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.
-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@)
diff --git a/contrib/groff/grog/grog.pl b/contrib/groff/grog/grog.pl
deleted file mode 100644
index 416d5b3..0000000
--- a/contrib/groff/grog/grog.pl
+++ /dev/null
@@ -1,167 +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@.*/@@;
-
-push(@command, "groff");
-
-while ($ARGV[0] =~ /^-./) {
- $arg = shift(@ARGV);
- last if $arg eq "--";
- push(@command, $arg);
-}
-
-if (@ARGV) {
- foreach $arg (@ARGV) {
- &process($arg, 0);
- }
-}
-else {
- &process("-", 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/) {
- $_ = <FILE>;
- if (!/^\./) {
- $tbl++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.EQ/) {
- $_ = <FILE>;
- if (!/^\./ || /^\.[0-9]/) {
- $eqn++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.GS/) {
- $_ = <FILE>;
- if (!/^\./) {
- $grn++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.G1/) {
- $_ = <FILE>;
- if (!/^\./) {
- $grap++;
- $pic++;
- $soelim++ if $level;
- }
- }
- elsif (/^\.PS([ 0-9.<].*)?$/) {
- if (/^\.PS\s*<\s*(\S+)/) {
- $pic++;
- $soelim++ if $level;
- &process($1, $level);
- }
- else {
- $_ = <FILE>;
- if (!/^\./ || /^\.ps/) {
- $pic++;
- $soelim++ if $level;
- }
- }
- }
- elsif (/^\.R1/ || /^\.\[/) {
- $refer++;
- $soelim++ if $level;
- }
- elsif (/^\.[PLI]P/) {
- $PP++;
- }
- elsif (/^\.P$/) {
- $P++;
- }
- elsif (/^\.(PH|SA)/) {
- $mm++;
- }
- elsif (/^\.TH/) {
- $TH++;
- }
- elsif (/^\.SH/) {
- $SH++;
- }
- elsif (/^\.([pnil]p|sh)/) {
- $me++;
- }
- elsif (/^\.Dd/) {
- $mdoc++;
- }
- elsif (/^\.(Tp|Dp|De|Cx|Cl)/) {
- $mdoc_old = 1;
- }
- # In the old version of -mdoc `Oo' is a toggle, in the new it's
- # closed by `Oc'.
- elsif (/^\.Oo/) {
- $Oo++;
- }
- elsif (/^\.Oc/) {
- $Oo--;
- }
- if (/^\.so/) {
- chop;
- s/^.so *//;
- s/\\\".*//;
- s/ .*$//;
- &process($_, $level + 1) unless /\\/ || $_ eq "";
- }
- }
- close(FILE);
-}
-
-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");
-}
-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/grog/grog.sh b/contrib/groff/grog/grog.sh
deleted file mode 100644
index d872488..0000000
--- a/contrib/groff/grog/grog.sh
+++ /dev/null
@@ -1,82 +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=
-
-for arg
-do
- case "$arg" in
- --)
- shift; break;;
- -)
- break;;
- -*)
- opts="$opts $arg"; shift;;
- *)
- break;;
- esac
-done
-
-egrep -h '^\.(P|[LI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)' $* \
-| sed -e '/^\.so/s/^.*$/.SO_START\
-&\
-.SO_END/' \
-| $soelim \
-| egrep '^\.(P|[LI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|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++ }
-/^\.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++ }
-/^\.Oo/ { Oo++ }
-/^\.Oc/ { Oo-- }
-
-END {
- if (files ~ /^-/)
- files = "-- " files
- printf "groff"
- 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 (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/grohtml/ChangeLog b/contrib/groff/grohtml/ChangeLog
deleted file mode 100644
index df1e21f..0000000
--- a/contrib/groff/grohtml/ChangeLog
+++ /dev/null
@@ -1,247 +0,0 @@
-2000-06-17 Eli Zaretskii <eliz@is.elta.co.il>
-
- * html.cc [!_POSIX_VERSION]: Include limits.h and dirent.h or
- sys/dir.h. Define NAME_MAX using MAXNAMLEN. Include nonposix.h.
- (file_name_max): New function.
- (html_printer::make_new_image_name): If the filesystem doesn't
- support file names longer than 14 characters, use a shorter
- image_name string.
- (html_printer::convert_to_image): Enlarge the size of buffer[] to
- accomodate 2 temp file names plus some slack. Don't put \n at the
- end of commands passed to system(). Redirect stderr to the null
- device programmatically, not via the shell. Use NULL_DEV, not
- literal "/dev/null". Print diagnostics if any calls to system()
- failed.
-
-2000-05-31 Keith Thompson <kst@SDSC.EDU>
-
- * html.cc: Added declaration of mktemp() as needed for SunOS 4.1.3.
-
-2000-05-11 Werner LEMBERG <wl@gnu.org>
-
- * output.cc (simple_output::simple_output): Reordering of
- initializers to remove compiler warning.
-
-2000-04-28 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc (calculate_margin): Calculate the left and right margin
- irrespective of the boolean `margin_on'. Fixes a divide by zero bug
- and a column bug as reported by Steve Blinkhorn <steve@prd.co.uk>.
- Improved the behaviour of the -m (margin on) option.
-
- * html.cc (make_html_indent): More checking.
-
- * html.cc (right_indentation): Fixed substitution slip-up.
-
-2000-03-30 Werner LEMBERG <wl@gnu.org>
-
- * grohtml.man: Document use of whitespace between command line
- arguments and its parameters.
-
-2000-03-17 Werner LEMBERG <wl@gnu.org>
-
- * grohtml.man: Some formatting.
-
-2000-03-11 Werner LEMBERG <wl@gnu.org>
-
- * ordered_list.h (list_element): Added `<T>' twice to satisfy picky
- compilers.
-
-2000-03-01 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc (handle_unknown_font_command): Removed dead code as
- spotted by Werner.
-
-2000-02-11 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc (create_tmp_file, create_temp_name): Removed. It has been
- replaced with calls to xtmpfile() and xtmptemplate().
-
-2000-02-07 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc (html_printer::make_new_image_name): Tidied up file and
- fixed name of image if the source file is in a different directory.
-
- * html.cc (create_file): Renamed to create_tmp_file.
-
-2000-02-07 Colin Phipps <crp22@cam.ac.uk>
-
- * html.cc (create_file): Identified & fixed security bug when
- creating files in /tmp.
-
-2000-02-06 Werner LEMBERG <wl@gnu.org>
-
- * Makefile.sub: Adapted to new directory structure.
-
-2000-01-28 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc: Minor fixes.
-
-2000-01-27 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc: Added support for the new tcommand `F'.
- * TODO: Updated.
-
-2000-01-24 Gaius Mulley <gaius@glam.ac.uk>
-
- * design.ms: Revised. Removed TODO stuff.
-
- * TODO: New file.
-
-2000-01-21 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc: Add support for char names in special requests (to
- support e.g. accented characters in HTML specials).
-
-2000-01-14 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc, html.h: Many fixes to table code.
-
- Fixes to manual page handling, font changes, spaces, and
- diacritical characters. All *standard* html character encodings
- are handled.
-
- Added -T option which turns off all image generation for tables.
- One day grohtml should be able to determine this for itself.
-
- Altered image name to: <groff_input_file>-<index>.png as per
- Werners suggestion.
-
- * grohtml.man: Document -T option.
-
- * html_chars.h: New file, providing diacritical table support.
-
- * output.cc: New file, providing basic output routines for grohtml.
-
- * Makefile.sub: Added output.cc.
-
- * Makefile.dep: Updated.
-
-2000-01-13 Bruno Haible <haible@clisp.cons.org>
-
- * html.cc: Avoid most "g++ -Wall -Wno-sign-compare" warnings.
-
-2000-01-10 Werner Lemberg <wl@gnu.org>
-
- * html.cc: Use Version_string instead of version_string.
-
-1999-12-30 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc (is_appropriate_to_start_table): Added a missing
- declaration.
-
-1999-12-28 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc: Revisited the table handling code with a vengeance,
- aiming to make manual pages generate sensible html.
- Superscripting/subscripting revisited. Fixed wierd table lengths.
- Table widths are now specified in percentages. Fixed the man.n
- test example which Werner reported.
-
-Version 1.15 released
-=====================
-
-1999-12-21 Werner LEMBERG <wl@gnu.org>
-
- * grohtml.man: Fixed copyright year.
-
-1999-12-15 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc: Some other fixes.
-
-1999-12-13 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc (main): Added new option `-x' to help debugging tables.
-
-1999-12-11 Gaius Mulley <gaius@glam.ac.uk>
-
- * html.cc: Fixed image position bugs. However, three major bugs
- remain: Firstly, grohtml sometimes miscalculates the end of an
- html table resulting in text which appears twice. Secondly,
- equation numbers are not handled correctly. Thirdly, equation
- macros and pic macros can confuse grohtml; this can be seen by
- nested `graphic-start's -- I believe the best method to solve this
- is to detect .EQ, .EN, .TS, .TE, .PS, .PE sequences in troff and
- add the graphic-start special character at this point.
-
- * grohtml.man: Minor fixes.
-
-1999-11-29 Gaius Mulley <gaius@glam.ac.uk>
-
- * design.ms: More updates; added some basic introductional
- information.
-
- * html.cc: Fixed more bugs mainly in the table handling code.
- Making the code terminate a table at the correct position.
- Indented .IPs appear to work now. Region ends also correctly
- terminate tables.
-
-1999-11-16 Gaius Mulley <gaius@glam.ac.uk>
-
- * design.ms, grohtml.man: Updated.
-
- * html.cc, ordered_list.h: Fixed many bugs in the table handling
- code. Reverted the -t switch so that table handling code is used
- by default and users must turn it off with -t.
-
- Manual page generation using `groff -Thtml -man' is much better
- due in large part to the table code and minor alterations in
- tmac.an.
-
-1999-10-30 Gaius Mulley <gaius@glam.ac.uk>
-
- * implemented auto formatting and introduced html table
- code. Fixed several text handling bugs and grohtml will
- detect centered lines - an offshoot of the html table code.
-
- * reverted meaning of grohtml's `-a' switch: using -a means that
- output will be preformatted.
-
-1999-10-05 Gaius Mulley <gaius@glam.ac.uk>
-
- * Introduced command line options -r to determine the resolution
- of generated images, -I to determine the format of images
- generated.
-
- * Fixed many bugs to do with superscripts, subscripts,
- indentation, font changes, and extraneous spaces.
-
- * Fixed bug in determining the range of polygons and splines.
-
- * Updated the manual page to reflect the new options.
-
- * The default image type is png format, however this will only
- work if you have a gs with a png output device. If you don't have
- a gs with this ability you can either reconfigure html to generate
- gif images by default (alter a #define in html.cc). Or
- alternatively you can use the -Igif option.
-
-1999-09-27 Werner LEMBERG <wl@gnu.org>
-
- * html.cc (move_horizontal): Fonts have changed one character too
- late.
-
-1999-09-26 Werner LEMBERG <wl@gnu.org>
-
- * grohtml.man: Minor cosmetic fixes.
-
-1999-09-25 Gaius Mulley <gaius@glam.ac.uk>
-
- * grohtml.man, html.cc: Rewrite of the html text component. Basic
- font faces supported together with font types. Superscript and
- subscript have also been implemented. Temporarily removed the
- -P-a switch on grohtml as it is not working (never worked). This
- is the next `to do'. Added a simple macro tmac.arkup which
- contains simple html features. This macro needs further work.
- Arc, spline, polygon fill have all been added and arc max/min xy
- limits are calculated, the same needs to be done for spline. Many
- bugs have been fixed regarding basic html text.
-
- * design.ms: New file describing how html.cc works.
-
-Aug 1999
-
- Initial release, very basic html text generated, quite ugly text
- is generated according to many reports :-) Equations, tables,
- pictures generate gif files via gs and ppmquant, ppmtogif, grops.
-
diff --git a/contrib/groff/grohtml/Makefile.sub b/contrib/groff/grohtml/Makefile.sub
deleted file mode 100644
index a1e301f..0000000
--- a/contrib/groff/grohtml/Makefile.sub
+++ /dev/null
@@ -1,10 +0,0 @@
-PROG=grohtml
-MAN1=grohtml.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- html.o \
- output.o
-CCSRCS=\
- $(srcdir)/html.cc \
- $(srcdir)/output.cc
diff --git a/contrib/groff/grohtml/TODO b/contrib/groff/grohtml/TODO
deleted file mode 100644
index 4924bd1..0000000
--- a/contrib/groff/grohtml/TODO
+++ /dev/null
@@ -1,294 +0,0 @@
-
-------------------------------------------------------------------
- T O D O L I S T
-------------------------------------------------------------------
-finish working out the max and min x, y, extents for splines.
-------------------------------------------------------------------
-check and test thoroughly all the character descriptions in devhtml
-(originally taken from devX100)
-------------------------------------------------------------------
-improve tmac.arkup
-------------------------------------------------------------------
-also improve documentation.
-------------------------------------------------------------------
-fix the bugs which are exposed by Eric Raymonds pic guide,
-"Making Pictures With GNU PIC". It appears that grohtml becomes confused
-about which sections of the document are text and which sections need
-to be rendered as an image.
-------------------------------------------------------------------
-it would be nice to modularise the source. A natural division might be
-to extract the table handling code from html.cc into table.cc.
-The table.cc could be expanded to recognise output from tbl and try
-and generate html tables with lines/rules/boxes. The code as it stands
-should cope with very simple plain text tables. But of course at present
-it does not get a chance to do this because the output of gtbl is
-bracketed by \fCgraphic-start\fR and \fCgraphic-end\fR.
-------------------------------------------------------------------
-introduce anti aliasing for the images as mentioned by Werner.
-------------------------------------------------------------------
-improve generation of html. Perhaps by using a stack of current
-html commands and using a kind of peephole optimizer on the stack?
-Certainly the html should be buffered and optimized.
-------------------------------------------------------------------
-
-
-Informal to do bug list and done list
-=====================================
-
-This very informal and I've included some comments. Mainly consists
-of a emailed bugs and wish lists. All very useful and welcome.
-
-------------------------------------------------------------------
-Dean writes: (provinsd@enf403-2.ensu.ucalgary.ca)
-
-I noticed also that the TOC appears immediately after the title, splitting
-it from the author and abstract. Any chance it can be moved down?
-
-gaius> this should be straight forward. (Not done yet though)
-------------------------------------------------------------------
-
-.) The command `\(->', translates to the `registered' sign (or rather
- the character `0xAE') instead of a right arrow.
-
---nearly fixed-- 4/01/2000
-
-gaius> if we know the standard html character encoding for farrow which
-gaius> will work on *all* browsers then this can be fixed inside devhtml/TR
-gaius> etc. Otherwise I guess we could translate this character into ->
-gaius> in tmac.html ?
-
-------------------------------------------------------------------
-
-Werner writes:
-
-Nevertheless, still some bugs in it. As usual, I'm refering to man.1
-of the mandb package; my command to create man.html was
-
- groff -U -t -man -Thtml -P-r -P200 man.1 > man.html
-
-.) The `-w , --where, --location' node at the beginning of man.html
- shouldn't be there at all.
-
-> .) Some paragraphs still contain hyphenated words (e.g. first
-> paragraph of the `DESCRIPTION' section).
-
-Oops! Please ignore this. I forgot to include `-mhtml' :-)
-
-.) Is it possible to have anti-aliased PNG images?
-
-.) The item `man --help' in the `EXAMPLES' section doesn't start a new
- paragraph.
-
-.) In the description of the -r switch (in the `OPTIONS' section),
- there is a new paragraph in the middle of a sentence.
-
-.) What about centering the images? Or does it depend on the table
- itself?
-
-gaius> yes, grohtml places images at their relative position on the page.
-
-.) In the `OPTIONS' section, `-c, --catman' and `-d, --debug' are
- glued together which shouldn't happen.
---fixed--
-
-.) Sometimes, an empty line is missing between items, e.g. between the
- description of the -e and the -f options.
-
-.) After the `-w, --where, --location' line, there is a superfluous
- empty line.
-
-.) The indentation in the `FILES' section is inconsistent. The same
- is true for `-V, --version' a few lines above.
-
-.) The formatting of the paragraph after the first table is completely
- wrong. It appears that the first few words are set in two columns;
- additionally, the indentation is incorrect.
-
-.) Similarly, the description of `-l' in the OPTIONS section is
- idented incorrectly. Wrong indentations happen still quite
- frequently.
-
-.) In the description of the `-D' option, there is a blank line in the
- middle of a paragraph.
-
-
- Werner
-
-------------------------------------------------------------------
-Werner writes:
-
-Gaius,
-
-checking a weird man page written by myself in German (using German
-hyphenation patterns also :-), I found some more bugs:
-
-.) Look at the following:
-
-[\c
-...\^\c
-]
-[\c
-.BI -P \ \%Plattform-ID\^\c
-]
-
- This translates to
-
-[<font size=3><B>-E</B> <font size=3><I>Kodierungs-ID</I> <font size=3>]
- ^
- (groff breaks the line after the final `]'.)
-
- There are two errors in it: First of all, the `\ ' command should
- be translated to `&nbsp;'. Secondly, a blank has crept in (marked
- with `^'. Apparently, this is related to whether it is the last
- item of a line or not.
-
---fixed-- 4 01 2000
-------------------------------------------------------------------
-
-from Steve Blinkhorn <steve@prd.co.uk>
-
-One thought that came immediately to mind after our first trials.
-If grohtml depends on grops, should there not be an easy interface to
-allow PostScript code to be interpreted into the output? For
-instance, we generate our letterhead, including a logo, on the fly in
-groff. The logo is pure PostScript. We use PostScript for colour
-manipulation, and recently for generating a lot of graphics for
-printing.
-
-gaius> should be interesting - if we can generate PS then GS it
-gaius> we should be in business
-
-------------------------------------------------------------------
- D O N E L I S T
-------------------------------------------------------------------
-the logical place and name for a file describing tmac.arkup is
-groff_markup.man placed into the `tmac' subdirectory, and your html.ms
-looks like being this kind of file.
-
-So I won't check it in currently -- may I ask you to convert this file
-to a man page?
-
--- fixed --
-
-Another related problem: I can imagine that a lot of people start to
-write man pages with HTML output in mind also. Nevertheless, it
-should be still possible to display such pages correctly with a plain
-text man pager. As a consequence, such man pages should contain at
-the beginning something like
-
- .do mso tmac.arkup
-
-What do you think?
-
- Werner
-
--- fixed --
-gaius> fixed by using troffrc-end I believe
---------------------------------------------------------------------
-Gaius,
-
-in troffrc, it appears to me that tmac.html is loaded if the output
-device is HTML. So why must I load it again (using -mhtml) to
-suppress hyphenation for HTML output? Can you provide a fix for this?
-
- Werner
-
-gaius> fixed as above
---------------------------------------------------------------------
-
-from (daeschler@shuttle.de) Rainer Daeschler
-
-I recognized s problem limiting the usage for
-"none-english aliens". The generation of PNG of GIF,
-skips all special characters like
-
- äöü ÄÖÜ ß
-
-French, Spanish, and Scandinavian national letters, too.
-
---fixed-- 14/01/2000
-
-An option which forces tables into HTML-code instead of building
-an image would be most valuable. Of course it would not preserve
-the original layout in many cases, but ease modifications of
-the HTML-output to the users demand afterwards.
-
---fixed-- 14/01/2000
-
-gaius> use the new -T option to grohtml (-P-T to groff)
-
------------------------------------------------------------------
-from Werner
-
- but `pre-defined' appears as `pre&shy; line' (note the space
- character after the soft hyphen). Something in the code makes
- problems here...
-
- (IIRC, I've sent you this man.1 file a few weeks ago).
-
-gaius> Werner fixed this by adding .cflags 0 -\(hy\(em\(en to tmac.html
-
------------------------------------------------------------------
-from Werner and Eddie
-> > > .LP
-> > > .URL Germany "ftp://groff.ffii.org/pub/groff/"
-> > > |
-> > > .URL USA "ftp://ftp.gnu.org/gnu/groff/"
-> >
-> > Problem: the first "|" of each line is missing a leading white space
-> > space.
-> >
-> > How to ensure the spaces get put there?
->
-> This is a feature grohtml (unfortunately -- AFAIK, Gaius hasn't found
-> a good workaround yet). HTML stuff gets written as specials which
-> don't consume space for troff, causing some miscalculation if placed
-> at the beginning of a paragraph. A workaround is to write
->
-> .LP
-> \&
-> .URL ...
-> |
-> .URL ...
-
-gaius> fixed by adding \& to HTML as per Werner's suggestion
-
-
-Werner writes:
-
-PNGs created by grohtml have apparently a white background -- isn't it
-possible to make the background transparent optionally?
-
-Another suggestion: What do you think about calling the PNG files
-<groff_input_file>-<index>.png or something like this? I can't see an
-advantage in the current naming scheme except for debugging purposes
-where it may be necessary to stay with the old files.
-
---fixed-- 04 01 2000
-
-gaius> however I've had to retain a default grohtml-pid-index.png for all
-gaius> stdin as we don't know the filename.. sadly looks like everything..
-gaius> Nearly done by including a new tcommand 'F filename'
-
---fixed-- 26 01 2000
-------------------------------------------------------------------
-
-.) The following code produces ugly results -- is it possible to make
- the HTML result similar to the ascii output?
-
-.in +4m
-.ta 3iC
-.I "Plattform Plattform-ID (pid)"
-\&.sp
-.ta 3iR
-Apple Unicode 0
-.br
-Macintosh 1
-.br
-ISO 2
-.br
-Microsoft 3
-.PP
-
---fixed-- 14/01/2000
-------------------------------------------------------------------
diff --git a/contrib/groff/grohtml/design.ms b/contrib/groff/grohtml/design.ms
deleted file mode 100644
index 6216d4e..0000000
--- a/contrib/groff/grohtml/design.ms
+++ /dev/null
@@ -1,129 +0,0 @@
-.nr PS 12
-.nr VS 14
-.LP
-.TL
-Design of grohtml
-.sp 1i
-.SH
-What is grohtml
-.LP
-Grohtml is a back end for groff which generates html.
-The aim of grohtml is to produce respectible html given
-fairly typical groff input.
-.SH
-Limitations of grohtml
-.LP
-Although basic text can be translated
-in a straightforward fashion there are some areas where grohtml
-has to try and guess text relationship. In particular whenever
-grohtml encounters text tables and indented paragraphs or
-two column mode it will try and utilize the html table construct
-to preserve columns. Grohtml also attempts to work out which
-lines should be automatically formatted by the browser.
-Ultimately in trying to make reasonable guesses most of the time
-it will make mistakes occasionally.
-.PP
-Tbl, pic, eqn's are also generated using images which may be
-considered a limitation.
-.SH
-Overview of html.cc
-.LP
-This file briefly provides an overview of how html.cc operates.
-The html device driver works as follows:
-.IP (i) .5i
-firstly it creates a linked list of all words on a page.
-.IP (ii) .5i
-it runs through the page and finds the left most margin. Later
-on when generating the page it removes the margin.
-.IP (iii) .5i
-scans a page and builds two kinds of regions ascii text and graphical.
-The graphical regions consist of tbl's, eqn's, pic's
-(basically anything that cannot be textually displayed).
-It will scan through a page to find lines (such as footer etc)
-and places these into tiny graphical regions. Certain fonts
-also are treated as a graphical region - as html has no easy
-equivalent. For example Greek math symbols.
-.LP
-Finally all graphical regions are translated into png files and
-all text regions into html text.
-.PP
-To give grohtml a sporting chance of accuratly deciding which
-is a graphical region and which is text, the front end programs
-tbl, eqn, pic have all been tweeked to encapsulate pictures, tables
-and equations with the following lines:
-.sp
-.nf
-\f[CR]\&.if '\\*(.T'html' \\X(graphic-start(\c
-
-\&.if '\\*(.T'html' \\X(graphic-end(\c
-\fP
-.fi
-.sp
-these appear to grohtml as:
-.sp
-.nf
-\f[CR]\&x X graphic-start
-
-\&...
-
-\&x X graphic-end\fP
-.fi
-.sp
-.LP
-In addition to graphic-start and graphic-end there are two
-other "special characters" which are used.
-.sp
-\f[CR]\&x X index:N\fP
-.sp
-where N is a number. The purpose of this sequence is to stop
-devhtml from automatically producing links to headings which
-have a header level >N.
-The line:
-.sp
-\f[CR]\&x X html:STRING\fR
-.sp
-.LP
-allows a STRING to be passed through to the output file with
-no processing whatsoever. Ie it allows users to include html
-commands, via macro, such as:
-.sp
-\f[CR]\&.URL "Latest Emacs" "ftp://somewonderful.gnu.software"\fP
-.sp
-.LP
-Where the URL macro bundles the info into STRING above.
-For more info consult: \f[CR]tmac/tmac.arkup\fP.
-.PP
-While scanning through a page the html device copies headings and titles
-into a list of links which are later written to the beginning
-of the html document.
-.SH
-Table handling code
-.LP
-Provided that the -t option is not present when grohtml is run the grohtml
-driver will attempt to find textual tables and generate html tables.
-This allows .RS and .RE commands to operate with auto formatting. It also
-should grohtml to process .2C correctly. However, the table handling code
-has to examine the troff output and \fIguess\fR when a table starts and
-finishes. It is well to know the limitations of this approach as it
-sometimes makes the wrong decision.
-.LP
-Here are some of the rules that grohtml uses for terminating a html table:
-.LP
-.IP "(i)" .5i
-A table will be terminated when grohtml finds line which is all in bold
-font (it believes that this is a header which is outside of a table).
-This might be considered incorrect behaviour especially if you use .2C
-which generates a heading on the left column when the corresponding
-right row is blank.
-.IP "(ii)" .5i
-A table is terminated when grohtml sees that the complete line is
-has been spanned by words. Ie no gaps exist.
-.IP "(nb)" .5i
-the documentation about these rules is particularly incomplete and needs finishing
-when time prevails.
-.SH
-Dependencies
-.LP
-Grohtml is dependent upon grops, gs which are invoked to
-generate all png files. Png files are generated whenever a table, picture,
-equation or line is encountered.
diff --git a/contrib/groff/grohtml/grohtml.man b/contrib/groff/grohtml/grohtml.man
deleted file mode 100644
index f1cd7f7..0000000
--- a/contrib/groff/grohtml/grohtml.man
+++ /dev/null
@@ -1,187 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1999-2000 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 \-atTvdgm?
-.OP \-F dir
-.OP \-I imagetype
-.OP \-r resolution
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.SH DESCRIPTION
-.B grohtml
-translates the output of GNU
-.B troff
-to html.
-Normally
-.B grohtml
-should be invoked by using 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 the
-.B groff
-.B \-P
-option.
-.SH OPTIONS
-.TP
-.B \-a
-force
-.B grohtml
-to generate html line breaks in the same position as troff dictates.
-Without this option
-.B grohtml
-generates text in paragraphs which is formatted by the html browser.
-.TP
-.B \-d
-turn on internal debugging.
-.TP
-.B \-g
-tell
-.B grohtml
-not to try and guess titles and headings.
-By using this flag together with the -m and -a flag
-.B grohtml
-will treat the html browser as a printer, not as a formatter.
-.TP
-.B \-m
-leave margins alone.
-.B grohtml
-will not remove left margins.
-.TP
-.B \-t
-forbids
-.B grohtml
-from generating html tables when implementing indentation and tabular text.
-.B grohtml
-can implement .IP by tables or html indents.
-However if .2C is used it can only be sensibly converted to html using a
-table structure.
-As a few known bugs still exist with the html table code this option is
-present to supress execution of this development code.
-The default in
-.B grohtml
-is that html tables are generated when appropriate.
-.TP
-.B \-T
-forbids
-.B grohtml
-from generating images when processing output from tbl.
-This is useful when simple textual tables are being produced.
-.TP
-.BI \-F dir
-Search the directory
-.IB dir /dev name
-for font and device description files;
-.I name
-is the name of the device, usually
-.BR html .
-.TP
-.BI \-I imagetype
-select the type of image generated when grohtml encounters an equation,
-table, or picture.
-By default this is png256.
-Legal image types are: gif and any of the png formats which are supported by
-ghostscript gs(1).
-.TP
-.BI \-r resolution
-select the resolution for all images.
-By default this is 80 pixels per inch.
-Example: -r100 indicates 100 pixels per inch.
-.TP
-.B \-v
-Print the version number.
-.TP
-.B \-?
-Display usage.
-.SH USAGE
-There are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to 4.
-It is advisable to invoke groff with the -mhtml macro set, which turns off
-headers, footers, and hyphenation; additionally, it will right justify text.
-.SH DEPENDENCIES
-.B grohtml
-is dependent upon grops and gs.
-If
-.B grohtml
-has been configured to generate gif files then it is further dependent upon,
-ppmtogif, and ppmquant.
-However if it has been configured to generate png files (the default) then
-it is dependent upon gs having a png output device.
-Images are generated whenever a table, picture, equation or line is
-encountered.
-.SH BUGS
-This is still very alpha.
-At least three major bugs remain:
-Firstly,
-.B grohtml
-sometimes miscalculates the end of an html table resulting in text which
-appears twice.
-Secondly equation numbers are not handled correctly.
-Thirdly equation macros and pic macros can confuse
-.BR grohtml .
-.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@)
diff --git a/contrib/groff/grohtml/html.cc b/contrib/groff/grohtml/html.cc
deleted file mode 100644
index 0ee5ce6..0000000
--- a/contrib/groff/grohtml/html.cc
+++ /dev/null
@@ -1,6591 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1999 Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote grohtml
- * but it owes a huge amount of ideas and raw code from
- * James Clark (jjc@jclark.com) grops/ps.cc.
- */
-
-/*
-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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-
-#include "html.h"
-#include "html_chars.h"
-#include <time.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-extern "C" {
- // SunOS 4.1.3 fails to declare this in stdlib.h
- char *mktemp(char *);
-}
-
-#include <stdio.h>
-#include <fcntl.h>
-
-#ifndef _POSIX_VERSION
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif /* HAVE_LIMITS_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 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 */
-
-#endif /* not _POSIX_VERSION */
-
-#include "nonposix.h"
-
-#include "ordered_list.h"
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-#define MAX_TEMP_NAME 1024
-#define MAX_STRING_LENGTH 4096
-#define MAX_CHAR_SIZE 50 // maximum length of character name
-
-#define Y_FUDGE_MARGIN +0.83
-#define A4_PAGE_LENGTH (11.6944-Y_FUDGE_MARGIN)
-#define DEFAULT_IMAGE_RES 80
-#define IMAGE_BOARDER_PIXELS 10
-#define MAX_WORDS_PER_LINE 1000 // only used for table indentation
-#define GAP_SPACES 3 // how many spaces needed to guess a gap?
-#define GAP_WIDTH_ONE_LINE 2 // 1/GAP_WIDTH_ONE_LINE inches required for one line table
-#define CENTER_TOLERANCE 2 // how many pixels off center will we think a line or region is centered
-#define MIN_COLUMN 7 // minimum column size pixels for multiple lines
-#define MIN_COLUMN_FOR_TWO_LINES 20 // minimum column size pixels for a 2 line table
-#define MIN_TEXT_PERCENT 5 // try and round to this percentage value for used columns
-#define PERCENT_THRESHOLD 20 // don't bother trying to increase and width greater than this
-
-
-/*
- * Only uncomment one of the following to determine default image type.
- */
-
-#define IMAGE_DEFAULT_PNG
-/* #define IMAGE_DEFAULT_GIF */
-
-
-#if defined(IMAGE_DEFAULT_GIF)
-static enum { gif, png } image_type = gif;
-static char *image_device = "gif";
-#elif defined(IMAGE_DEFAULT_PNG)
-static enum { gif, png } image_type = png;
-static char *image_device = "png256";
-#else
-# error "you must define either IMAGE_DEFAULT_GIF or IMAGE_DEFAULT_PNG"
-#endif
-
-static int debug_on = FALSE;
-static int guess_on = TRUE;
-static int margin_on = FALSE;
-static int auto_on = TRUE;
-static int table_on = TRUE;
-static int image_res = DEFAULT_IMAGE_RES;
-static int debug_table_on = FALSE;
-static int table_image_on = TRUE; // default is to create images for tbl
-
-static int linewidth = -1;
-
-#define DEFAULT_LINEWIDTH 40 /* in ems/1000 */
-#define MAX_LINE_LENGTH 72
-#define FILL_MAX 1000
-
-void stop () {}
-
-
-/*
- * start with a few favorites
- */
-
-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_subsection - returns TRUE if a1..a2 is within b1..b2
- */
-
-static int is_subsection (int a1, int a2, int b1, int b2)
-{
- // easier to see whether this is not the case
- return( !((a1 < b1) || (a1 > b2) || (a2 < b1) || (a2 > b2)) );
-}
-
-/*
- * is_intersection - returns TRUE if range a1..a2 intersects with b1..b2
- */
-
-static int is_intersection (int a1, int a2, int b1, int b2)
-{
- // again 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') );
-}
-
-/*
- * more_than_line_break - returns TRUE should v1 and v2 differ by more than
- * a simple line break.
- */
-
-static int more_than_line_break (int v1, int v2, int size)
-{
- return( abs(v1-v2)>size );
-}
-
-/*
- * the class and methods for styles
- */
-
-struct style {
- font *f;
- int point_size;
- int font_no;
- int height;
- int slant;
- style ();
- style (font *, int, int, int, int);
- int operator == (const style &) const;
- int operator != (const style &) const;
-};
-
-style::style()
- : f(0)
-{
-}
-
-style::style(font *p, int sz, int h, int sl, int no)
- : f(p), point_size(sz), font_no(no), height(h), slant(sl)
-{
-}
-
-int style::operator==(const style &s) const
-{
- return (f == s.f && point_size == s.point_size
- && height == s.height && slant == s.slant);
-}
-
-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[SIZE];
- int used;
- char_block *next;
-
- char_block();
-};
-
-char_block::char_block()
-: used(0), next(0)
-{
-}
-
-class char_buffer {
-public:
- char_buffer();
- ~char_buffer();
- char *add_string(char *, unsigned int);
-private:
- char_block *head;
- char_block *tail;
-};
-
-char_buffer::char_buffer()
-: head(0), tail(0)
-{
-}
-
-char_buffer::~char_buffer()
-{
- while (head != 0) {
- char_block *temp = head;
- head = head->next;
- delete temp;
- }
-}
-
-char *char_buffer::add_string (char *s, unsigned int length)
-{
- int i=0;
- unsigned int old_used;
-
- if (tail == 0) {
- tail = new char_block;
- head = tail;
- } else {
- if (tail->used + length+1 > char_block::SIZE) {
- tail->next = new char_block;
- tail = tail->next;
- }
- }
- // at this point we have a tail which is ready for the string.
- if (tail->used + length+1 > char_block::SIZE) {
- fatal("need to increase char_block::SIZE");
- }
-
- 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] );
-}
-
-/*
- * the classes and methods for maintaining pages and text positions and graphic regions
- */
-
-class text_glob {
-public:
- int is_less (text_glob *a, text_glob *b);
- text_glob (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal, int is_command, int is_html);
- text_glob (void);
- ~text_glob (void);
-
- style text_style;
- char *text_string;
- unsigned int text_length;
- int minv, maxv, minh, maxh;
- int is_raw_command; // should the text be sent directly to the device?
- int is_html_command; // is the raw command definitely for the html device ie not an eqn?
-};
-
-text_glob::text_glob (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal, int is_command, int is_html)
- : text_style(*s), text_string(string), text_length(length),
- minv(min_vertical), maxv(max_vertical), minh(min_horizontal), maxh(max_horizontal),
- is_raw_command(is_command), is_html_command(is_html)
-{
-}
-
-text_glob::text_glob ()
- : text_string(0), text_length(0), minv(-1), maxv(-1), minh(-1), maxh(-1),
- is_raw_command(FALSE), is_html_command(FALSE)
-{
-}
-
-text_glob::~text_glob ()
-{
-}
-
-int text_glob::is_less (text_glob *a, text_glob *b)
-{
- if (is_intersection(a->minv+1, a->maxv-1, b->minv+1, b->maxv-1)) {
- return( a->minh < b->minh );
- } else {
- return( a->maxv < b->maxv );
- }
-}
-
-struct xycoord {
- int x;
- int y;
-};
-
-class graphic_glob {
-public:
- int is_less (graphic_glob *a, graphic_glob *b);
- graphic_glob (int troff_code);
- graphic_glob (void);
- ~graphic_glob (void);
-
- int minv, maxv, minh, maxh;
- int xc, yc;
- int nopoints; // number of points allocated in array below
- struct xycoord *point;
- int size;
- int fill;
- int code;
-};
-
-graphic_glob::graphic_glob ()
- : minv(-1), maxv(-1), minh(-1), maxh(-1), nopoints(0), point(0), size(0), code(0)
-{
-}
-
-graphic_glob::~graphic_glob ()
-{
- if (point != 0) {
- free(point);
- }
-}
-
-graphic_glob::graphic_glob (int troff_code)
- : minv(-1), maxv(-1), minh(-1), maxh(-1), nopoints(0), point(0), size(0), code(troff_code)
-{
-}
-
-int graphic_glob::is_less (graphic_glob *a, graphic_glob *b)
-{
- return( (a->minv < b->minv) || ((a->minv == b->minv) && (a->minh < b->minh)) );
-}
-
-class region_glob {
-public:
- region_glob (void);
- ~region_glob (void);
- int is_less (region_glob *a, region_glob *b);
-
- int minv, maxv, minh, maxh;
-};
-
-int region_glob::is_less (region_glob *a, region_glob *b)
-{
- return( (a->minv < b->minv) || ((a->minv == b->minv) && (a->minh < b->minh)) );
-}
-
-region_glob::region_glob (void)
- : minv(-1), maxv(-1), minh(-1), maxh(-1)
-{
-}
-
-region_glob::~region_glob (void)
-{
-}
-
-class page {
-public:
- page (void);
- void add (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void add_html_command (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void add_special_char (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal);
- void add_line (int code, int x1, int y1, int x2, int y2, int size, int fill);
- void add_arc (int code, int xc, int yc, int *p, double *c, int size, int fill);
- void add_polygon (int code, int np, int *p, int oh, int ov, int size, int fill);
- void add_spline (int code, int xc, int yc, int np, int *p, int size, int fill);
- void calculate_region (void);
- int is_in_region (graphic_glob *g);
- int can_grow_region (graphic_glob *g);
- void make_new_region (graphic_glob *g);
- int has_line (region_glob *r);
- int has_word (region_glob *r);
- int no_raw_commands (int minv, int maxv);
-
- // and the data
-
- ordered_list <region_glob> regions; // squares of bitmapped pics,eqn,tbl's
- ordered_list <text_glob> words; // position of words on page
- ordered_list <graphic_glob> lines; // position of lines on page
- char_buffer buffer; // all characters for this page
- int is_in_graphic; // should graphics and words go below or above
- ordered_list <text_glob> region_words; // temporary accumulation of words in a region
- ordered_list <graphic_glob> region_lines; // (as above) and used so that we can determine
- // the regions vertical limits
-};
-
-page::page()
- : is_in_graphic(FALSE)
-{
-}
-
-void page::add (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- if (length > 0) {
- text_glob *g=new text_glob(s, buffer.add_string(string, length), length,
- min_vertical, min_horizontal, max_vertical, max_horizontal, FALSE, FALSE);
- if (is_in_graphic) {
- region_words.add(g);
- } else {
- words.add(g);
- }
- }
-}
-
-/*
- * add_html_command - it only makes sense to add html commands when we are not inside
- * a graphical entity.
- */
-
-void page::add_html_command (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- if ((length > 0) && (! is_in_graphic)) {
- text_glob *g=new text_glob(s, buffer.add_string(string, length), length,
- min_vertical, min_horizontal, max_vertical, max_horizontal, TRUE, TRUE);
- words.add(g);
- }
-}
-
-/*
- * add_special_char - it only makes sense to add special characters when we are inside
- * a graphical entity.
- */
-
-void page::add_special_char (style *s, char *string, unsigned int length,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
-{
- if ((length > 0) && (is_in_graphic)) {
- text_glob *g=new text_glob(s, buffer.add_string(string, length), length,
- min_vertical, min_horizontal, max_vertical, max_horizontal, TRUE, FALSE);
- region_words.add(g);
- }
-}
-
-void page::add_line (int code, int x1, int y1, int x2, int y2, int size, int fill)
-{
- graphic_glob *g = new graphic_glob(code);
-
- g->minh = min(x1, x2);
- g->maxh = max(x1, x2);
- g->minv = min(y1, y2);
- g->maxv = max(y1, y2);
- g->point = (struct xycoord *)malloc(sizeof(xycoord)*2);
- g->nopoints = 2;
- g->point[0].x = x1 ;
- g->point[0].y = y1 ;
- g->point[1].x = x2 ;
- g->point[1].y = y2 ;
- g->xc = 0;
- g->yc = 0;
- g->size = size;
- g->fill = fill;
-
- if (is_in_graphic) {
- region_lines.add(g);
- } else {
- lines.add(g);
- }
-}
-
-/*
- * assign_min_max_for_arc - works out the smallest box that will encompass an
- * arc defined by: origin: g->xc, g->xc
- * and vector (p[0], p[1]) and (p[2], p[3])
- */
-
-void assign_min_max_for_arc (graphic_glob *g, int *p, double *c)
-{
- int radius = (int) sqrt(c[0]*c[0]+c[1]*c[1]);
- int xv1 = p[0];
- int yv1 = p[1];
- int xv2 = p[2];
- int yv2 = p[3];
- int x1 = g->xc+xv1;
- int y1 = g->yc+yv1;
- int x2 = g->xc+xv1+xv2;
- int y2 = g->yc+yv1+yv2;
-
- // firstly lets use the 'circle' limitation
- g->minh = x1-radius;
- g->maxh = x1+radius;
- g->minv = y1-radius;
- g->maxv = y1+radius;
-
- // incidentally I'm sure there is a better way to do this, but I don't know it
- // please can someone let me know or "improve" this function
-
- // now see which min/max can be reduced and increased for the limits of the arc
- //
- //
- // Q2 | Q1
- // -----+-----
- // Q3 | Q4
- //
-
-
- if ((xv1>=0) && (yv1>=0)) {
- // first vector in Q3
- if ((xv2>=0) && (yv2>=0)) {
- // second in Q1
- g->maxh = x2;
- g->minv = y1;
- } else if ((xv2<0) && (yv2>=0)) {
- // second in Q2
- g->maxh = x2;
- g->minv = y1;
- } else if ((xv2>=0) && (yv2<0)) {
- // second in Q4
- g->minv = min(y1, y2);
- } else if ((xv2<0) && (yv2<0)) {
- // second in Q3
- if (x1>=x2) {
- g->minh = x2;
- g->maxh = x1;
- g->minv = min(y1, y2);
- g->maxv = max(y1, y2);
- } else {
- // xv2, yv2 could all be zero?
- }
- }
- } else if ((xv1>=0) && (yv1<0)) {
- // first vector in Q2
- if ((xv2>=0) && (yv2>=0)) {
- // second in Q1
- g->maxh = max(x1, x2);
- g->minh = min(x1, x2);
- g->minv = y1;
- } else if ((xv2<0) && (yv2>=0)) {
- // second in Q2
- if (x1<x2) {
- g->maxh = x2;
- g->minh = x1;
- g->minv = min(y1, y2);
- g->maxv = max(y1, y2);
- } else {
- // otherwise almost full circle anyway
- }
- } else if ((xv2>=0) && (yv2<0)) {
- // second in Q4
- g->minv = y2;
- g->minh = x1;
- } else if ((xv2<0) && (yv2<0)) {
- // second in Q3
- g->minh = min(x1, x2);
- }
- } else if ((xv1<0) && (yv1<0)) {
- // first vector in Q1
- if ((xv2>=0) && (yv2>=0)) {
- // second in Q1
- if (x1<x2) {
- g->minh = x1;
- g->maxh = x2;
- g->minv = min(y1, y2);
- g->maxv = max(y1, y2);
- } else {
- // nearly full circle
- }
- } else if ((xv2<0) && (yv2>=0)) {
- // second in Q2
- g->maxv = max(y1, y2);
- } else if ((xv2>=0) && (yv2<0)) {
- // second in Q4
- g->minv = min(y1, y2);
- g->maxv = max(y1, y2);
- g->minh = min(x1, x2);
- } else if ((xv2<0) && (yv2<0)) {
- // second in Q3
- g->minh = x2;
- g->maxv = y1;
- }
- } else if ((xv1<0) && (yv1>=0)) {
- // first vector in Q4
- if ((xv2>=0) && (yv2>=0)) {
- // second in Q1
- g->maxh = max(x1, x2);
- } else if ((xv2<0) && (yv2>=0)) {
- // second in Q2
- g->maxv = max(y1, y2);
- g->maxh = max(x1, x2);
- } else if ((xv2>=0) && (yv2<0)) {
- // second in Q4
- if (x1>=x2) {
- g->minv = min(y1, y2);
- g->maxv = max(y1, y2);
- g->minh = min(x1, x2);
- g->maxh = max(x2, x2);
- } else {
- // nearly full circle
- }
- } else if ((xv2<0) && (yv2<0)) {
- // second in Q3
- g->maxv = max(y1, y2);
- g->minh = min(x1, x2);
- g->maxh = max(x1, x2);
- }
- }
- // this should *never* happen but if it does it means a case above is wrong..
-
- // this code is only present for safety sake
- if (g->maxh < g->minh) {
- if (debug_on) {
- fprintf(stderr, "assert failed minh > maxh\n"); fflush(stderr);
- // stop();
- }
- g->maxh = g->minh;
- }
- if (g->maxv < g->minv) {
- if (debug_on) {
- fprintf(stderr, "assert failed minv > maxv\n"); fflush(stderr);
- // stop();
- }
- g->maxv = g->minv;
- }
-}
-
-void page::add_arc (int code, int xc, int yc, int *p, double *c, int size, int fill)
-{
- graphic_glob *g = new graphic_glob(code);
-
- g->point = (struct xycoord *)malloc(sizeof(xycoord)*2);
- g->nopoints = 2;
- g->point[0].x = p[0] ;
- g->point[0].y = p[1] ;
- g->point[1].x = p[2] ;
- g->point[1].y = p[3] ;
- g->xc = xc;
- g->yc = yc;
- g->size = size;
- g->fill = fill;
-
- assign_min_max_for_arc(g, p, c);
-
- if (is_in_graphic) {
- region_lines.add(g);
- } else {
- lines.add(g);
- }
-}
-
-
-void page::add_polygon (int code, int np, int *p, int oh, int ov, int size, int fill)
-{
- graphic_glob *g = new graphic_glob(code);
- int j = 0;
- int i;
-
- g->point = (struct xycoord *)malloc(sizeof(xycoord)*np/2);
- g->nopoints = np/2;
-
- for (i=0; i<g->nopoints; i++) {
- g->point[i].x = p[j];
- j++;
- g->point[i].y = p[j];
- j++;
- }
- // now calculate min/max
- g->minh = g->point[0].x;
- g->minv = g->point[0].y;
- g->maxh = g->point[0].x;
- g->maxv = g->point[0].y;
- for (i=1; i<g->nopoints; i++) {
- g->minh = min(g->minh, g->point[i].x);
- g->minv = min(g->minv, g->point[i].y);
- g->maxh = max(g->maxh, g->point[i].x);
- g->maxv = max(g->maxv, g->point[i].y);
- }
- g->size = size;
- g->xc = oh;
- g->yc = ov;
- g->fill = fill;
-
- if (is_in_graphic) {
- region_lines.add(g);
- } else {
- lines.add(g);
- }
-}
-
-void page::add_spline (int code, int xc, int yc, int np, int *p, int size, int fill)
-{
- graphic_glob *g = new graphic_glob(code);
- int j = 0;
- int i;
-
- g->point = (struct xycoord *)malloc(sizeof(xycoord)*np/2);
- g->nopoints = np/2;
-
- for (i=0; i<g->nopoints; i++) {
- g->point[i].x = p[j];
- j++;
- g->point[i].y = p[j];
- j++;
- }
- // now calculate min/max
- g->minh = min(g->point[0].x, g->point[0].x/2);
- g->minv = min(g->point[0].y, g->point[0].y/2);
- g->maxh = max(g->point[0].x, g->point[0].x/2);
- g->maxv = max(g->point[0].y, g->point[0].y/2);
-
- /* 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 (i=1; i<g->nopoints-1; i++) {
- g->minh = min(g->minh, g->point[i].x*tnum/(2*tden));
- g->minv = min(g->minv, g->point[i].y*tnum/(2*tden));
- g->maxh = max(g->maxh, g->point[i].x*tnum/(2*tden));
- g->maxv = max(g->maxv, g->point[i].y*tnum/(2*tden));
-
- g->minh = min(g->minh, g->point[i].x/2+(g->point[i+1].x*(tden-tden))/(2*tden));
- g->minv = min(g->minv, g->point[i].y/2+(g->point[i+1].y*(tden-tden))/(2*tden));
- g->maxh = max(g->maxh, g->point[i].x/2+(g->point[i+1].x*(tden-tden))/(2*tden));
- g->maxv = max(g->maxv, g->point[i].y/2+(g->point[i+1].y*(tden-tden))/(2*tden));
-
- g->minh = min(g->minh, (g->point[i].x-g->point[i].x/2) + g->point[i+1].x/2);
- g->minv = min(g->minv, (g->point[i].y-g->point[i].y/2) + g->point[i+1].y/2);
- g->maxh = max(g->maxh, (g->point[i].x-g->point[i].x/2) + g->point[i+1].x/2);
- g->maxv = max(g->maxv, (g->point[i].y-g->point[i].y/2) + g->point[i+1].y/2);
- }
- i = g->nopoints-1;
-
- g->minh = min(g->minh, (g->point[i].x-g->point[i].x/2)) + xc;
- g->minv = min(g->minv, (g->point[i].y-g->point[i].y/2)) + yc;
- g->maxh = max(g->maxh, (g->point[i].x-g->point[i].x/2)) + xc;
- g->maxv = max(g->maxv, (g->point[i].y-g->point[i].y/2)) + yc;
-
- g->size = size;
- g->xc = xc;
- g->yc = yc;
- g->fill = fill;
-
- if (is_in_graphic) {
- region_lines.add(g);
- } else {
- lines.add(g);
- }
-}
-
-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;
- char text[MAX_STRING_LENGTH];
-};
-
-
-title_desc::title_desc ()
- : has_been_written(FALSE), has_been_found(FALSE)
-{
-}
-
-title_desc::~title_desc ()
-{
-}
-
-class header_desc {
-public:
- header_desc ();
- ~header_desc ();
-
- int no_of_headings; // how many headings have we found?
- char_buffer headings; // all the headings used in the document
- ordered_list <text_glob> headers;
- int header_level; // current header level
- int written_header; // have we written the header yet?
- char header_buffer[MAX_STRING_LENGTH]; // current header text
-
- void write_headings (FILE *f);
-};
-
-header_desc::header_desc ()
- : no_of_headings(0), header_level(2), written_header(0)
-{
-}
-
-header_desc::~header_desc ()
-{
-}
-
-/*
- * paragraph_type - alignment for a new paragraph
- */
-
-typedef enum { left_alignment, center_alignment } paragraph_type;
-
-/*
- * text_defn - defines the limit of text, initially these are stored in the
- * column array as words. Later we examine the white space between
- * the words in successive lines to find out whether we can detect
- * distinct columns. The columns are generated via html tables.
- */
-
-struct text_defn {
- int left; // the start of a word or text
- int right; // the end of the text and beginning of white space
- int is_used; // will this this column be used for words or space
- int right_hits; // count of the number of words touching right position
- int percent; // what percentage width should we use for this cell?
-};
-
-/*
- * introduce a paragraph class so that we can nest paragraphs
- * from plain html text and html tables.
- */
-
-class html_paragraph {
-public:
- html_paragraph (int in, int need, paragraph_type type, html_paragraph *prev);
- ~html_paragraph ();
-
- int in_paragraph;
- int need_paragraph;
- paragraph_type para_type;
- html_paragraph *previous;
-};
-
-/*
- * html_paragraph - constructor, fill in the public fields.
- */
-
-html_paragraph::html_paragraph (int in, int need, paragraph_type type, html_paragraph *prev)
- : in_paragraph(in), need_paragraph(need),
- para_type(type), previous(prev)
-{
-}
-
-/*
- * html_paragraph - deconstructor
- */
-
-html_paragraph::~html_paragraph ()
-{
-}
-
-/*
- * note that html_tables are currently only used to provide a better
- * indentation mechanism for html text (in particular it allows grohtml
- * to render .IP and .2C together with autoformatting).
- */
-
-class html_table {
-public:
- html_table ();
- ~html_table ();
-
- int no_of_columns; // how many columns are we using?
- struct text_defn *columns; // left and right margins for each column
- int vertical_limit; // the limit of the table
- int wrap_margin; // is the current rightmost margin able to wrap words?
-};
-
-html_table::html_table ()
- : no_of_columns(0), columns(0), vertical_limit(0), wrap_margin(0)
-{
-}
-
-html_table::~html_table ()
-{
-}
-
-class html_printer : public printer {
- FILE *tempfp;
- simple_output html;
- simple_output troff;
- int res;
- int postscript_res;
- int space_char_index;
- int no_of_printed_pages;
- int paper_length;
- enum { SBUF_SIZE = 8192 };
- char sbuf[SBUF_SIZE];
- int sbuf_len;
- int sbuf_start_hpos;
- int sbuf_vpos;
- int sbuf_end_hpos;
- int sbuf_kern;
- style sbuf_style;
- int sbuf_dmark_hpos;
- style output_style;
- int output_hpos;
- int output_vpos;
- int output_draw_point_size;
- int line_thickness;
- int output_line_thickness;
- int fill;
- unsigned char output_space_code;
- string defs;
- char *inside_font_style;
- int page_number;
- title_desc title;
- header_desc header;
- int header_indent;
- page *page_contents;
- html_table indentation;
- int left_margin_indent;
- int right_margin_indent;
- int need_one_newline;
- int issued_newline;
- html_paragraph *current_paragraph;
- char image_name[MAX_STRING_LENGTH];
- int image_number;
- int graphic_level;
- int supress_sub_sup;
-
- int start_region_vpos;
- int start_region_hpos;
- int end_region_vpos;
- int end_region_hpos;
- int cutoff_heading;
-
- struct graphic_glob *start_graphic;
- struct text_glob *start_text;
-
- 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 change_font (text_glob *g, int is_to_html);
- void terminate_current_font (void);
- void flush_font (void);
- void flush_page (void);
- void add_char_to_sbuf (unsigned char code);
- void add_to_sbuf (char code, const char *name);
- void display_word (text_glob *g, int is_to_html);
- void html_display_word (text_glob *g);
- void troff_display_word (text_glob *g);
- void display_line (graphic_glob *g, int is_to_html);
- void display_fill (graphic_glob *g);
- void calculate_margin (void);
- void traverse_page_regions (void);
- void dump_page (void);
- int is_within_region (graphic_glob *g);
- int is_within_region (text_glob *t);
- int is_less (graphic_glob *g, text_glob *t);
- void display_globs (int is_to_html);
- void move_horizontal (text_glob *g, int left_margin);
- void move_vertical (text_glob *g, paragraph_type p);
- void write_html_font_face (const char *fontname, const char *left, const char *right);
- void write_html_font_type (const char *fontname, const char *left, const char *right);
- void html_change_font (text_glob *g, const char *fontname, int size);
- char *html_position_text (text_glob *g, int left_margin, int right_margin);
- int html_position_region (void);
- void troff_change_font (const char *fontname, int size, int font_no);
- void troff_position_text (text_glob *g);
- int pretend_is_on_same_line (text_glob *g, int left_margin, int right_margin);
- int is_on_same_line (text_glob *g, int vpos);
- int looks_like_subscript (text_glob *g);
- int looks_like_superscript (text_glob *g);
- int looks_like_smaller_font (text_glob *g);
- int looks_like_larger_font (text_glob *g);
- void begin_paragraph (paragraph_type p);
- void begin_paragraph_no_height (paragraph_type p);
- void force_begin_paragraph (void);
- void end_paragraph (void);
- void save_paragraph (void);
- void restore_paragraph (void);
- void html_newline (void);
- void convert_to_image (char *troff_src, char *image_name);
- void write_title (int in_head);
- void find_title (void);
- int is_bold (text_glob *g);
- void write_header (text_glob *g);
- void determine_header_level (void);
- void build_header (text_glob *g);
- void make_html_indent (int indent);
- int is_whole_line_bold (text_glob *g);
- int is_a_header (text_glob *g);
- int processed_header (text_glob *g);
- void make_new_image_name (void);
- void calculate_region_margins (region_glob *r);
- void remove_redundant_regions (void);
- void remove_duplicate_regions (void);
- void move_region_to_page (void);
- void calculate_region_range (graphic_glob *r);
- void flush_graphic (void);
- void write_string (graphic_glob *g, int is_to_html);
- void prologue (void);
- int gs_x (int x);
- int gs_y (int y);
- void display_regions (void);
- int check_able_to_use_table (text_glob *g);
- int using_table_for_indent (void);
- int collect_columns (struct text_defn *next_words, struct text_defn *next_cols,
- struct text_defn *last_words, struct text_defn *last_cols,
- int max_words);
- void include_into_list (struct text_defn *line, struct text_defn *item);
- int is_in_column (struct text_defn *line, struct text_defn *item, int max_words);
- int is_column_match (struct text_defn *match, struct text_defn *line1,
- struct text_defn *line2, int max_words);
- int count_columns (struct text_defn *line);
- void rewind_text_to (text_glob *g);
- int found_use_for_table (text_glob *start);
- void column_display_word (int cell, int vert, int left, int right, int next);
- void start_table (void);
- void end_table (void);
- void foreach_column_include_text (text_glob *start);
- void define_cell (int i);
- int column_calculate_left_margin (int left, int right);
- int column_calculate_right_margin (int left, int right);
- void display_columns (const char *word, const char *name, text_defn *line);
- void calculate_right (struct text_defn *line, int max_words);
- void determine_right_most_column (struct text_defn *line, int max_words);
- int remove_white_using_words (struct text_defn *next_guess, struct text_defn *last_guess, struct text_defn *next_line);
- void copy_line (struct text_defn *dest, struct text_defn *src);
- void combine_line (struct text_defn *dest, struct text_defn *src);
- int conflict_with_words (struct text_defn *column_guess, struct text_defn *words);
- void remove_entry_in_line (struct text_defn *line, int j);
- void remove_redundant_columns (struct text_defn *line);
- void add_column_gaps (struct text_defn *line);
- int continue_searching_column (text_defn *next_col, text_defn *last_col, text_defn *all_words);
- void add_right_full_width (struct text_defn *line, int mingap);
- int is_continueous_column (text_defn *last_col, text_defn *next_line);
- int is_exact_left (text_defn *last_col, text_defn *next_line);
- int find_column_index_in_line (text_glob *t, text_defn *line);
- void emit_space (text_glob *g, int force_space);
- int is_in_middle (int left, int right);
- int check_able_to_use_center (text_glob *g);
- void write_centered_line (text_glob *g);
- int single_centered_line (text_defn *first, text_defn *second, text_glob *g);
- int determine_row_limit (text_glob *start, int v);
- void assign_used_columns (text_glob *start);
- int find_column_index (text_glob *t);
- int large_enough_gap (text_defn *last_col);
- int is_worth_column (int left, int right);
- int is_subset_of_columns (text_defn *a, text_defn *b);
- void count_hits (text_defn *col, int no_of_columns, int limit);
- void count_right_hits (text_defn *col, int no_of_columns);
- int calculate_min_gap (text_glob *g);
- int right_indentation (struct text_defn *last_guess);
- void calculate_percentage_width (text_glob *start);
- int able_to_steal_width (void);
- int need_to_steal_width (void);
- int can_distribute_fairly (void);
- void utilize_round_off (void);
- int will_wrap_text (int i, text_glob *start);
- int next_line_on_left_column (int i, text_glob *start);
- void remove_table_column (int i);
- void remove_unnecessary_unused (text_glob *start);
- int is_small_table (int lines, struct text_defn *last_guess,
- struct text_defn *words_1, struct text_defn *cols_1,
- struct text_defn *words_2, struct text_defn *cols_2,
- int *limit, int *limit_1);
- int is_column_subset (struct text_defn *cols_1, struct text_defn *cols_2);
- int is_appropriate_to_start_table (struct text_defn *cols_1, struct text_defn *cols_2,
- struct text_defn *last_guess);
- int is_a_full_width_column (void);
- int right_most_column (struct text_defn *col);
- int large_enough_gap_for_two (struct text_defn *col);
- void remove_zero_percentage_column (void);
- void translate_to_html (text_glob *g);
- int html_knows_about (char *troff);
- void determine_diacritical_mark (const char *name, const environment *env);
- int sbuf_continuation (unsigned char code, const char *name, const environment *env, int w);
- char *remove_last_char_from_sbuf ();
- const char *check_diacritical_combination (unsigned char code, const char *name);
- int seen_backwards_escape (char *s, int l);
- int should_defer_table (int lines, struct text_glob *start, struct text_defn *cols_1);
- int is_new_exact_right (struct text_defn *last_guess, struct text_defn *last_cols, struct text_defn *next_cols);
- void issue_left_paragraph (void);
- void adjust_margin_percentages (void);
- int total_percentages (void);
- int get_left (void);
- void can_loose_column (text_glob *start, struct text_defn *last_guess, int limit);
- int check_lack_of_hits (struct text_defn *next_guess, struct text_defn *last_guess, text_glob *start, int limit);
- int is_in_table (void);
-
- // ADD HERE
-
-public:
- html_printer();
- ~html_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);
- font *make_font(const char *);
- void end_of_line();
-};
-
-html_printer::html_printer()
-: html(0, MAX_LINE_LENGTH),
- troff(0, MAX_LINE_LENGTH),
- no_of_printed_pages(0),
- sbuf_len(0),
- sbuf_dmark_hpos(-1),
- output_hpos(-1),
- output_vpos(-1),
- line_thickness(-1),
- fill(FILL_MAX + 1),
- inside_font_style(0),
- page_number(0),
- header_indent(-1),
- left_margin_indent(0),
- right_margin_indent(0),
- need_one_newline(0),
- issued_newline(0),
- image_number(0),
- graphic_level(0),
- supress_sub_sup(TRUE),
- start_region_vpos(0),
- start_region_hpos(0),
- end_region_vpos(0),
- end_region_hpos(0),
- cutoff_heading(100)
-{
- tempfp = xtmpfile();
- html.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 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");
- paper_length = font::paperlength;
- if (paper_length == 0)
- paper_length = 11*font::res;
- page_contents = new page;
-
- postscript_res = 72000;
- current_paragraph = new html_paragraph(FALSE, FALSE, left_alignment, 0);
-}
-
-/*
- * add_char_to_sbuf - adds a single character to the sbuf.
- */
-
-void html_printer::add_char_to_sbuf (unsigned char code)
-{
- if (sbuf_len < SBUF_SIZE) {
- sbuf[sbuf_len] = code;
- sbuf_len++;
- } else {
- fatal("need to increase SBUF_SIZE");
- }
-}
-
-/*
- * add_to_sbuf - adds character code or name to the sbuf.
- * It escapes \ with \\
- * We need to preserve the name of characters if they exist
- * because we may need to send this character to two different
- * devices: html and postscript.
- */
-
-void html_printer::add_to_sbuf (char code, const char *name)
-{
- if (name == 0) {
- if (code == '\\') {
- add_char_to_sbuf('\\');
- }
- add_char_to_sbuf(code);
- } else {
- int l=strlen(name);
- int i=0;
-
- add_char_to_sbuf('\\');
- add_char_to_sbuf('(');
- while (i<l) {
- if (name[i] == '\\') {
- add_char_to_sbuf('\\');
- }
- add_char_to_sbuf(name[i]);
- i++;
- }
- add_char_to_sbuf('\\');
- add_char_to_sbuf(')');
- }
-}
-
-int html_printer::sbuf_continuation (unsigned char code, const char *name,
- const environment *env, int w)
-{
- if ((sbuf_end_hpos == env->hpos) || (sbuf_dmark_hpos == env->hpos)) {
- name = check_diacritical_combination(code, name);
- add_to_sbuf(code, name);
- determine_diacritical_mark(name, env);
- sbuf_end_hpos += w + sbuf_kern;
- return( TRUE );
- } else {
- if ((sbuf_len < SBUF_SIZE-1) && (env->hpos >= sbuf_end_hpos) &&
- ((sbuf_kern == 0) || (sbuf_end_hpos - sbuf_kern != env->hpos))) {
- /*
- * lets see whether a space is needed or not
- */
- int space_width = sbuf_style.f->get_space_width(sbuf_style.point_size);
-
- if (env->hpos-sbuf_end_hpos < space_width) {
- name = check_diacritical_combination(code, name);
- add_to_sbuf(code, name);
- determine_diacritical_mark(name, env);
- sbuf_end_hpos = env->hpos + w;
- return( TRUE );
- }
- } else if ((sbuf_len > 0) && (sbuf_dmark_hpos)) {
- /*
- * check whether the diacritical mark is on the same character
- */
- int space_width = sbuf_style.f->get_space_width(sbuf_style.point_size);
-
- if (abs(sbuf_dmark_hpos-env->hpos) < space_width) {
- name = check_diacritical_combination(code, name);
- add_to_sbuf(code, name);
- determine_diacritical_mark(name, env);
- sbuf_end_hpos = env->hpos + w;
- return( TRUE );
- }
- }
- }
- return( FALSE );
-}
-
-/*
- * seen_backwards_escape - returns TRUE if we can see a escape at position i..l in s
- */
-
-int html_printer::seen_backwards_escape (char *s, int l)
-{
- /*
- * this is tricky so it is broken into components for clarity
- * (we let the compiler put in all back into a complex expression)
- */
- if ((l>0) && (sbuf[l] == '(') && (sbuf[l-1] == '\\')) {
- /*
- * ok seen '\(' but we must now check for '\\('
- */
- if ((l>1) && (sbuf[l-2] == '\\')) {
- /*
- * escaped the escape
- */
- return( FALSE );
- } else {
- return( TRUE );
- }
- } else {
- return( FALSE );
- }
-}
-
-/*
- * reverse - return reversed string.
- */
-
-char *reverse (char *s)
-{
- int i=0;
- int j=strlen(s)-1;
- char t;
-
- while (i<j) {
- t = s[i];
- s[i] = s[j];
- s[j] = t;
- i++;
- j--;
- }
- return( s );
-}
-
-/*
- * remove_last_char_from_sbuf - removes the last character from sbuf.
- */
-
-char *html_printer::remove_last_char_from_sbuf ()
-{
- int l=sbuf_len;
- static char last[MAX_STRING_LENGTH];
-
- if (l>0) {
- l--;
- if ((sbuf[l] == ')') && (l>0) && (sbuf[l-1] == '\\')) {
- /*
- * found terminating escape
- */
- int i=0;
-
- l -= 2;
- while ((l>0) && (! seen_backwards_escape(sbuf, l))) {
- if (sbuf[l] == '\\') {
- if (sbuf[l-1] == '\\') {
- last[i] = sbuf[l];
- i++;
- l--;
- }
- } else {
- last[i] = sbuf[l];
- i++;
- }
- l--;
- }
- last[i] = (char)0;
- sbuf_len = l;
- if (seen_backwards_escape(sbuf, l)) {
- sbuf_len--;
- }
- return( reverse(last) );
- } else {
- if ((sbuf[l] == '\\') && (l>0) && (sbuf[l-1] == '\\')) {
- l -= 2;
- sbuf_len = l;
- return( "\\" );
- } else {
- sbuf_len--;
- last[0] = sbuf[sbuf_len];
- last[1] = (char)0;
- return( last );
- }
- }
- } else {
- return( NULL );
- }
-}
-
-/*
- * check_diacriticial_combination - checks to see whether the character code
- * if combined with the previous diacriticial mark
- * forms a new character.
- */
-
-const char *html_printer::check_diacritical_combination (unsigned char code, const char *name)
-{
- static char troff_char[2];
-
- if ((name == 0) && (sbuf_dmark_hpos >= 0)) {
- // last character was a diacritical mark
- char *last = remove_last_char_from_sbuf();
-
- int i=0;
- int j;
-
- while (diacritical_table[i].mark != NULL) {
- if (strcmp(diacritical_table[i].mark, last) == 0) {
- j=0;
- while ((diacritical_table[i].second_troff_char[j] != (char)0) &&
- (diacritical_table[i].second_troff_char[j] != code)) {
- j++;
- }
- if (diacritical_table[i].second_troff_char[j] == code) {
- troff_char[0] = diacritical_table[i].translation;
- troff_char[1] = code;
- troff_char[2] = (char)0;
- return( troff_char );
- }
- }
- i++;
- }
- add_to_sbuf(last[0], last);
- }
- return( name );
-}
-
-/*
- * determine_diacritical_mark - if name is a diacriticial mark the record the position.
- * --fixme-- is there a better way of doing this
- * this must be done in troff somewhere.
- */
-
-void html_printer::determine_diacritical_mark (const char *name, const environment *env)
-{
- if (name != 0) {
- int i=0;
-
- while (diacritical_table[i].mark != NULL) {
- if (strcmp(name, diacritical_table[i].mark) == 0) {
- sbuf_dmark_hpos = env->hpos;
- return;
- }
- i++;
- }
- }
- sbuf_dmark_hpos = -1;
-}
-
-/*
- * 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)
-{
- unsigned char code = f->get_code(i);
-
-#if 0
- if (code == ' ') {
- stop();
- }
-#endif
- style sty(f, env->size, env->height, env->slant, env->fontno);
- if (sty.slant != 0) {
- if (sty.slant > 80 || sty.slant < -80) {
- error("silly slant `%1' degrees", sty.slant);
- sty.slant = 0;
- }
- }
- if ((name != 0) && (page_contents->is_in_graphic)) {
- flush_sbuf();
- int r=font::res; // resolution of the device
- page_contents->add_special_char(&sty, (char *)name, strlen(name),
- env->vpos-sty.point_size*r/72, env->hpos,
- env->vpos , env->hpos+w);
- sbuf_end_hpos = env->hpos + w;
- sbuf_start_hpos = env->hpos;
- sbuf_vpos = env->vpos;
- sbuf_style = sty;
- sbuf_kern = 0;
- } else {
- if ((sbuf_len > 0) && (sbuf_len < SBUF_SIZE) && (sty == sbuf_style) &&
- (sbuf_vpos == env->vpos) && (sbuf_continuation(code, name, env, w))) {
- return;
- } else {
- flush_sbuf();
- sbuf_len = 0;
- add_to_sbuf(code, name);
- determine_diacritical_mark(name, env);
- sbuf_end_hpos = env->hpos + w;
- sbuf_start_hpos = env->hpos;
- sbuf_vpos = env->vpos;
- sbuf_style = sty;
- sbuf_kern = 0;
- }
- }
-}
-
-/*
- * file_name_max - return the maximum file-name length permitted
- * by the underlying filesystem.
- *
- * (Code shamelessly stolen from indxbib/dirnamemax.c.)
- */
-
-static size_t
-file_name_max (const char *fname)
-{
-#ifdef _POSIX_VERSION
- return pathconf (fname, _PC_NAME_MAX);
-#else
- return NAME_MAX;
-#endif
-}
-
-
-/*
- * make_new_image_name - creates a new file name ready for a image file.
- */
-
-void html_printer::make_new_image_name (void)
-{
- image_number++;
-
- if ((current_filename == 0) ||
- (strcmp(current_filename, "<standard input>") == 0) ||
- (strcmp(current_filename, "-") == 0) ||
- (strcspn(current_filename, DIR_SEPS) < strlen(current_filename))) {
- if (file_name_max(".") > 14)
- sprintf(image_name, "groff-html-%d-%ld", image_number, (long)getpid());
- else
- // The "-gh" part might be truncated on MS-DOS, but there's enough
- // space for the PID and up to 99 image numbers. That's why "-gh"
- // comes last.
- sprintf(image_name, "%d-%ld-gh", image_number, (long)getpid());
- } else if (file_name_max(".") > 14) {
- sprintf(image_name, "%s-%d-%ld", current_filename, image_number, (long)getpid());
- } else { // see the commentary above
- sprintf(image_name, "%d-%ld-%s",
- image_number, (long)getpid(), current_filename);
- // Make sure image_name does not have a dot in its trunk, since
- // convert_to_image will append .gif or .png to it, and DOS doesn't
- // allow more than a single dot in a file name.
- int i = strlen(image_name);
- for ( ; i > 0; i--) {
- if (strchr(DIR_SEPS, image_name[i - 1]))
- break;
- if (image_name[i - 1] == '.') {
- image_name[i - 1] = '\0';
- break;
- }
- }
- }
-}
-
-/*
- * 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>\n");
- } else {
- title.has_been_written = TRUE;
- html.put_string("<h1 align=center>");
- html.put_string(title.text);
- html.put_string("</h1>\n");
- }
- }
-}
-
-/*
- * 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, char *name)
-{
- int index;
-
- if ((f == 0) || (name == 0) || (strcmp(name, "") == 0)) {
- return( NULL );
- } else {
- index = f->name_to_index(name);
- if (index == 0) {
- error("character `%s' not found", name);
- return( NULL );
- } else {
- return( (char *)f->get_special_device_encoding(index) );
- }
- }
-}
-
-/*
- * str_translate_to_html - converts a string, str, into html text. It places
- * the output input buffer, buf. It truncates string, str, if
- * there is not enough space in buf.
- * It looks up the html character encoding of single characters
- * if, and_single, is TRUE. Characters such as < > & etc.
- */
-
-void str_translate_to_html (font *f, char *buf, int buflen, char *str, int len, int and_single)
-{
- int l;
- char *translation;
- int e;
- char escaped_char[MAX_STRING_LENGTH];
- int i=0;
- int b=0;
- int t=0;
-
-#if 0
- if (strcmp(str, "\\(\\\\-\\)") == 0) {
- stop();
- }
-#endif
- while (str[i] != (char)0) {
- if ((str[i]=='\\') && (i+1<len)) {
- i++; // skip the leading backslash
- if (str[i] == '(') {
- // start of escape
- i++;
- e = 0;
- while ((str[i] != (char)0) &&
- (! ((str[i] == '\\') && (i+1<len) && (str[i+1] == ')')))) {
- if (str[i] == '\\') {
- i++;
- }
- escaped_char[e] = str[i];
- e++;
- i++;
- }
- if ((str[i] == '\\') && (i+1<len) && (str[i+1] == ')')) {
- i += 2;
- }
- escaped_char[e] = (char)0;
- if (e > 0) {
- translation = get_html_translation(f, escaped_char);
- if (translation) {
- l = strlen(translation);
- t = max(0, min(l, buflen-b));
- strncpy(&buf[b], translation, t);
- b += t;
- } else {
- int index=f->name_to_index(escaped_char);
-
- if (index != 0) {
- buf[b] = f->get_code(index);
- b++;
- }
- }
- }
- }
- } else {
- if (and_single) {
- char name[2];
-
- name[0] = str[i];
- name[1] = (char)0;
- translation = get_html_translation(f, name);
- if (translation) {
- l = strlen(translation);
- t = max(0, min(l, buflen-b));
- strncpy(&buf[b], translation, t);
- b += t;
- } else {
- if (b<buflen) {
- buf[b] = str[i];
- b++;
- }
- }
- } else {
- /*
- * do not attempt to encode single characters
- */
- if (b<buflen) {
- buf[b] = str[i];
- b++;
- }
- }
- i++;
- }
- }
- buf[min(b, buflen)] = (char)0;
-}
-
-/*
- * find_title - finds a title to this document, if it exists.
- */
-
-void html_printer::find_title (void)
-{
- text_glob *t;
- int r=font::res;
- int removed_from_head;
- char buf[MAX_STRING_LENGTH];
-
- if ((page_number == 1) && (guess_on)) {
- if (! page_contents->words.is_empty()) {
-
- int end_title_hpos = 0;
- int start_title_vpos = 0;
- int found_title_start = FALSE;
- int height = 0;
- int start_region =-1;
-
- if (! page_contents->regions.is_empty()) {
- region_glob *r;
-
- page_contents->regions.start_from_head();
- r = page_contents->regions.get_data();
- if (r->minv > 0) {
- start_region = r->minv;
- }
- }
-
- page_contents->words.start_from_head();
- do {
- t = page_contents->words.get_data();
- removed_from_head = FALSE;
- if ((found_title_start) && (start_region != -1) && (t->maxv >= start_region)) {
- /*
- * we have just encountered the first graphic region so
- * we stop looking for a title.
- */
- title.has_been_found = TRUE;
- return;
- } else if (t->is_raw_command) {
- // skip raw commands
- page_contents->words.move_right(); // move onto next word
- } else if ((!found_title_start) && (t->minh > left_margin_indent) &&
- ((start_region == -1) || (t->maxv < start_region))) {
- start_title_vpos = t->minv;
- end_title_hpos = t->minh;
- str_translate_to_html(t->text_style.f, buf, MAX_STRING_LENGTH, t->text_string, t->text_length, TRUE);
- strcpy((char *)title.text, buf);
- height = t->text_style.point_size*r/72;
- found_title_start = TRUE;
- page_contents->words.sub_move_right();
- removed_from_head = ((!page_contents->words.is_empty()) &&
- (page_contents->words.is_equal_to_head()));
- } else if (found_title_start) {
- if ((t->minv == start_title_vpos) ||
- ((!more_than_line_break(start_title_vpos, t->minv, (height*3)/2)) &&
- (t->minh > left_margin_indent)) ||
- (is_bold(t) && (t->minh > left_margin_indent))) {
- start_title_vpos = min(t->minv, start_title_vpos);
- end_title_hpos = max(t->maxh, end_title_hpos);
- strcat(title.text, " ");
- str_translate_to_html(t->text_style.f, buf, MAX_STRING_LENGTH, t->text_string, t->text_length, TRUE);
- strcat(title.text, buf);
- page_contents->words.sub_move_right();
- removed_from_head = ((!page_contents->words.is_empty()) &&
- (page_contents->words.is_equal_to_head()));
- } else {
- // end of title
- title.has_been_found = TRUE;
- return;
- }
- } else if (t->minh <= left_margin_indent) {
- // no margin exists
- return;
- } else {
- // move onto next word
- page_contents->words.move_right();
- }
- } while ((! page_contents->words.is_equal_to_head()) || (removed_from_head));
- }
- }
-}
-
-/*
- * html_newline - generates a newline <br>
- */
-
-void html_printer::html_newline (void)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- if (current_paragraph->in_paragraph) {
- // safe to generate a pretty newline
- html.put_string("<br>\n");
- } else {
- html.put_string("<br>");
- }
- output_vpos += height;
- issued_newline = TRUE;
-}
-
-/*
- * issue_left_paragraph - emits a left paragraph together with appropriate
- * margin if header_indent is < left_margin_indent.
- */
-
-void html_printer::issue_left_paragraph (void)
-{
- if ((header_indent < left_margin_indent) && (! using_table_for_indent())) {
- html.put_string("<p style=\"margin-left: ");
- html.put_number(((left_margin_indent-header_indent)*100)/(right_margin_indent-header_indent));
- html.put_string("%\">");
- } else {
- html.put_string("<p>");
- }
-}
-
-/*
- * force_begin_paragraph - force the begin_paragraph to be emitted.
- */
-
-void html_printer::force_begin_paragraph (void)
-{
- if (current_paragraph->in_paragraph && current_paragraph->need_paragraph) {
- switch (current_paragraph->para_type) {
-
- case left_alignment: issue_left_paragraph();
- break;
- case center_alignment: html.put_string("<p align=center>");
- break;
- default: fatal("unknown paragraph alignment type");
- }
- current_paragraph->need_paragraph = FALSE;
- }
-}
-
-/*
- * begin_paragraph - starts a new paragraph. It does nothing if a paragraph
- * has already been started.
- */
-
-void html_printer::begin_paragraph (paragraph_type p)
-{
- if (! current_paragraph->in_paragraph) {
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- if (output_vpos >=0) {
- // we leave it alone if it is set to the top of page
- output_vpos += height;
- }
- current_paragraph->need_paragraph = TRUE; // delay the <p> just in case we don't actually emit text
- current_paragraph->in_paragraph = TRUE;
- current_paragraph->para_type = p;
- issued_newline = TRUE;
- }
-}
-
-
-/*
- * begin_paragraph_no_height - starts a new paragraph. It does nothing if a paragraph
- * has already been started. Note it does not alter output_vpos.
- */
-
-void html_printer::begin_paragraph_no_height (paragraph_type p)
-{
- if (! current_paragraph->in_paragraph) {
- current_paragraph->need_paragraph = TRUE; // delay the <p> just in case we don't actually emit text
- current_paragraph->in_paragraph = TRUE;
- current_paragraph->para_type = p;
- issued_newline = TRUE;
- }
-}
-
-/*
- * end_paragraph - end the current paragraph. It does nothing if a paragraph
- * has not been started.
- */
-
-void html_printer::end_paragraph (void)
-{
- if (current_paragraph->in_paragraph) {
- // check whether we have generated any text inbetween the potential paragraph begin end
- if (! current_paragraph->need_paragraph) {
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- output_vpos += height;
- terminate_current_font();
- html.put_string("</p>\n");
- } else {
- terminate_current_font();
- }
- current_paragraph->para_type = left_alignment;
- current_paragraph->in_paragraph = FALSE;
- }
-}
-
-/*
- * save_paragraph - saves the current paragraph state and
- * creates new paragraph state.
- */
-
-void html_printer::save_paragraph (void)
-{
- if (current_paragraph == 0) {
- fatal("current_paragraph is NULL");
- }
- current_paragraph = new html_paragraph(current_paragraph->in_paragraph,
- current_paragraph->need_paragraph,
- current_paragraph->para_type,
- current_paragraph);
- terminate_current_font();
-}
-
-/*
- * restore_paragraph - restores the previous paragraph state.
- */
-
-void html_printer::restore_paragraph (void)
-{
- html_paragraph *old = current_paragraph;
-
- current_paragraph = current_paragraph->previous;
- free(old);
-}
-
-/*
- * calculate_margin - runs through the words and graphics globs
- * and finds the start of the left most margin.
- */
-
-void html_printer::calculate_margin (void)
-{
- text_glob *w;
- graphic_glob *g;
-
- // remove margin
-
- right_margin_indent = 0;
-
- if (! page_contents->words.is_empty()) {
-
- // firstly check the words to determine the right margin
-
- page_contents->words.start_from_head();
- do {
- w = page_contents->words.get_data();
- if ((w->maxh >= 0) && (w->maxh > right_margin_indent)) {
- right_margin_indent = w->maxh;
-#if 0
- if (right_margin_indent == 758) stop();
-#endif
- }
- page_contents->words.move_right();
- } while (! page_contents->words.is_equal_to_head());
-
- /*
- * only examine graphics if no words present
- */
- if (! page_contents->lines.is_empty()) {
- // now check for diagrams for right margin
- page_contents->lines.start_from_head();
- do {
- g = page_contents->lines.get_data();
- if ((g->maxh >= 0) && (g->maxh > right_margin_indent)) {
- right_margin_indent = g->maxh;
-#if 0
- if (right_margin_indent == 950) stop();
-#endif
- }
- page_contents->lines.move_right();
- } while (! page_contents->lines.is_equal_to_head());
- }
-
-
- /*
- * now we know the right margin lets do the same to find left margin
- */
-
- if (header_indent == -1) {
- header_indent = right_margin_indent;
- }
- left_margin_indent = right_margin_indent;
-
- if (! page_contents->words.is_empty()) {
- do {
- w = page_contents->words.get_data();
- if ((w->minh >= 0) && (w->minh < left_margin_indent)) {
- if (! is_a_header(w) && (! w->is_raw_command)) {
- left_margin_indent = w->minh;
- }
- }
- page_contents->words.move_right();
- } while (! page_contents->words.is_equal_to_head());
- }
-
- /*
- * only examine graphic for margins if text yields nothing
- */
-
- if (! page_contents->lines.is_empty()) {
- // now check for diagrams
- page_contents->lines.start_from_head();
- do {
- g = page_contents->lines.get_data();
- if ((g->minh >= 0) && (g->minh < left_margin_indent)) {
- left_margin_indent = g->minh;
- }
- page_contents->lines.move_right();
- } while (! page_contents->lines.is_equal_to_head());
- }
- }
-}
-
-/*
- * calculate_region - runs through the graphics globs and text globs
- * and ensures that all graphic routines
- * are defined by the region lists.
- * This then allows us to easily
- * determine the range of vertical and
- * horizontal boundaries for pictures,
- * tbl's and eqn's.
- *
- */
-
-void page::calculate_region (void)
-{
- graphic_glob *g;
-
- if (! lines.is_empty()) {
- lines.start_from_head();
- do {
- g = lines.get_data();
- if (! is_in_region(g)) {
- if (! can_grow_region(g)) {
- make_new_region(g);
- }
- }
- lines.move_right();
- } while (! lines.is_equal_to_head());
- }
-}
-
-/*
- * remove_redundant_regions - runs through the regions and ensures that
- * all are needed. This is required as
- * a picture may be empty, or EQ EN pair
- * maybe empty.
- */
-
-void html_printer::remove_redundant_regions (void)
-{
- region_glob *r;
-
- // firstly run through the region making sure that all are needed
- // ie all contain a line or word
- if (! page_contents->regions.is_empty()) {
- page_contents->regions.start_from_tail();
- do {
- r = page_contents->regions.get_data();
- calculate_region_margins(r);
- if (page_contents->has_line(r) || page_contents->has_word(r)) {
- page_contents->regions.move_right();
- } else {
- page_contents->regions.sub_move_right();
- }
- } while ((! page_contents->regions.is_empty()) &&
- (! page_contents->regions.is_equal_to_tail()));
- }
-}
-
-void html_printer::display_regions (void)
-{
- if (debug_table_on) {
- region_glob *r;
-
- fprintf(stderr, "==========s t a r t===========\n");
- if (! page_contents->regions.is_empty()) {
- page_contents->regions.start_from_head();
- do {
- r = page_contents->regions.get_data();
- fprintf(stderr, "region minv %d maxv %d\n", r->minv, r->maxv);
- page_contents->regions.move_right();
- } while (! page_contents->regions.is_equal_to_head());
- }
- fprintf(stderr, "============e n d=============\n");
- fflush(stderr);
- }
-}
-
-/*
- * remove_duplicate_regions - runs through the regions and ensures that
- * no duplicates exist.
- */
-
-void html_printer::remove_duplicate_regions (void)
-{
- region_glob *r;
- region_glob *l=0;
-
- if (! page_contents->regions.is_empty()) {
- page_contents->regions.start_from_head();
- l = page_contents->regions.get_data();
- page_contents->regions.move_right();
- r = page_contents->regions.get_data();
- if (l != r) {
- do {
- r = page_contents->regions.get_data();
- // we have a legit region so we check for an intersection
- if (is_intersection(r->minv, r->minv, l->minv, l->maxv) &&
- is_intersection(r->minh, r->maxh, l->minh, l->maxh)) {
- l->minv = min(r->minv, l->minv);
- l->maxv = max(r->maxv, l->maxv);
- l->minh = min(r->minh, l->minh);
- l->maxh = max(r->maxh, l->maxh);
- calculate_region_margins(l);
- page_contents->regions.sub_move_right();
- } else {
- l = r;
- page_contents->regions.move_right();
- }
- } while ((! page_contents->regions.is_empty()) &&
- (! page_contents->regions.is_equal_to_head()));
- }
- }
-}
-
-int page::has_line (region_glob *r)
-{
- graphic_glob *g;
-
- if (! lines.is_empty()) {
- lines.start_from_head();
- do {
- g = lines.get_data();
- if (is_subsection(g->minv, g->maxv, r->minv, r->maxv) &&
- is_subsection(g->minh, g->maxh, r->minh, r->maxh)) {
- return( TRUE );
- }
- lines.move_right();
- } while (! lines.is_equal_to_head());
- }
- return( FALSE );
-}
-
-
-int page::has_word (region_glob *r)
-{
- text_glob *g;
-
- if (! words.is_empty()) {
- words.start_from_head();
- do {
- g = words.get_data();
- if (is_subsection(g->minv, g->maxv, r->minv, r->maxv) &&
- is_subsection(g->minh, g->maxh, r->minh, r->maxh)) {
- return( TRUE );
- }
- words.move_right();
- } while (! words.is_equal_to_head());
- }
- return( FALSE );
-}
-
-
-void html_printer::calculate_region_margins (region_glob *r)
-{
- text_glob *w;
- graphic_glob *g;
-
- r->minh = right_margin_indent;
- r->maxh = left_margin_indent;
-
- if (! page_contents->lines.is_empty()) {
- page_contents->lines.start_from_head();
- do {
- g = page_contents->lines.get_data();
- if (is_subsection(g->minv, g->maxv, r->minv, r->maxv)) {
- r->minh = min(r->minh, g->minh);
- r->maxh = max(r->maxh, g->maxh);
- }
- page_contents->lines.move_right();
- } while (! page_contents->lines.is_equal_to_head());
- }
- if (! page_contents->words.is_empty()) {
- page_contents->words.start_from_head();
- do {
- w = page_contents->words.get_data();
- if (is_subsection(w->minv, w->maxv, r->minv, r->maxv)) {
- r->minh = min(r->minh, w->minh);
- r->maxh = max(r->maxh, w->maxh);
- }
- page_contents->words.move_right();
- } while (! page_contents->words.is_equal_to_head());
- }
-}
-
-
-int page::is_in_region (graphic_glob *g)
-{
- region_glob *r;
-
- if (! regions.is_empty()) {
- regions.start_from_head();
- do {
- r = regions.get_data();
- if (is_subsection(g->minv, g->maxv, r->minv, r->maxv) &&
- is_subsection(g->minh, g->maxh, r->minh, r->maxh)) {
- return( TRUE );
- }
- regions.move_right();
- } while (! regions.is_equal_to_head());
- }
- return( FALSE );
-}
-
-
-/*
- * no_raw_commands - returns TRUE if no html raw commands exist between
- * minv and maxv.
- */
-
-int page::no_raw_commands (int minv, int maxv)
-{
- text_glob *g;
-
- if (! words.is_empty()) {
- words.start_from_head();
- do {
- g = words.get_data();
- if ((g->is_raw_command) && (g->is_html_command) &&
- (is_intersection(g->minv, g->maxv, minv, maxv))) {
- return( FALSE );
- }
- words.move_right();
- } while (! words.is_equal_to_head());
- }
- return( TRUE );
-}
-
-/*
- * can_grow_region - returns TRUE if a region exists which can be extended
- * to include graphic_glob *g. The region is extended.
- */
-
-int page::can_grow_region (graphic_glob *g)
-{
- region_glob *r;
- int quarter_inch=font::res/4;
-
- if (! regions.is_empty()) {
- regions.start_from_head();
- do {
- r = regions.get_data();
- // must prevent grohtml from growing a region through a html raw command
- if (is_intersection(g->minv, g->maxv, r->minv, r->maxv+quarter_inch) &&
- (no_raw_commands(r->minv, r->maxv+quarter_inch))) {
-#if defined(DEBUGGING)
- stop();
- printf("r minh=%d minv=%d maxh=%d maxv=%d\n",
- r->minh, r->minv, r->maxh, r->maxv);
- printf("g minh=%d minv=%d maxh=%d maxv=%d\n",
- g->minh, g->minv, g->maxh, g->maxv);
-#endif
- r->minv = min(r->minv, g->minv);
- r->maxv = max(r->maxv, g->maxv);
- r->minh = min(r->minh, g->minh);
- r->maxh = max(r->maxh, g->maxh);
-#if defined(DEBUGGING)
- printf(" r minh=%d minv=%d maxh=%d maxv=%d\n",
- r->minh, r->minv, r->maxh, r->maxv);
-#endif
- return( TRUE );
- }
- regions.move_right();
- } while (! regions.is_equal_to_head());
- }
- return( FALSE );
-}
-
-
-/*
- * make_new_region - creates a new region to contain, g.
- */
-
-void page::make_new_region (graphic_glob *g)
-{
- region_glob *r=new region_glob;
-
- r->minv = g->minv;
- r->maxv = g->maxv;
- r->minh = g->minh;
- r->maxv = g->maxv;
- regions.add(r);
-}
-
-
-void html_printer::dump_page(void)
-{
- text_glob *g;
-
- printf("\n\ndebugging start\n");
- page_contents->words.start_from_head();
- do {
- g = page_contents->words.get_data();
- printf("%s ", g->text_string);
- page_contents->words.move_right();
- } while (! page_contents->words.is_equal_to_head());
- printf("\ndebugging end\n\n");
-}
-
-
-/*
- * traverse_page_regions - runs through the regions in current_page
- * and generate html for text, and troff output
- * for all graphics.
- */
-
-void html_printer::traverse_page_regions (void)
-{
- region_glob *r;
-
- start_region_vpos = 0;
- start_region_hpos = 0;
- end_region_vpos = -1;
- end_region_hpos = -1;
-
- if (! page_contents->regions.is_empty()) {
- page_contents->regions.start_from_head();
- do {
- r = page_contents->regions.get_data();
- if (r->minv > 0) {
- end_region_vpos = r->minv-1;
- } else {
- end_region_vpos = 0;
- }
- end_region_hpos = -1;
- display_globs(TRUE);
- calculate_region_margins(r);
- start_region_vpos = end_region_vpos;
- end_region_vpos = r->maxv;
- start_region_hpos = r->minh;
- end_region_hpos = r->maxh;
- display_globs(FALSE);
- start_region_vpos = end_region_vpos+1;
- start_region_hpos = 0;
- page_contents->regions.move_right();
- } while (! page_contents->regions.is_equal_to_head());
- start_region_vpos = end_region_vpos+1;
- start_region_hpos = 0;
- end_region_vpos = -1;
- end_region_hpos = -1;
- }
- display_globs(TRUE);
-}
-
-int html_printer::is_within_region (text_glob *t)
-{
- int he, ve, hs;
-
- if (start_region_hpos == -1) {
- hs = t->minh;
- } else {
- hs = start_region_hpos;
- }
- if (end_region_vpos == -1) {
- ve = t->maxv;
- } else {
- ve = end_region_vpos;
- }
- if (end_region_hpos == -1) {
- he = t->maxh;
- } else {
- he = end_region_hpos;
- }
- return( is_subsection(t->minv, t->maxv, start_region_vpos, ve) &&
- is_subsection(t->minh, t->maxh, hs, he) );
-}
-
-int html_printer::is_within_region (graphic_glob *g)
-{
- int he, ve, hs;
-
- if (start_region_hpos == -1) {
- hs = g->minh;
- } else {
- hs = start_region_hpos;
- }
- if (end_region_vpos == -1) {
- ve = g->maxv;
- } else {
- ve = end_region_vpos;
- }
- if (end_region_hpos == -1) {
- he = g->maxh;
- } else {
- he = end_region_hpos;
- }
- return( is_subsection(g->minv, g->maxv, start_region_vpos, ve) &&
- is_subsection(g->minh, g->maxh, hs, he) );
-}
-
-int html_printer::is_less (graphic_glob *g, text_glob *t)
-{
- return( (g->minv < t->minv) || ((g->minv == t->minv) && (g->minh < t->minh)) );
-}
-
-void html_printer::convert_to_image (char *troff_src, char *image_name)
-{
- char buffer[MAX_STRING_LENGTH*2 + 200];
- char *ps_src = mktemp(xtmptemplate("-ps-"));
-
- sprintf(buffer, "grops%s %s > %s", EXE_EXT, troff_src, ps_src);
- if (debug_on) {
- fprintf(stderr, "%s\n", buffer);
- }
- int status = system(buffer);
- if (status == -1) {
- fprintf(stderr, "\"%s\" failed (no grops on PATH?)\n", buffer);
- return;
- }
- else if (status) {
- fprintf(stderr, "\"%s\" returned status %d\n", buffer, status);
- }
-
- if (image_type == gif) {
- sprintf(buffer,
- "echo showpage | gs%s -q -dSAFER -sDEVICE=ppmraw -r%d -g%dx%d -sOutputFile=- %s - | ppmquant%s 256 | ppmtogif%s > %s.gif",
- EXE_EXT, image_res,
- (end_region_hpos-start_region_hpos)*image_res/font::res+IMAGE_BOARDER_PIXELS,
- (end_region_vpos-start_region_vpos)*image_res/font::res+IMAGE_BOARDER_PIXELS,
- ps_src, EXE_EXT, EXE_EXT, image_name);
- } else {
- sprintf(buffer,
- "echo showpage | gs%s -q -dSAFER -sDEVICE=%s -r%d -g%dx%d -sOutputFile=- %s - > %s.png",
- EXE_EXT, image_device,
- image_res,
- (end_region_hpos-start_region_hpos)*image_res/font::res+IMAGE_BOARDER_PIXELS,
- (end_region_vpos-start_region_vpos)*image_res/font::res+IMAGE_BOARDER_PIXELS,
- ps_src, image_name);
-#if 0
- sprintf(buffer,
- "echo showpage | gs -q -dSAFER -sDEVICE=ppmraw -r%d -g%dx%d -sOutputFile=- %s.ps - > %s.pnm ; pnmtopng -transparent white %s.pnm > %s.png \n",
- /* image_device, */
- image_res,
- (end_region_hpos-start_region_hpos)*image_res/font::res+IMAGE_BOARDER_PIXELS,
- (end_region_vpos-start_region_vpos)*image_res/font::res+IMAGE_BOARDER_PIXELS,
- name, name, name, image_name);
-#endif
- }
- if (debug_on) {
- fprintf(stderr, "%s\n", buffer);
- }
- // Redirect standard error to the null device. This is more
- // portable than using "2> /dev/null" inside the commands above,
- // since it doesn't require a Unixy shell.
- int save_stderr = dup(2);
- if (save_stderr > 2) {
- int fdnull = open(NULL_DEV, O_WRONLY|O_BINARY, 0666);
- if (fdnull > 2)
- dup2(fdnull, 2);
- if (fdnull >= 0)
- close(fdnull);
- }
- status = system(buffer);
- dup2(save_stderr, 2);
- if (status == -1) {
- fprintf(stderr,
- "Conversion to image failed (no gs/ppmquant/ppmtogif on PATH?)\n");
- }
- else if (status) {
- fprintf(stderr,
- "Conversion to image returned status %d\n", status);
- }
- unlink(ps_src);
- unlink(troff_src);
-}
-
-void html_printer::prologue (void)
-{
- troff.put_string("x T ps\nx res ");
- troff.put_number(postscript_res);
- troff.put_string(" 1 1\nx init\np1\n");
-}
-
-void html_printer::display_globs (int is_to_html)
-{
- text_glob *t=0;
- graphic_glob *g=0;
- FILE *f=0;
- char *troff_src;
- int something=FALSE;
- int is_center=FALSE;
-
- end_paragraph();
-
- if (! is_to_html) {
- is_center = html_position_region();
- make_new_image_name();
- f = xtmpfile(&troff_src, "-troff-", FALSE);
- troff.set_file(f);
- prologue();
- output_style.f = 0;
- }
- if (! page_contents->words.is_empty()) {
- page_contents->words.start_from_head();
- t = page_contents->words.get_data();
- }
-
- if (! page_contents->lines.is_empty()) {
- page_contents->lines.start_from_head();
- g = page_contents->lines.get_data();
- }
-
- do {
-#if 0
- if ((t != 0) && (strcmp(t->text_string, "(1.a)") == 0)) {
- stop();
- }
-#endif
- if ((t == 0) && (g != 0)) {
- if (is_within_region(g)) {
- something = TRUE;
- display_line(g, is_to_html);
- }
- if (page_contents->lines.is_empty() || page_contents->lines.is_equal_to_tail()) {
- g = 0;
- } else {
- g = page_contents->lines.move_right_get_data();
- }
- } else if ((g == 0) && (t != 0)) {
- if (is_within_region(t)) {
- display_word(t, is_to_html);
- something = TRUE;
- }
- if (page_contents->words.is_empty() || page_contents->words.is_equal_to_tail()) {
- t = 0;
- } else {
- t = page_contents->words.move_right_get_data();
- }
- } else {
- if ((g == 0) || (t == 0)) {
- // hmm nothing to print out...
- } else if (is_less(g, t)) {
- if (is_within_region(g)) {
- display_line(g, is_to_html);
- something = TRUE;
- }
- if (page_contents->lines.is_empty() || page_contents->lines.is_equal_to_tail()) {
- g = 0;
- } else {
- g = page_contents->lines.move_right_get_data();
- }
- } else {
- if (is_within_region(t)) {
- display_word(t, is_to_html);
- something = TRUE;
- }
- if (page_contents->words.is_empty() || page_contents->words.is_equal_to_tail()) {
- t = 0;
- } else {
- t = page_contents->words.move_right_get_data();
- }
- }
- }
- } while ((t != 0) || (g != 0));
-
- if ((! is_to_html) && (f != 0)) {
- fclose(troff.get_file());
- if (something) {
- convert_to_image(troff_src, image_name);
-
- if (is_center) {
- end_paragraph();
- begin_paragraph(center_alignment);
- force_begin_paragraph();
- }
- html.put_string("<img src=\"");
- html.put_string(image_name);
- if (image_type == gif) {
- html.put_string(".gif\"");
- } else {
- html.put_string(".png\"");
- }
- html.put_string(">\n");
- html_newline();
- if (is_center) {
- end_paragraph();
- }
-
- output_vpos = end_region_vpos;
- output_hpos = 0;
- need_one_newline = FALSE;
- output_style.f = 0;
- end_paragraph();
- }
- }
-}
-
-void html_printer::flush_page (void)
-{
- calculate_margin();
- output_vpos = -1;
- output_hpos = get_left();
- supress_sub_sup = TRUE;
-#if 0
- dump_page();
-#endif
- html.begin_comment("left margin: ").comment_arg(i_to_a(left_margin_indent)).end_comment();;
- html.begin_comment("right margin: ").comment_arg(i_to_a(right_margin_indent)).end_comment();;
- remove_redundant_regions();
- page_contents->calculate_region();
- remove_duplicate_regions();
- find_title();
- supress_sub_sup = TRUE;
- traverse_page_regions();
- terminate_current_font();
- if (need_one_newline) {
- html_newline();
- }
- end_paragraph();
-
- // move onto a new page
- delete page_contents;
- page_contents = new page;
-}
-
-static int convertSizeToHTML (int size)
-{
- if (size < 6) {
- return( 0 );
- } else if (size < 8) {
- return( 1 );
- } else if (size < 10) {
- return( 2 );
- } else if (size < 12) {
- return( 3 );
- } else if (size < 14) {
- return( 4 );
- } else if (size < 16) {
- return( 5 );
- } else if (size < 18) {
- return( 6 );
- } else {
- return( 7 );
- }
-}
-
-
-void html_printer::write_html_font_face (const char *fontname, const char *left, const char *right)
-{
- switch (fontname[0]) {
-
- case 'C': html.put_string(left) ; html.put_string("tt"); html.put_string(right);
- break;
- case 'H': break;
- case 'T': break;
- default: break;
- }
-}
-
-
-void html_printer::write_html_font_type (const char *fontname, const char *left, const char *right)
-{
- if (strcmp(&fontname[1], "B") == 0) {
- html.put_string(left) ; html.put_string("B"); html.put_string(right);
- } else if (strcmp(&fontname[1], "I") == 0) {
- html.put_string(left) ; html.put_string("I"); html.put_string(right);
- } else if (strcmp(&fontname[1], "BI") == 0) {
- html.put_string(left) ; html.put_string("EM"); html.put_string(right);
- }
-}
-
-
-void html_printer::html_change_font (text_glob *g, const char *fontname, int size)
-{
- char buffer[1024];
-
- if (output_style.f != 0) {
- const char *oldfontname = output_style.f->get_name();
-
- // firstly terminate the current font face and type
- if ((oldfontname != 0) && (oldfontname != fontname)) {
- write_html_font_face(oldfontname, "</", ">");
- write_html_font_type(oldfontname, "</", ">");
- }
- }
-
- if ((output_style.point_size != size) && (output_style.point_size != 0)) {
- // shutdown the previous font size
- html.put_string("</font>");
- }
-
- if ((output_style.point_size != size) && (size != 0)) {
- // now emit the size if it has changed
- sprintf(buffer, "<font size=%d>", convertSizeToHTML(size));
- html.put_string(buffer);
- output_style.point_size = size; // and remember the size
- }
- output_style.f = 0; // no style at present
- output_style.point_size = size; // remember current font size
-
- if (fontname != 0) {
- if (! g->is_raw_command) {
- // now emit the new font
- write_html_font_face(fontname, "<", ">");
-
- // now emit the new font type
- write_html_font_type(fontname, "<", ">");
-
- output_style = g->text_style; // remember style for next time
- }
- }
-}
-
-
-void html_printer::change_font (text_glob *g, int is_to_html)
-{
- if (is_to_html) {
- if (output_style != g->text_style) {
- const char *fontname=0;
- int size=0;
-
- if (g->text_style.f != 0) {
- fontname = g->text_style.f->get_name();
- size = (font::res/(72*font::sizescale))*g->text_style.point_size;
- }
- html_change_font(g, fontname, size);
- }
- } else {
- // is to troff
- if (output_style != g->text_style) {
- if (g->text_style.f != 0) {
- const char *fontname = g->text_style.f->get_name();
- int size = (font::res/(72*font::sizescale))*g->text_style.point_size;
-
- if (fontname == 0) {
- fatal("no internalname specified for font");
- }
-
- troff_change_font(fontname, size, g->text_style.font_no);
- output_style = g->text_style; // remember style for next time
- }
- }
- }
-}
-
-/*
- * is_bold - returns TRUE if the text inside, g, is using a bold face.
- * It returns FALSE is g contains a raw html command, even if this uses
- * a bold font.
- */
-
-int html_printer::is_bold (text_glob *g)
-{
- if (g->text_style.f == 0) {
- // unknown font
- return( FALSE );
- } else if (g->is_raw_command) {
- return( FALSE );
- } else {
- const char *fontname = g->text_style.f->get_name();
-
- if (strlen(fontname) >= 2) {
- return( fontname[1] == 'B' );
- } else {
- return( FALSE );
- }
- }
-}
-
-void html_printer::terminate_current_font (void)
-{
- text_glob g;
-
- // we create a dummy glob just so we can tell html_change_font not to start up
- // a new font
- g.is_raw_command = TRUE;
- html_change_font(&g, 0, 0);
-}
-
-void html_printer::write_header (text_glob *g)
-{
- if (strlen(header.header_buffer) > 0) {
- if (header.header_level > 7) {
- header.header_level = 7;
- }
-
- if (cutoff_heading+2 > header.header_level) {
- // firstly we must terminate any font and type faces
- terminate_current_font();
- end_paragraph();
-
- // secondly we generate a tag
- html.put_string("<a name=\"");
- html.put_string(header.header_buffer);
- html.put_string("\"></a>");
- // now we save the header so we can issue a list of link
- style st;
-
- header.no_of_headings++;
-
- text_glob *h=new text_glob(&st,
- header.headings.add_string(header.header_buffer, strlen(header.header_buffer)),
- strlen(header.header_buffer),
- header.no_of_headings, header.header_level,
- header.no_of_headings, header.header_level,
- FALSE, FALSE);
- header.headers.add(h); // and add this header to the header list
- } else {
- terminate_current_font();
- end_paragraph();
- }
-
- // we adjust the margin if necessary
-
- if (g->minh < left_margin_indent) {
- header_indent = g->minh;
- }
-
- // 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(">");
-
- need_one_newline = FALSE;
- begin_paragraph(left_alignment);
- header.written_header = TRUE;
- }
-}
-
-/*
- * translate_str_to_html - translates a string, str, into html representation.
- * len indicates the string length.
- */
-
-void translate_str_to_html (font *f, char *str, int len)
-{
- char buf[MAX_STRING_LENGTH];
-
- str_translate_to_html(f, buf, MAX_STRING_LENGTH, str, len, TRUE);
- strncpy(str, buf, max(len, strlen(buf)+1));
-}
-
-/*
- * write_headings - emits a list of links for the headings in this document
- */
-
-void header_desc::write_headings (FILE *f)
-{
- text_glob *g;
-
- if (! headers.is_empty()) {
- headers.start_from_head();
- do {
- g = headers.get_data();
- fprintf(f, "<a href=\"#%s\">%s</a><br>\n", g->text_string, g->text_string);
- headers.move_right();
- } while (! headers.is_equal_to_head());
- }
-}
-
-void html_printer::determine_header_level (void)
-{
- int i;
- int l=strlen(header.header_buffer);
- int stops=0;
-
- for (i=0; ((i<l) && ((header.header_buffer[i] == '.') || is_digit(header.header_buffer[i]))) ; i++) {
- if (header.header_buffer[i] == '.') {
- stops++;
- }
- }
- if (stops > 0) {
- header.header_level = stops;
- }
-}
-
-
-void html_printer::build_header (text_glob *g)
-{
- text_glob *l;
- int current_vpos;
- char buf[MAX_STRING_LENGTH];
-
- strcpy(header.header_buffer, "");
- do {
- l = g;
- current_vpos = g->minv;
- str_translate_to_html(g->text_style.f, buf, MAX_STRING_LENGTH, g->text_string, g->text_length, TRUE);
- strcat(header.header_buffer, (char *)buf);
- page_contents->words.move_right();
- g = page_contents->words.get_data();
- if (g->minv == current_vpos) {
- strcat(header.header_buffer, " ");
- }
- } while ((! page_contents->words.is_equal_to_head()) &&
- ((g->minv == current_vpos) || (l->maxh == right_margin_indent)));
-
- determine_header_level();
- // finally set the output to neutral for after the header
-
- g = page_contents->words.get_data();
- output_vpos = g->minv; // set output_vpos to the next line since
- output_hpos = left_margin_indent; // html header forces a newline anyway
- page_contents->words.move_left(); // so that next time we use old g
-
- need_one_newline = FALSE;
-}
-
-
-/*
- * is_whole_line_bold - returns TRUE if the whole line is bold.
- */
-
-int html_printer::is_whole_line_bold (text_glob *g)
-{
- text_glob *n=g;
- int current_vpos=g->minv;
-
- do {
- if (is_bold(n)) {
- page_contents->words.move_right();
- n = page_contents->words.get_data();
- } else {
- while (page_contents->words.get_data() != g) {
- page_contents->words.move_left();
- }
- return( FALSE );
- }
- } while ((! page_contents->words.is_equal_to_head()) && (is_on_same_line(n, current_vpos)));
- // was (n->minv == current_vpos)
- while (page_contents->words.get_data() != g) {
- page_contents->words.move_left();
- }
- return( TRUE );
-}
-
-
-/*
- * is_a_header - returns TRUE if the whole sequence of contineous lines are bold.
- * It checks to see whether a line is likely to be contineous and
- * then checks that all words are bold.
- */
-
-int html_printer::is_a_header (text_glob *g)
-{
- text_glob *l;
- text_glob *n=g;
- int current_vpos;
-
- do {
- l = n;
- current_vpos = n->minv;
- if (is_bold(n)) {
- page_contents->words.move_right();
- n = page_contents->words.get_data();
- } else {
- while (page_contents->words.get_data() != g) {
- page_contents->words.move_left();
- }
- return( FALSE );
- }
- } while ((! page_contents->words.is_equal_to_head()) &&
- ((n->minv == current_vpos) || (l->maxh == right_margin_indent)));
- while (page_contents->words.get_data() != g) {
- page_contents->words.move_left();
- }
- return( TRUE );
-}
-
-
-int html_printer::processed_header (text_glob *g)
-{
- if ((guess_on) && (g->minh <= left_margin_indent) && (! using_table_for_indent()) &&
- (is_a_header(g))) {
- build_header(g);
- write_header(g);
- return( TRUE );
- } else {
- return( FALSE );
- }
-}
-
-int is_punctuation (char *s, int length)
-{
- return( (length == 1) &&
- ((s[0] == '(') || (s[0] == ')') || (s[0] == '!') || (s[0] == '.') || (s[0] == '[') ||
- (s[0] == ']') || (s[0] == '?') || (s[0] == ',') || (s[0] == ';') || (s[0] == ':') ||
- (s[0] == '@') || (s[0] == '#') || (s[0] == '$') || (s[0] == '%') || (s[0] == '^') ||
- (s[0] == '&') || (s[0] == '*') || (s[0] == '+') || (s[0] == '-') || (s[0] == '=') ||
- (s[0] == '{') || (s[0] == '}') || (s[0] == '|') || (s[0] == '\"') || (s[0] == '\''))
- );
-}
-
-/*
- * move_horizontal - moves right into the position, g->minh.
- */
-
-void html_printer::move_horizontal (text_glob *g, int left_margin)
-{
- if (g->text_style.f != 0) {
- int w = g->text_style.f->get_space_width(g->text_style.point_size);
-
- if (w == 0) {
- fatal("space width is zero");
- }
- if ((output_hpos == left_margin) && (g->minh > output_hpos)) {
- make_html_indent(g->minh-output_hpos);
- } else {
- emit_space(g, FALSE);
- }
- output_hpos = g->maxh;
- output_vpos = g->minv;
-
- change_font(g, TRUE);
- }
-}
-
-/*
- * looks_like_subscript - returns TRUE if, g, looks like a subscript.
- */
-
-int html_printer::looks_like_subscript (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- /* was return( ((output_vpos < g->minv) && (output_style.point_size != 0) &&
- * (output_style.point_size > g->text_style.point_size)) );
- */
-
- return( (output_style.point_size != 0) && (! supress_sub_sup) && (output_vpos+height < g->maxv) );
-}
-
-/*
- * looks_like_superscript - returns TRUE if, g, looks like a superscript.
- */
-
-int html_printer::looks_like_superscript (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
-/* was
- * return(((output_vpos > g->minv) && (output_style.point_size != 0) &&
- * (output_style.point_size > g->text_style.point_size)));
- */
-
- return( (output_style.point_size != 0) && (! supress_sub_sup) && (output_vpos+height > g->maxv) );
-}
-
-/*
- * looks_like_larger_font - returns TRUE if, g, can be treated as a larger font.
- * g needs to be on the same line
- */
-
-int html_printer::looks_like_larger_font (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- return( (output_vpos+height == g->maxv) && (output_style.point_size != 0) &&
- (convertSizeToHTML(g->text_style.point_size)+1 == convertSizeToHTML(output_style.point_size)) );
-}
-
-/*
- * looks_like_smaller_font - returns TRUE if, g, can be treated as a smaller font.
- * g needs to be on the same line
- */
-
-int html_printer::looks_like_smaller_font (text_glob *g)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
-
- return( (output_vpos+height == g->maxv) && (output_style.point_size != 0) &&
- (convertSizeToHTML(g->text_style.point_size) == convertSizeToHTML(output_style.point_size)+1) );
-}
-
-/*
- * pretend_is_on_same_line - returns TRUE if we think, g, is on the same line as the previous glob.
- * Note that it believes a single word spanning the left..right as being
- * on a different line.
- */
-
-int html_printer::pretend_is_on_same_line (text_glob *g, int left_margin, int right_margin)
-{
- return( auto_on && (right_margin == output_hpos) && (left_margin == g->minh) &&
- (right_margin != g->maxh) && ((! is_whole_line_bold(g)) || (g->text_style.f == output_style.f)) &&
- (! (using_table_for_indent()) || (indentation.wrap_margin)) );
-}
-
-int html_printer::is_on_same_line (text_glob *g, int vpos)
-{
-#if 0
- if (g->is_html_command) {
- stop();
- }
-#endif
- return(
- (vpos >= 0) &&
- (is_intersection(vpos, vpos+g->text_style.point_size*font::res/72-1, g->minv, g->maxv))
- );
-}
-
-
-/*
- * make_html_indent - creates a relative indentation.
- */
-
-void html_printer::make_html_indent (int indent)
-{
- if ((indent > 0) && ((right_margin_indent-get_left()) > 0) &&
- ((indent*100)/(right_margin_indent-get_left()))) {
- html.put_string("<span style=\" text-indent: ");
- html.put_number((indent*100)/(right_margin_indent-get_left()));
- html.put_string("%;\"></span>");
- }
-}
-
-/*
- * using_table_for_indent - returns TRUE if we currently using a table for indentation
- * purposes.
- */
-
-int html_printer::using_table_for_indent (void)
-{
- return( indentation.no_of_columns != 0 );
-}
-
-/*
- * calculate_min_gap - returns the minimum gap by which we deduce columns.
- * This is a rough heuristic.
- */
-
-int html_printer::calculate_min_gap (text_glob *g)
-{
- text_glob *t = g;
-
- while ((t->is_raw_command) && (! page_contents->words.is_equal_to_tail()) &&
- ((t->minv < end_region_vpos) || (end_region_vpos < 0))) {
- page_contents->words.move_right();
- t=page_contents->words.get_data();
- }
- rewind_text_to(g);
- if (t->is_raw_command) {
- return( font::res * 10 ); // impossibly large gap width
- } else {
- return( t->text_style.f->get_space_width(t->text_style.point_size)*GAP_SPACES );
- }
-}
-
-/*
- * collect_columns - place html text in a column and return the vertical limit reached.
- */
-
-int html_printer::collect_columns (struct text_defn *next_words,
- struct text_defn *next_cols,
- struct text_defn *last_words,
- struct text_defn *last_cols,
- int max_words)
-{
- text_glob *start = page_contents->words.get_data();
- text_glob *t = start;
- int upper_limit = 0;
-
- /*
- * initialize cols and words
- */
- next_words[0].left = 0;
- next_words[0].right = 0;
- next_cols [0].left = 0;
- next_cols [0].right = 0;
-
- /*
- * if we have not reached the end collect the words on the current line
- */
- if (start != 0) {
- int graphic_limit = end_region_vpos;
-
- if (is_whole_line_bold(t) && (t->minh <= left_margin_indent) && (guess_on)) {
- /*
- * found header therefore terminate indentation table.
- * Return a negative number so we know a header has
- * stopped the column
- */
- upper_limit = -t->minv;
- } else {
- int i =0; // is the index into next_cols
- int j =0; // is the column index for last_cols
- int k =0; // is the index into next_words
- int l =0; // is the index into next_words
- int prevh =0;
- int mingap =calculate_min_gap(start);
-
- /*
- * while words on the same line record them and any significant gaps
- */
- while ((t != 0) && (is_on_same_line(t, start->minv) && (i<max_words)) &&
- ((graphic_limit == -1) || (graphic_limit > t->minv))) {
-
- /*
- * now find column index from the last line which corresponds to, t.
- */
- j = find_column_index_in_line(t, last_cols);
-
- /*
- * now find word index from the last line which corresponds to, t.
- */
- l = find_column_index_in_line(t, last_words);
-
- /*
- * Note t->minh might equal t->maxh when we are passing a special device character via \X
- * we currently ignore this when considering tables
- *
- * if we have found a significant gap then record it
- */
- if (((t->minh - prevh >= mingap) ||
- ((last_cols != 0) && (last_cols [j].right != 0) && (t->minh == last_cols [j].left))) &&
- (t->minh != t->maxh)) {
- next_cols[i].left = t->minh;
- next_cols[i].right = t->maxh;
- i++;
- /*
- * terminate the array
- */
- if (i<max_words) {
- next_cols[i].left = 0;
- next_cols[i].right = 0;
- }
- } else if (i>0) {
- /*
- * move previous right hand column to align with, t.
- */
-
- if (t->minh > next_cols[i-1].left) {
- /*
- * a simple precaution in case we get globs which are technically on the same line
- * (sadly this does occur sometimes - maybe we should be stricter with is_on_same_line)
- * --fixme--
- */
- next_cols[i-1].right = max(next_cols[i-1].right, t->maxh);
- }
- }
- /*
- * remember to record the individual words
- */
- next_words[k].left = t->minh;
- next_words[k].right = t->maxh;
- k++;
-
- /*
- * and record the vertical upper limit
- */
- upper_limit = max(t->minv, upper_limit);
-
- /*
- * and update prevh - used to detect a when a different line is seen
- */
- prevh = t->maxh;
-
- /*
- * get next word into, t, which equals 0, if no word is found
- */
- page_contents->words.move_right();
- t = page_contents->words.get_data();
- if (page_contents->words.is_equal_to_head()) {
- t = 0;
- }
- }
-
- /*
- * and terminate the next_words array
- */
-
- if (k<max_words) {
- next_words[k].left = 0;
- next_words[k].right = 0;
- }
-
- /*
- * consistency check, next_cols, after removing redundant colums.
- */
-
- remove_redundant_columns(next_cols);
-
-#if 0
- for (k=0; k<count_columns(next_cols); k++) {
- if (next_cols[k].left > next_cols[k].right) {
- fprintf(stderr, "left > right\n"); fflush(stderr);
- stop();
- fatal("next_cols has messed up columns");
- }
- if ((k>0) && (k+1<count_columns(next_cols)) && (next_cols[k].right > next_cols[k+1].left)) {
- fprintf(stderr, "next_cols[k].right > next_cols[k+1].left\n"); fflush(stderr);
- stop();
- fatal("next_cols has messed up columns");
- }
- }
-#endif
- }
- }
- return( upper_limit );
-}
-
-/*
- * conflict_with_words - returns TRUE if a word sequence crosses a column.
- */
-
-int html_printer::conflict_with_words (struct text_defn *column_guess, struct text_defn *words)
-{
- int i=0;
- int j;
-
- while ((column_guess[i].right != 0) && (i<MAX_WORDS_PER_LINE)) {
- j=0;
- while ((words[j].right != 0) && (j<MAX_WORDS_PER_LINE)) {
- if ((words[j].left <= column_guess[i].right) && (i+1<MAX_WORDS_PER_LINE) &&
- (column_guess[i+1].right != 0) && (words[j].right >= column_guess[i+1].left)) {
- if (debug_table_on) {
- fprintf(stderr, "is a conflict with words\n");
- fflush(stderr);
- }
- return( TRUE );
- }
- j++;
- }
- i++;
- }
- if (debug_table_on) {
- fprintf(stderr, "is NOT a conflict with words\n");
- fflush(stderr);
- }
- return( FALSE );
-}
-
-/*
- * combine_line - combines dest and src.
- */
-
-void html_printer::combine_line (struct text_defn *dest, struct text_defn *src)
-{
- int i;
-
- for (i=0; (i<MAX_WORDS_PER_LINE) && (src[i].right != 0); i++) {
- include_into_list(dest, &src[i]);
- }
- remove_redundant_columns(dest);
-}
-
-/*
- * remove_entry_in_line - removes an entry, j, in, line.
- */
-
-void html_printer::remove_entry_in_line (struct text_defn *line, int j)
-{
- while (line[j].right != 0) {
- line[j].left = line[j+1].left;
- line[j].right = line[j+1].right;
- j++;
- }
-}
-
-/*
- * remove_redundant_columns - searches through the array columns and removes any redundant entries.
- */
-
-void html_printer::remove_redundant_columns (struct text_defn *line)
-{
- int i=0;
- int j=0;
-
- while (line[i].right != 0) {
- if ((i<MAX_WORDS_PER_LINE) && (line[i+1].right != 0)) {
- j = 0;
- while ((j<MAX_WORDS_PER_LINE) && (line[j].right != 0)) {
- if ((j != i) && (is_intersection(line[i].left, line[i].right, line[j].left, line[j].right))) {
- line[i].left = min(line[i].left , line[j].left);
- line[i].right = max(line[i].right, line[j].right);
- remove_entry_in_line(line, j);
- } else {
- j++;
- }
- }
- }
- i++;
- }
-}
-
-/*
- * include_into_list - performs an order set inclusion
- */
-
-void html_printer::include_into_list (struct text_defn *line, struct text_defn *item)
-{
- int i=0;
-
- while ((i<MAX_WORDS_PER_LINE) && (line[i].right != 0) && (line[i].left<item->left)) {
- i++;
- }
-
- if (line[i].right == 0) {
- // add to the end
- if (i<MAX_WORDS_PER_LINE) {
- if ((i>0) && (line[i-1].left > item->left)) {
- fatal("insertion error");
- }
- line[i].left = item->left;
- line[i].right = item->right;
- i++;
- line[i].left = 0;
- line[i].right = 0;
- }
- } else {
- if (line[i].left == item->left) {
- line[i].right = max(item->right, line[i].right);
- } else {
- // insert
- int left = item->left;
- int right = item->right;
- int l = line[i].left;
- int r = line[i].right;
-
- while ((i+1<MAX_WORDS_PER_LINE) && (line[i].right != 0)) {
- line[i].left = left;
- line[i].right = right;
- i++;
- left = l;
- right = r;
- l = line[i].left;
- r = line[i].right;
- }
- if (i+1<MAX_WORDS_PER_LINE) {
- line[i].left = left;
- line[i].right = right;
- line[i+1].left = 0;
- line[i+1].right = 0;
- }
- }
- }
-}
-
-/*
- * is_in_column - return TRUE if value is present in line.
- */
-
-int html_printer::is_in_column (struct text_defn *line, struct text_defn *item, int max_words)
-{
- int i=0;
-
- while ((i<max_words) && (line[i].right != 0)) {
- if (line[i].left == item->left) {
- return( TRUE );
- } else {
- i++;
- }
- }
- return( FALSE );
-}
-
-/*
- * calculate_right - calculate the right most margin for each column in line.
- */
-
-void html_printer::calculate_right (struct text_defn *line, int max_words)
-{
- int i=0;
-
- while ((i<max_words) && (line[i].right != 0)) {
- if (i>0) {
- line[i-1].right = line[i].left;
- }
- i++;
- }
-}
-
-/*
- * add_right_full_width - adds an extra column to the right to bring the table up to
- * full width.
- */
-
-void html_printer::add_right_full_width (struct text_defn *line, int mingap)
-{
- int i=0;
-
- while ((i<MAX_WORDS_PER_LINE) && (line[i].right != 0)) {
- i++;
- }
-
- if ((i>0) && (line[i-1].right != right_margin_indent) && (i+1<MAX_WORDS_PER_LINE)) {
- line[i].left = min(line[i-1].right+mingap, right_margin_indent);
- line[i].right = right_margin_indent;
- i++;
- if (i<MAX_WORDS_PER_LINE) {
- line[i].left = 0;
- line[i].right = 0;
- }
- }
-}
-
-/*
- * determine_right_most_column - works out the right most limit of the right most column.
- * Required as we might be performing a .2C and only
- * have enough text to fill the left column.
- */
-
-void html_printer::determine_right_most_column (struct text_defn *line, int max_words)
-{
- int i=0;
-
- while ((i<max_words) && (line[i].right != 0)) {
- i++;
- }
- if (i>0) {
- // remember right_margin_indent is the right most position for this page
- line[i-1].right = column_calculate_right_margin(line[i-1].left, right_margin_indent);
- }
-}
-
-/*
- * is_column_match - returns TRUE if a word is aligned in the same horizontal alignment
- * between two lines, line1 and line2. If so then this horizontal
- * position is saved in match.
- */
-
-int html_printer::is_column_match (struct text_defn *match,
- struct text_defn *line1, struct text_defn *line2, int max_words)
-{
- int i=0;
- int j=0;
- int found=FALSE;
- int first=(match[0].left==0);
-
- if (first) {
- struct text_defn t;
-
- t.left = left_margin_indent;
- t.right = 0;
-
- include_into_list(match, &t);
- }
- while ((line1[i].right != 0) && (line2[i].right != 0)) {
- if (line1[i].left == line2[j].left) {
- // same horizontal alignment found
- include_into_list(match, &line1[i]);
- i++;
- j++;
- found = TRUE;
- } else if (line1[i].left < line2[j].left) {
- i++;
- } else {
- j++;
- }
- }
- calculate_right(match, max_words);
- return( found );
-}
-
-/*
- * check_lack_of_hits - returns TRUE if a column has been moved to a position
- * of only one hit from a position of more than one hit.
- */
-
-int html_printer::check_lack_of_hits (struct text_defn *next_guess,
- struct text_defn *last_guess,
- text_glob *start, int limit)
-{
- text_glob *current=page_contents->words.get_data();
- int n=count_columns(last_guess);
- int m=count_columns(next_guess);
- int i, j;
-
- if (limit > 0) {
- rewind_text_to(start);
- count_hits(last_guess, n, limit);
- rewind_text_to(current);
- i=0;
- j=0;
- while ((i<n) && (j<m) &&
- (last_guess[i].right != 0) && (next_guess[j].right != 0)) {
- if ((is_intersection(last_guess[i].left, last_guess[i].right,
- next_guess[j].left, next_guess[j].right)) &&
- (next_guess[j].left < last_guess[i].left) &&
- (last_guess[i].is_used >= 2)) {
- /*
- * next_guess has to be = 1 as this position is new
- */
- return( TRUE );
- }
- if (last_guess[i].left < next_guess[j].left) {
- i++;
- } else {
- j++;
- }
- }
- }
- return( FALSE );
-}
-
-/*
- * remove_white_using_words - remove white space in, last_guess, by examining, next_line
- * placing results into next_guess.
- * It returns TRUE if the same columns exist in next_guess and last_guess
- * we do allow columns to shrink but if a column disappears then we return FALSE.
- */
-
-int html_printer::remove_white_using_words (struct text_defn *next_guess,
- struct text_defn *last_guess, struct text_defn *next_line)
-{
- int i=0;
- int j=0;
- int k=0;
- int removed=FALSE;
-
- while ((last_guess[j].right != 0) && (next_line[k].right != 0)) {
- if (last_guess[j].left == next_line[k].left) {
- // same horizontal alignment found
- next_guess[i].left = last_guess[j].left;
- next_guess[i].right = max(last_guess[j].right, next_line[k].right);
- i++;
- j++;
- k++;
- if ((next_guess[i-1].right > last_guess[j].left) && (last_guess[j].right != 0)) {
- removed = TRUE;
- }
- } else if (last_guess[j].right < next_line[k].left) {
- next_guess[i].left = last_guess[j].left;
- next_guess[i].right = last_guess[j].right;
- i++;
- j++;
- } else if (last_guess[j].left > next_line[k].right) {
- // insert a word sequence from next_line[k]
- next_guess[i].left = next_line[k].left;
- next_guess[i].right = next_line[k].right;
- i++;
- k++;
- } else if (is_intersection(last_guess[j].left, last_guess[j].right, next_line[k].left, next_line[k].right)) {
- // potential for a column disappearing
- next_guess[i].left = min(last_guess[j].left , next_line[k].left);
- next_guess[i].right = max(last_guess[j].right, next_line[k].right);
- i++;
- j++;
- k++;
- if ((next_guess[i-1].right > last_guess[j].left) && (last_guess[j].right != 0)) {
- removed = TRUE;
- }
- }
- }
- while (next_line[k].right != 0) {
- next_guess[i].left = next_line[k].left;
- next_guess[i].right = next_line[k].right;
- i++;
- k++;
- }
- if (i<MAX_WORDS_PER_LINE) {
- next_guess[i].left = 0;
- next_guess[i].right = 0;
- }
- if (debug_table_on) {
- if (removed) {
- fprintf(stderr, "have removed column\n");
- } else {
- fprintf(stderr, "have NOT removed column\n");
- }
- fflush(stderr);
- }
- remove_redundant_columns(next_guess);
- return( removed );
-}
-
-/*
- * count_columns - returns the number of elements inside, line.
- */
-
-int html_printer::count_columns (struct text_defn *line)
-{
- int i=0;
-
- while (line[i].right != 0) {
- i++;
- }
- return( i );
-}
-
-/*
- * rewind_text_to - moves backwards until page_contents is looking at, g.
- */
-
-void html_printer::rewind_text_to (text_glob *g)
-{
- while (page_contents->words.get_data() != g) {
- if (page_contents->words.is_equal_to_head()) {
- page_contents->words.start_from_tail();
- } else {
- page_contents->words.move_left();
- }
- }
-}
-
-/*
- * can_loose_column - checks to see whether we should combine two columns.
- * This is allowed if there are is only one hit on the
- * left hand edge and the previous column is very close.
- */
-
-void html_printer::can_loose_column (text_glob *start, struct text_defn *last_guess, int limit)
-{
- text_glob *current=page_contents->words.get_data();
- int n=count_columns(last_guess);
- int i;
-
- rewind_text_to(start);
- count_hits(last_guess, n, limit);
- i=0;
- while (i<n-1) {
- if ((last_guess[i+1].is_used == 1) &&
- (calculate_min_gap(start) > (last_guess[i+1].left-last_guess[i].right))) {
- last_guess[i].right = last_guess[i+1].right;
- remove_entry_in_line(last_guess, i+1);
- n = count_columns(last_guess);
- i = 0;
- } else {
- i++;
- }
- }
- rewind_text_to(current);
-}
-
-/*
- * display_columns - a long overdue debugging function, as this column code is causing me grief :-(
- */
-
-void html_printer::display_columns (const char *word, const char *name, text_defn *line)
-{
- int i=0;
-
- fprintf(stderr, "[%s:%s]", name, word);
- while (line[i].right != 0) {
- fprintf(stderr, " <left=%d right=%d %d%%> ", line[i].left, line[i].right, line[i].percent);
- i++;
- }
- fprintf(stderr, "\n");
- fflush(stderr);
-}
-
-/*
- * copy_line - dest = src
- */
-
-void html_printer::copy_line (struct text_defn *dest, struct text_defn *src)
-{
- int k;
-
- for (k=0; ((src[k].right != 0) && (k<MAX_WORDS_PER_LINE)); k++) {
- dest[k].left = src[k].left;
- dest[k].right = src[k].right;
- }
- if (k<MAX_WORDS_PER_LINE) {
- dest[k].left = 0;
- dest[k].right = 0;
- }
-}
-
-/*
- * add_column_gaps - adds empty columns between columns which don't exactly align
- */
-
-void html_printer::add_column_gaps (struct text_defn *line)
-{
- int i=0;
- struct text_defn t;
-
- // firstly lets see whether we need an initial column on the left hand side
- if ((line[0].left != get_left()) && (line[0].right != 0) &&
- (get_left() < line[0].left) && (is_worth_column(get_left(), line[0].left))) {
- t.left = get_left();
- t.right = line[0].left;
- include_into_list(line, &t);
- }
-
- while ((i<MAX_WORDS_PER_LINE) && (line[i].right != 0)) {
- if ((i+1<MAX_WORDS_PER_LINE) && (line[i+1].right != 0) && (line[i].right != line[i+1].left) &&
- (is_worth_column(line[i].right, line[i+1].left))) {
- t.left = line[i].right;
- t.right = line[i+1].left;
- include_into_list(line, &t);
- i=0;
- } else {
- i++;
- }
- }
- // now let us see whether we need a final column on the right hand side
- if ((i>0) && (line[i-1].right != right_margin_indent) &&
- (is_worth_column(line[i-1].right, right_margin_indent))) {
- t.left = line[i-1].right;
- t.right = right_margin_indent;
- include_into_list(line, &t);
- }
-}
-
-/*
- * is_continueous_column - returns TRUE if a line has a word on one
- * of the last_col right most boundaries.
- */
-
-int html_printer::is_continueous_column (text_defn *last_col, text_defn *next_line)
-{
- int w = count_columns(next_line);
- int c = count_columns(last_col);
- int i, j;
-
- for (i=0; i<c; i++) {
- for (j=0; j<w; j++) {
- if (last_col[i].right == next_line[j].right) {
- return( TRUE );
- }
- }
- }
- return( FALSE );
-}
-
-/*
- * is_exact_left - returns TRUE if a line has a word on one
- * of the last_col left most boundaries.
- */
-
-int html_printer::is_exact_left (text_defn *last_col, text_defn *next_line)
-{
- int w = count_columns(next_line);
- int c = count_columns(last_col);
- int i, j;
-
- for (i=0; i<c; i++) {
- for (j=0; j<w; j++) {
- if ((last_col[i].left == next_line[j].left) ||
- (last_col[i].left != left_margin_indent)) {
- return( TRUE );
- }
- }
- }
- return( FALSE );
-}
-
-/*
- * continue_searching_column - decides whether we should carry on searching text for a column.
- */
-
-int html_printer::continue_searching_column (text_defn *next_col,
- text_defn *last_col,
- text_defn *all_words)
-{
- int count = count_columns(next_col);
- int words = count_columns(all_words);
-
- if ((words == 0) || ((words == 1) &&
- (all_words[0].left == left_margin_indent) &&
- (all_words[0].right == right_margin_indent))) {
- // no point as we have now seen a full line of contineous text with no gap
- return( FALSE );
- }
- return( (count == count_columns(last_col)) &&
- (last_col[0].left != left_margin_indent) || (last_col[0].right != right_margin_indent) );
-}
-
-/*
- * is_worth_column - returns TRUE if the size of this column is worth defining.
- */
-
-int html_printer::is_worth_column (int left, int right)
-{
-#if 0
- return( abs(right-left) >= MIN_COLUMN );
-#endif
- return( TRUE );
-}
-
-/*
- * large_enough_gap - returns TRUE if a large enough gap for one line was seen.
- * We need to make sure that a single line definitely warrents
- * a table.
- * It also removes other smaller gaps.
- */
-
-int html_printer::large_enough_gap (text_defn *last_col)
-{
- int i=0;
- int found=FALSE;
- int r=font::res;
- int gap=r/GAP_WIDTH_ONE_LINE;
-
- if (abs(last_col[i].left - left_margin_indent) >= gap) {
- found = TRUE;
- }
- while ((last_col[i].right != 0) && (last_col[i+1].right != 0)) {
- if (abs(last_col[i+1].left-last_col[i].right) >= gap) {
- found = TRUE;
- i++;
- } else {
- // not good enough for a single line, remove it
- last_col[i].right = last_col[i+1].right;
- remove_entry_in_line(last_col, i+1);
- }
- }
- return( found );
-}
-
-/*
- * is_subset_of_columns - returns TRUE if line, a, is a subset of line, b.
- */
-
-int html_printer::is_subset_of_columns (text_defn *a, text_defn *b)
-{
- int i;
- int j;
-
- i=0;
- while ((i<MAX_WORDS_PER_LINE) && (a[i].right != 0)) {
- j=0;
- while ((j<MAX_WORDS_PER_LINE) && (b[j].right != 0) &&
- ((b[j].left != a[i].left) || (b[j].right != a[i].right))) {
- j++;
- }
- if ((j==MAX_WORDS_PER_LINE) || (b[j].right == 0)) {
- // found a different column - not a subset
- return( FALSE );
- }
- i++;
- }
- return( TRUE );
-}
-
-/*
- * count_hits - counts the number of hits per column. A left hit
- * is when the left hand position of a glob hits
- * the left hand column.
- */
-
-void html_printer::count_hits (text_defn *col, int no_of_columns, int limit)
-{
- int i;
- text_glob *start = page_contents->words.get_data();
- text_glob *g = start;
-
- // firstly reset the used field
- for (i=0; i<no_of_columns; i++) {
- col[i].is_used = 0;
- }
- // now calculate the left hand hits
- while ((g != 0) && (g->minv <= limit)) {
- i=0;
- while ((i<no_of_columns) && (col[i].right < g->minh)) {
- i++;
- }
- if ((col[i].left == g->minh) && (col[i].right != 0)) {
- col[i].is_used++;
- }
- page_contents->words.move_right();
- if (page_contents->words.is_equal_to_head()) {
- g = 0;
- page_contents->words.start_from_tail();
- } else {
- g=page_contents->words.get_data();
- }
- }
-}
-
-/*
- * count_right_hits - counts the number of right hits per column.
- * A right hit is when the left hand position
- * of a glob hits the right hand column.
- */
-
-void html_printer::count_right_hits (text_defn *col, int no_of_columns)
-{
- int i;
- text_glob *start = page_contents->words.get_data();
- text_glob *g = start;
-
- // firstly reset the used field
- for (i=0; i<no_of_columns; i++) {
- col[i].right_hits = 0;
- }
- // now calculate the left hand hits
- while ((g != 0) && (g->minv <= indentation.vertical_limit)) {
- i=0;
- while ((i<no_of_columns) && (col[i].right < g->minh)) {
- i++;
- }
- if ((i<no_of_columns) && (col[i].right == g->maxh)) {
- if (debug_table_on) {
- fprintf(stderr, "found right hit [%s] at %d in %d\n",
- g->text_string, g->maxh, i);
- fflush(stderr);
- }
- col[i].right_hits++;
- }
- page_contents->words.move_right();
- if (page_contents->words.is_equal_to_head()) {
- g = 0;
- page_contents->words.start_from_tail();
- } else {
- g=page_contents->words.get_data();
- }
- }
-}
-
-/*
- * right_indentation - returns TRUE if a single column has been found and
- * it resembles an indentation. Ie .RS/.RE or ABSTACT
- */
-
-int html_printer::right_indentation (struct text_defn *last_guess)
-{
- // it assumes that last_guess contains a single column
- return( (last_guess[0].left > left_margin_indent) );
-}
-
-/*
- * able_to_steal_width - returns TRUE if we have an unused column which we can steal from.
- * It must have more than MIN_TEXT_PERCENT to do this.
- */
-
-int html_printer::able_to_steal_width (void)
-{
- int i;
-
- for (i=0; i<indentation.no_of_columns; i++) {
- if ((! indentation.columns[i].is_used) &&
- (indentation.columns[i].percent > MIN_TEXT_PERCENT)) {
- return( TRUE );
- }
- }
- return( FALSE );
-}
-
-/*
- * is_divisible_by - returns TRUE if n is divisible by d leaving no remainder.
- */
-
-static int is_divisible_by (int n, int d)
-{
- return( (n % d) == 0 );
-}
-
-/*
- * need_to_steal_width - returns TRUE if a used column need to be
- * given a little extra width for safty sake.
- */
-
-int html_printer::need_to_steal_width (void)
-{
- int i;
-
- for (i=0; i<indentation.no_of_columns; i++) {
- if ((indentation.columns[i].is_used) &&
- (indentation.columns[i].percent == (((indentation.columns[i].right - indentation.columns[i].left) * 100) /
- (right_margin_indent-left_margin_indent))) &&
- (indentation.columns[i].percent < PERCENT_THRESHOLD)) {
- return( TRUE );
- }
- }
- return( FALSE );
-}
-
-/*
- * utilize_round_off - utilize the remaining percent width in text columns
- */
-
-void html_printer::utilize_round_off (void)
-{
- int total = total_percentages();
- int excess, i;
-
- // use up the spare excess
-
- excess = 100-total;
-
- for (i=0; (i<indentation.no_of_columns) && (excess>0); i++) {
- if ((indentation.columns[i].is_used) &&
- (indentation.columns[i].percent < PERCENT_THRESHOLD)) {
- indentation.columns[i].percent++;
- excess--;
- }
- }
- // we might as well try and keep any numbers simple if possible
- for (i=0; (i<indentation.no_of_columns) && (excess>0); i++) {
- if ((indentation.columns[i].is_used) &&
- (! is_divisible_by(indentation.columns[i].percent, MIN_TEXT_PERCENT))) {
- indentation.columns[i].percent++;
- excess--;
- }
- }
- // forget the niceties lets just use excess up now!
- for (i=0; (i<indentation.no_of_columns) && (excess>0); i++) {
- if (indentation.columns[i].is_used) {
- indentation.columns[i].percent++;
- excess--;
- }
- }
-}
-
-/*
- * can_distribute_fairly - returns TRUE if we can redistribute some of the unused width into
- * columns that are used.
- */
-
-int html_printer::can_distribute_fairly (void)
-{
- int i;
- int total=0;
- int used =0;
- int excess;
-
- // firstly total up all percentages - so we can use round offs
- for (i=0; i<indentation.no_of_columns; i++) {
- total += indentation.columns[i].percent;
- if ((indentation.columns[i].is_used) &&
- (indentation.columns[i].percent < PERCENT_THRESHOLD)) {
- used++;
- }
- }
- //
- excess = 100-total;
- if (excess < used) {
- for (i=0; i<indentation.no_of_columns; i++) {
- if (! indentation.columns[i].is_used) {
- if (indentation.columns[i].percent > MIN_TEXT_PERCENT) {
- indentation.columns[i].percent--;
- excess++;
- }
- }
- }
- }
- if (excess >= used) {
- for (i=0; i<indentation.no_of_columns; i++) {
- if ((indentation.columns[i].is_used) &&
- (indentation.columns[i].percent < PERCENT_THRESHOLD) &&
- (indentation.columns[i].percent == (((indentation.columns[i].right - indentation.columns[i].left) * 100) /
- (right_margin_indent-left_margin_indent)))) {
- indentation.columns[i].percent++;
- excess--;
- }
- }
- return( TRUE );
- }
- return( FALSE );
-}
-
-/*
- * remove_table_column - removes column, i, from the indentation.
- */
-
-void html_printer::remove_table_column (int i)
-{
- while (i<indentation.no_of_columns) {
- indentation.columns[i].left = indentation.columns[i+1].left;
- indentation.columns[i].right = indentation.columns[i+1].right;
- indentation.columns[i].is_used = indentation.columns[i+1].is_used;
- indentation.columns[i].percent = indentation.columns[i+1].percent;
- i++;
- }
- indentation.no_of_columns--;
-}
-
-/*
- * next_line_on_left_column - returns TRUE if the next line in
- * column, i, has a word on the left margin.
- */
-
-int html_printer::next_line_on_left_column (int i, text_glob *start)
-{
- int current_vpos=start->minv;
-
- while ((start != 0) && (start->minv < indentation.vertical_limit) &&
- (is_on_same_line(start, current_vpos))) {
- if (page_contents->words.is_equal_to_tail()) {
- start = 0;
- } else {
- page_contents->words.move_right();
- start = page_contents->words.get_data();
- }
- }
- if ((start != 0) && (start->minv < indentation.vertical_limit)) {
- // onto next line now
- current_vpos=start->minv;
- while ((start != 0) && (start->minv < indentation.vertical_limit) &&
- (is_on_same_line(start, current_vpos))) {
- if (start->minh == indentation.columns[i].left) {
- return( TRUE );
- }
- if (page_contents->words.is_equal_to_tail()) {
- start = 0;
- } else {
- page_contents->words.move_right();
- start = page_contents->words.get_data();
- }
- }
- }
- return( FALSE );
-}
-
-/*
- * will_wrap_text - returns TRUE if text is wrapped in column, i.
- */
-
-int html_printer::will_wrap_text (int i, text_glob *start)
-{
- text_glob *current=page_contents->words.get_data();
-
- if (auto_on) {
- rewind_text_to(start);
- while ((start != 0) && (start->minv < indentation.vertical_limit)) {
- if (indentation.columns[i].right == start->maxh) {
- // ok right word is on column boarder - check next line
- if (next_line_on_left_column(i, start)) {
- rewind_text_to(current);
- return( TRUE );
- }
- }
- if (page_contents->words.is_equal_to_tail()) {
- start = 0;
- } else {
- page_contents->words.move_right();
- start = page_contents->words.get_data();
- }
- }
- }
- rewind_text_to(current);
- return( FALSE );
-}
-
-/*
- * remove_unnecessary_unused - runs through a table and decides whether an unused
- * column can be removed. This is only true if the
- * column to the left does not wrap text.
- */
-
-void html_printer::remove_unnecessary_unused (text_glob *start)
-{
- int i=0;
- int left=get_left();
- int right;
-
- while (i<indentation.no_of_columns) {
- if ((indentation.columns[i].is_used) &&
- (i+1<indentation.no_of_columns) && (! indentation.columns[i+1].is_used)) {
- /*
- * so i+1 is unused and there is a used column to the left.
- * Now we check whether we can add the unused column to the column, i.
- * This can only be done if column, i, is not wrapping text.
- */
- if (! will_wrap_text(i, start)) {
-#if 1
- if (i+1 < indentation.no_of_columns) {
- right = indentation.columns[i+1].right;
- } else {
- right = right_margin_indent;
- }
- indentation.columns[i].percent = (((right - indentation.columns[i].left) * 100) /
- (right_margin_indent-left));
-#else
- indentation.columns[i].percent = (((indentation.columns[i+1].right - indentation.columns[i].left) * 100) /
- (right_margin_indent-left));
-#endif
- remove_table_column(i+1);
- i=-1;
- }
- }
- i++;
- }
-}
-
-/*
- * remove_zero_percentage_column - removes all zero percentage width columns
- */
-
-void html_printer::remove_zero_percentage_column (void)
-{
- int i=0;
-
- while (i<indentation.no_of_columns) {
- if (indentation.columns[i].percent == 0) {
- remove_table_column(i);
- i=0;
- } else {
- i++;
- }
- }
-}
-
-/*
- * get_left - returns the actual left most margin.
- */
-
-int html_printer::get_left (void)
-{
- if ((header_indent < left_margin_indent) && (header_indent != -1)) {
- return( header_indent );
- } else {
- if (margin_on) {
- return( 0 );
- } else {
- return( left_margin_indent );
- }
- }
-}
-
-/*
- * calculate_percentage_width - calculates the percentage widths,
- * this function will be generous to
- * columns which have words as some browsers
- * produce messy output if the percentage is exactly
- * that required for text..
- * We try and round up to MIN_TEXT_PERCENT
- * of course we can only do this if we can steal from
- * an unused column.
- */
-
-void html_printer::calculate_percentage_width (text_glob *start)
-{
- int i;
- int left=get_left();
- int right;
-
- // firstly calculate raw percentages
- for (i=0; i<indentation.no_of_columns; i++) {
-#if 0
- indentation.columns[i].percent = (((indentation.columns[i].right - indentation.columns[i].left) * 100) /
- (right_margin_indent-left));
-#else
- if (i+1 < indentation.no_of_columns) {
- right = indentation.columns[i+1].left;
- } else {
- right = right_margin_indent;
- }
- indentation.columns[i].percent = (((right - indentation.columns[i].left) * 100) /
- (right_margin_indent-left));
-#endif
- }
- if (debug_table_on) {
- display_columns(start->text_string, "[b4 steal] indentation.columns", indentation.columns);
- }
-
- // now steal from the unused columns..
- remove_unnecessary_unused(start);
-
- if (debug_table_on) {
- display_columns(start->text_string, "[after steal] indentation.columns", indentation.columns);
- }
-
-#if 0
- utilize_round_off();
-#endif
- remove_zero_percentage_column();
-}
-
-
-/*
- * is_column_subset - returns TRUE if the columns described by small can be contained in
- * the columns in large.
- */
-
-int html_printer::is_column_subset (struct text_defn *small, struct text_defn *large)
-{
- int ns=count_columns(small);
- int nl=count_columns(large);
- int found;
- int i=0;
- int j;
-
- while (i<ns) {
- j=0;
- found = FALSE;
- while (j<nl) {
- if (is_intersection(small[i].left, small[i].right, large[j].left, large[j].right)) {
- found = TRUE;
- if (! is_subsection(small[i].left, small[i].right, large[j].left, large[j].right)) {
- // found column which is not a subset
- return( FALSE );
- }
- }
- j++;
- }
- if (! found) {
- return( FALSE );
- }
- i++;
- }
- // small cannot be an empty set
- return( ns>0 );
-}
-
-/*
- * right_most_column - returns the right most column position.
- */
-
-int html_printer::right_most_column (struct text_defn *col)
-{
- int i = count_columns(col);
-
- if (i>0) {
- return( col[i-1].right );
- } else {
- return( 0 );
- }
-}
-
-/*
- * large_enough_gap_for_two - returns TRUE if there exists a large enough gap
- * for two lines.
- */
-
-int html_printer::large_enough_gap_for_two (struct text_defn *col)
-{
- int i=0;
- int found=FALSE;
- int gap=MIN_COLUMN_FOR_TWO_LINES;
-
- if (abs(col[i].left - left_margin_indent) >= gap) {
- found = TRUE;
- }
- while ((col[i].right != 0) && (col[i+1].right != 0)) {
- if (abs(col[i+1].left-col[i].right) >= gap) {
- found = TRUE;
- i++;
- } else {
- // not good enough for this table, remove it
- col[i].right = col[i+1].right;
- remove_entry_in_line(col, i+1);
- }
- }
- return( found );
-}
-
-/*
- * is_small_table - applies some rigorous rules to test whether we should start this
- * table at this point.
- */
-
-int html_printer::is_small_table (int lines, struct text_defn *last_guess,
- struct text_defn *words_1, struct text_defn *cols_1,
- struct text_defn *words_2, struct text_defn *cols_2,
- int *limit, int *limit_1)
-{
- /*
- * firstly we check for an indented paragraph
- */
-
- if ((lines >= 2) &&
- (count_columns(cols_1) == count_columns(cols_2)) && (count_columns(cols_1) == 1) &&
- right_indentation(cols_1) && (! right_indentation(cols_2)) &&
- (cols_1[0].right == right_margin_indent)) {
- return( FALSE );
- }
-
- if (lines == 2) {
- /*
- * as we only have two lines in our table we need to examine in detail whether
- * we should construct a table from these two lines.
- * For example if the text is the start of an indented paragraph and
- * line1 and line2 are contineous then they should form one row in our table but
- * if line1 and line2 are not contineous it is safer to treat them separately.
- *
- * We are prepared to reduce the table to one line
- */
- if (((count_columns(cols_1) != count_columns(cols_2)) && (cols_1[0].left > cols_2[0].left)) ||
- (! ((is_column_subset(cols_1, cols_2)) ||
- (is_column_subset(cols_2, cols_1))))) {
- /*
- * now we must check to see whether line1 and line2 join
- */
- if ((right_most_column(cols_1) == right_margin_indent) &&
- (cols_2[0].left == left_margin_indent)) {
- /*
- * looks like they join, we don't want a table at all.
- */
- return( FALSE );
- }
- /*
- * use single line table
- */
- lines--;
- *limit = *limit_1;
- copy_line(last_guess, cols_1);
- }
- }
-
- if ((count_columns(last_guess)==1) && (right_indentation(last_guess))) {
- if (lines == 1) {
- *limit = *limit_1;
- }
- return( TRUE );
- }
-
- /*
- * check for large gap with single line or if multiple lines with more than one column
- */
-
- if (lines == 1) {
- if (large_enough_gap(last_guess)) {
- *limit = *limit_1;
- return( TRUE );
- }
- } else if (count_columns(last_guess)>1) {
- if (lines == 2) {
- return( large_enough_gap_for_two(last_guess) );
- }
- return( TRUE );
- }
- return( FALSE );
-}
-
-
-/*
- * is_appropriate_to_start_table - returns TRUE if it is appropriate to start the table
- * at this point.
- */
-
-int html_printer::is_appropriate_to_start_table (struct text_defn *cols_1,
- struct text_defn *cols_2,
- struct text_defn *last_guess)
-{
- if (count_columns(last_guess) == 1) {
- if (debug_table_on) {
- display_columns("", "[is] cols_1" , cols_1);
- display_columns("", "[is] cols_2" , cols_2);
- display_columns("", "[is] last_guess", last_guess);
- }
-
- if (! ((is_column_subset(cols_1, cols_2)) ||
- (is_column_subset(cols_2, cols_1)))) {
- return( FALSE );
- }
- if ((count_columns(cols_1) == 1) &&
- (cols_1[0].left > left_margin_indent) && (cols_1[0].right < right_margin_indent) &&
- (cols_1[0].right != cols_2[0].right) &&
- (count_columns(last_guess) == 1)) {
- return( FALSE );
- }
- }
- return( TRUE );
-}
-
-/*
- * is_a_full_width_column - returns TRUE if there exists a full width column.
- */
-
-int html_printer::is_a_full_width_column (void)
-{
- int i=0;
-
- while (i<indentation.no_of_columns) {
- if (((indentation.columns[i].left == get_left()) ||
- (indentation.columns[i].left == left_margin_indent)) &&
- (indentation.columns[i].right == right_margin_indent)) {
- return( TRUE );
- }
- i++;
- }
- return( FALSE );
-}
-
-/*
- * should_defer_table - returns TRUE if we should defer this table.
- * This can occur if the first line seen indent
- * is < than future lines. In which case it
- * will cause future lines in this table
- * to be indented. The lesser of the evils
- * is to treat the first line by itself.
- */
-
-int html_printer::should_defer_table (int lines, struct text_glob *start, struct text_defn *cols_1)
-{
- if (lines > 2) {
- int i=0;
- int c=count_columns(cols_1);
-
- count_hits(cols_1, count_columns(cols_1), indentation.vertical_limit);
- rewind_text_to(start);
- count_right_hits(cols_1, count_columns(cols_1));
- rewind_text_to(start);
- while (i<c) {
- if ((cols_1[i].is_used > 1) || (cols_1[i].right_hits > 1)) {
- return( FALSE );
- }
- i++;
- }
- /*
- * first line (cols_1) is not aligned on any future column, we defer.
- */
- return( TRUE );
- }
- return( FALSE );
-}
-
-/*
- * is_new_exact_right - returns TRUE if the, next_cols, has a word sitting
- * on the right hand margin of last_guess. But only
- * if no exact right word was found in last_cols.
- */
-
-int html_printer::is_new_exact_right (struct text_defn *last_guess,
- struct text_defn *last_cols,
- struct text_defn *next_cols)
-{
- int n=count_columns(last_guess)-1;
- return( FALSE );
-
- if ((n>=0) && (last_guess[n].right != 0) && (last_cols[n].right != 0) && (next_cols[n].right != 0)) {
- if ((last_cols[n].right != last_guess[n].right) &&
- ((next_cols[n].right == last_guess[n].right) || (next_cols[n].right == right_margin_indent))) {
- return( TRUE );
- }
- }
- return( FALSE );
-}
-
-/*
- * found_use_for_table - checks whether the some words on one line directly match
- * the horizontal alignment of the line below.
- * This is rather complex as we need to detect text tables
- * such as .2C .IP Abstracts and indentations
- *
- * Algorithm is:
- *
- * read first line of text and calculate the significant
- * gaps between words
- * next next line of text and do the same
- * if a conflict between these lines exists and
- * first line is centered
- * then
- * return centered line
- * elsif start of a table is found
- * then
- * repeat
- * read next line of text and calculate significant gaps
- * until conflict between the gaps is found
- * record table
- * return table found
- * else
- * return no table found
- * fi
- */
-
-int html_printer::found_use_for_table (text_glob *start)
-{
- text_glob *t;
- struct text_defn all_words [MAX_WORDS_PER_LINE]; // logical OR of words on each line
- struct text_defn words_1 [MAX_WORDS_PER_LINE]; // actual words found on first line
- struct text_defn words_2 [MAX_WORDS_PER_LINE]; // actual words found on second line
- struct text_defn cols_1 [MAX_WORDS_PER_LINE]; // columns found on line 1
- struct text_defn cols_2 [MAX_WORDS_PER_LINE]; // columns found on line 2
- struct text_defn last_words [MAX_WORDS_PER_LINE]; // actual words found on last line
- struct text_defn last_cols [MAX_WORDS_PER_LINE]; // columns found so far
- struct text_defn next_words [MAX_WORDS_PER_LINE]; // actual words found on last line (new)
- struct text_defn next_cols [MAX_WORDS_PER_LINE]; // columns found on next line
- struct text_defn last_guess [MAX_WORDS_PER_LINE]; // columns found on last line
- // (logical AND of gaps (treat gaps = true))
- struct text_defn next_guess [MAX_WORDS_PER_LINE]; // columns found on next line
- // (logical AND of gaps (treat gaps = true))
- struct text_defn prev_guess [MAX_WORDS_PER_LINE]; // temporary copy of last_guess
- int i =0;
- int lines =1; // number of lines read
- int limit; // vertical limit reached in our table
- int limit_1; // vertical position after line 1
-
-#if 0
- if (strcmp(start->text_string, "<hr>") == 0) {
- stop();
- }
-#endif
-
- /*
- * get first set of potential columns into last_line, call this last_guess
- */
- limit = collect_columns(words_1, cols_1, 0, 0, MAX_WORDS_PER_LINE);
- limit_1 = limit;
- copy_line(last_guess, cols_1);
-
- /*
- * initialize the all_words columns - if this should ever equal a complete line
- * with no gaps then we terminate the table.
- */
- copy_line(all_words, cols_1);
-
- /*
- * and set the current limit found
- */
- indentation.vertical_limit = limit;
-
- /*
- * have we reached the end of page?
- */
- if (page_contents->words.is_equal_to_head() || (limit == 0)) {
- cols_2[0].left = 0;
- cols_2[0].right = 0;
- } else {
- /*
- * the answer to the previous question was no.
- * So we need to examine the next line
- */
- limit = collect_columns(words_2, cols_2, words_1, cols_1, MAX_WORDS_PER_LINE);
- if (limit >= 0) {
- lines++;
- }
- }
-
- /*
- * now check to see whether the first line looks like a single centered line
- */
- if (single_centered_line(cols_1, cols_2, start)) {
- rewind_text_to(start);
- write_centered_line(start);
- /*
- * indicate to caller than we have centered text, not found a table.
- */
- indentation.no_of_columns = 0;
- return( TRUE );
- } else if (! table_on) {
- /*
- * user does not allow us to find a table (we are allowed to find centered lines (above))
- */
- rewind_text_to(start);
- return( FALSE );
- }
-
- /*
- * remove any gaps from all_words
- */
- combine_line(all_words, cols_2);
- if (debug_table_on) {
- display_columns(start->text_string, "[1] all_words" , all_words);
- display_columns(start->text_string, "[1] cols_1" , cols_1);
- display_columns(start->text_string, "[1] words_1" , words_1);
- display_columns(start->text_string, "[1] cols_2" , cols_2);
- display_columns(start->text_string, "[1] words_2" , words_2);
- display_columns(start->text_string, "[1] last_guess", last_guess);
- }
-
- /*
- * next_guess = last_guess AND next_cols (where gap = true)
- */
-
- if (remove_white_using_words(prev_guess, last_guess, cols_2)) {
- }
- if (remove_white_using_words(next_guess, prev_guess, all_words)) {
- }
-
- if (debug_table_on) {
- display_columns(start->text_string, "[2] next_guess", next_guess);
- }
-
- copy_line(prev_guess, cols_1);
- combine_line(prev_guess, cols_2);
-
- /*
- * if no sequence of words crosses a column and
- * both the last column and all_words are not a full solid line of text
- */
- if ((! conflict_with_words(next_guess, all_words)) &&
- (continue_searching_column(next_guess, next_guess, all_words)) &&
- (is_appropriate_to_start_table(cols_1, cols_2, prev_guess)) &&
- (! page_contents->words.is_equal_to_head()) &&
- ((end_region_vpos < 0) || (limit < end_region_vpos)) &&
- (limit > 0)) {
-
- /*
- * subtract any columns which are bridged by a sequence of words
- */
-
- copy_line(next_cols , cols_2);
- copy_line(next_words, words_2);
-
- do {
- copy_line(prev_guess, next_guess); // copy next_guess away so we can compare it later
- combine_line(last_guess, next_guess);
-
- if (debug_table_on) {
- t = page_contents->words.get_data();
- display_columns(t->text_string, "[l] last_guess", last_guess);
- }
- indentation.vertical_limit = limit;
-
- copy_line(last_cols, next_cols);
- copy_line(last_words, next_words);
- if (page_contents->words.is_equal_to_head()) {
- /*
- * terminate the search
- */
- next_cols[0].left = 0;
- next_cols[0].right = 0;
- } else {
- limit = collect_columns(next_words, next_cols, last_words, last_cols, MAX_WORDS_PER_LINE);
- lines++;
- }
-
- combine_line(all_words, next_cols);
- if (debug_table_on) {
- display_columns(t->text_string, "[l] all_words" , all_words);
- display_columns(t->text_string, "[l] last_cols" , last_cols);
- display_columns(t->text_string, "[l] next_words", next_words);
- display_columns(t->text_string, "[l] next_cols" , next_cols);
- }
-
- if (limit >= 0) {
- /*
- * (if limit is < 0 then the table ends anyway.)
- * we check to see whether we should combine close columns.
- */
- can_loose_column(start, last_guess, limit);
- }
- t = page_contents->words.get_data();
-#if 0
- if (strcmp(t->text_string, "heT") == 0) {
- stop();
- }
-#endif
-
- } while ((! remove_white_using_words(next_guess, last_guess, next_cols)) &&
- (! conflict_with_words(next_guess, all_words)) &&
- (continue_searching_column(next_guess, last_guess, all_words)) &&
- ((is_continueous_column(prev_guess, last_cols)) || (is_exact_left(last_guess, next_cols))) &&
- (! is_new_exact_right(last_guess, last_cols, next_cols)) &&
- (! page_contents->words.is_equal_to_head()) &&
- (! check_lack_of_hits(next_guess, last_guess, start, limit)) &&
- ((end_region_vpos <= 0) || (t->minv < end_region_vpos)) &&
- (limit >= 0));
- lines--;
- }
-
- if (limit < 0) {
- indentation.vertical_limit = limit;
- }
-
- if (page_contents->words.is_equal_to_head()) {
- // end of page check whether we should include everything
- if ((! conflict_with_words(next_guess, all_words)) &&
- (continue_searching_column(next_guess, last_guess, all_words)) &&
- ((is_continueous_column(prev_guess, last_cols)) || (is_exact_left(last_guess, next_cols)))) {
- // end of page reached - therefore include everything
- page_contents->words.start_from_tail();
- t = page_contents->words.get_data();
- combine_line(last_guess, next_guess);
- indentation.vertical_limit = t->minv;
- }
- } else {
- t = page_contents->words.get_data();
- if (((! conflict_with_words(last_guess, all_words))) &&
- (t->minv > end_region_vpos) && (end_region_vpos > 0)) {
- indentation.vertical_limit = limit;
- }
- if ((end_region_vpos > 0) && (t->minv > end_region_vpos)) {
- indentation.vertical_limit = min(indentation.vertical_limit, end_region_vpos+1);
- } else if (indentation.vertical_limit < 0) {
- // -1 as we don't want to include section heading itself
- indentation.vertical_limit = -indentation.vertical_limit-1;
- }
- }
-
- if (debug_table_on) {
- display_columns(start->text_string, "[1] all_words" , all_words);
- display_columns(start->text_string, "[1] cols_1" , cols_1);
- display_columns(start->text_string, "[1] words_1" , words_1);
- display_columns(start->text_string, "[1] cols_2" , cols_2);
- display_columns(start->text_string, "[1] words_2" , words_2);
- display_columns(start->text_string, "[1] last_guess", last_guess);
- display_columns(start->text_string, "[1] next_guess", next_guess);
- }
- rewind_text_to(start);
-
- i = count_columns(last_guess);
- if ((i>1) || (right_indentation(last_guess))) {
-
- // was (continue_searching_column(last_guess, last_guess, all_words)))) {
- if (should_defer_table(lines, start, cols_1)) {
- /*
- * yes, but let us check for a single line table
- */
- lines = 1;
- copy_line(last_guess, cols_1);
- }
-
- if (is_small_table(lines, last_guess, words_1, cols_1, words_2, cols_2,
- &indentation.vertical_limit, &limit_1)) {
-
- // copy match into permenant html_table
-
- if (indentation.columns != 0) {
- free(indentation.columns);
- }
- if (debug_table_on) {
- display_columns(start->text_string, "[x] last_guess", last_guess);
- }
- add_column_gaps(last_guess);
- if (debug_table_on) {
- display_columns(start->text_string, "[g] last_guess", last_guess);
- }
-
- /*
- * +1 for the potential header_margin
- * +1 for null
- */
-
- indentation.no_of_columns = count_columns(last_guess);
- indentation.columns = (struct text_defn *)malloc((indentation.no_of_columns+2)*sizeof(struct text_defn));
-
- i=0;
- while (i<=indentation.no_of_columns) {
- indentation.columns[i].left = last_guess[i].left;
- indentation.columns[i].right = last_guess[i].right;
- i++;
- }
-
- if (indentation.no_of_columns>0) {
- assign_used_columns(start);
- rewind_text_to(start);
- calculate_percentage_width(start);
-
- if (debug_table_on) {
- display_columns(start->text_string, "[g] indentation.columns", indentation.columns);
- }
-
- /*
- * clearly a single column 100% is not worth using a table.
- * Also we check to see whether the first line is sensibly
- * part of this table.
- */
- if (is_a_full_width_column()) {
- indentation.no_of_columns = 0;
- free( indentation.columns );
- indentation.columns = 0;
- } else {
- return( TRUE );
- }
- }
- }
- }
- return( FALSE );
-}
-
-/*
- * define_cell - creates a table cell using the percentage width.
- */
-
-void html_printer::define_cell (int i)
-{
- html.put_string("<td valign=\"top\" align=\"left\" width=\"");
- html.put_number(indentation.columns[i].percent);
- html.put_string("%\">\n");
-}
-
-/*
- * column_display_word - given a left, right pair and the indentation.vertical_limit
- * write out html text within this region.
- */
-
-void html_printer::column_display_word (int cell, int vert, int left, int right, int next)
-{
- text_glob *g=page_contents->words.get_data();
-
- supress_sub_sup = TRUE;
- if (left != next) {
- define_cell(cell);
- begin_paragraph_no_height(left_alignment);
- while ((g != 0) && (g->minv <= vert)) {
- if ((left <= g->minh) && (g->minh<right)) {
- char *postword=html_position_text(g, left, right);
-
- if (header.written_header) {
- fatal("should never generate a header inside a table");
- } else {
- if (g->is_raw_command) {
- html.put_string((char *)g->text_string);
- } else {
- translate_to_html(g);
- }
- if (postword != 0) {
- html.put_string(postword);
- }
- issued_newline = FALSE;
- }
- }
- if (page_contents->words.is_equal_to_tail()) {
- g = 0;
- } else {
- page_contents->words.move_right();
- g=page_contents->words.get_data();
- }
- }
- end_paragraph();
- html.put_string("</td>\n");
- if (g != 0) {
- page_contents->words.move_left();
- // and correct output_vpos
- g=page_contents->words.get_data();
- output_vpos = g->minv;
- }
- }
-}
-
-/*
- * total_percentages - returns the total of all the percentages in the table.
- */
-
-int html_printer::total_percentages ()
-{
- int i;
- int sum=0;
-
- for (i=0; i<indentation.no_of_columns; i++) {
- sum += indentation.columns[i].percent;
- }
- return( sum );
-}
-
-/*
- * start_table - creates a table according with parameters contained within class html_table.
- */
-
-void html_printer::start_table (void)
-{
- save_paragraph();
- html.put_string("\n<table width=\"");
- html.put_number(total_percentages());
- html.put_string("%\" rules=\"none\" frame=\"none\" cols=\"");
- html.put_number(indentation.no_of_columns);
- html.put_string("\" cellspacing=\"0\" cellpadding=\"0\">\n");
-}
-
-/*
- * end_table - finishes off a table.
- */
-
-void html_printer::end_table (void)
-{
- html.put_string("</table>\n");
- indentation.no_of_columns = 0;
- restore_paragraph();
- supress_sub_sup = TRUE;
-}
-
-
-/*
- * is_in_table - returns TRUE if we are inside an html table.
- */
-
-int html_printer::is_in_table (void)
-{
- return( indentation.no_of_columns != 0 );
-}
-
-
-/*
- * column_calculate_right_margin - scan through the column and find the right most margin
- */
-
-int html_printer::column_calculate_right_margin (int left, int right)
-{
- if (left == right) {
- return( right );
- } else {
- int rightmost =-1;
- int count = 0;
- text_glob *start = page_contents->words.get_data();
- text_glob *g = start;
-
- while ((g != 0) && (g->minv <= indentation.vertical_limit)) {
- if ((left <= g->minh) && (g->minh<right)) {
- if (debug_on) {
- fprintf(stderr, "right word = %s %d\n", g->text_string, g->maxh); fflush(stderr);
- }
- if (g->maxh == rightmost) {
- count++;
- } else if (g->maxh > rightmost) {
- count = 1;
- rightmost = g->maxh;
- }
- if (g->maxh > right) {
- if (debug_on) {
- fprintf(stderr, "problem as right word = %s %d [%d..%d]\n",
- g->text_string, right, g->minh, g->maxh); fflush(stderr);
- // stop();
- }
- }
- }
- page_contents->words.move_right();
- if (page_contents->words.is_equal_to_head()) {
- g = 0;
- page_contents->words.start_from_tail();
- } else {
- g=page_contents->words.get_data();
- }
- }
- rewind_text_to(start);
- if (rightmost == -1) {
- return( right ); // no words in this column
- } else {
- return( rightmost );
- }
- }
-}
-
-/*
- * column_calculate_left_margin - scan through the column and find the left most margin
- */
-
-int html_printer::column_calculate_left_margin (int left, int right)
-{
- if (left == right) {
- return( left );
- } else {
- int leftmost=right;
- text_glob *start = page_contents->words.get_data();
- text_glob *g = start;
-
- while ((g != 0) && (g->minv <= indentation.vertical_limit)) {
- if ((left <= g->minh) && (g->minh<right)) {
- leftmost = min(g->minh, leftmost);
- }
- page_contents->words.move_right();
- if (page_contents->words.is_equal_to_head()) {
- g = 0;
- page_contents->words.start_from_tail();
- } else {
- g=page_contents->words.get_data();
- }
- }
- rewind_text_to(start);
- if (leftmost == right) {
- return( left ); // no words in this column
- } else {
- return( leftmost );
- }
- }
-}
-
-/*
- * find_column_index - returns the index to the column in which glob, t, exists.
- */
-
-int html_printer::find_column_index_in_line (text_glob *t, text_defn *line)
-{
- int i=0;
-
- while ((line != 0) && ((line[i].right != 0) || (line[i].right != 0)) &&
- (! ((line[i].left<=t->minh) && (line[i].right>t->minh)))) {
- i++;
- }
- return( i );
-}
-
-/*
- * find_column_index - returns the index to the column in which glob, t, exists.
- */
-
-int html_printer::find_column_index (text_glob *t)
-{
- int i=0;
-
- while ((i<indentation.no_of_columns) &&
- (! ((indentation.columns[i].left<=t->minh) &&
- (indentation.columns[i].right>t->minh)))) {
- i++;
- }
- return( i );
-}
-
-/*
- * determine_row_limit - checks each row to see if there is a gap in a cell.
- * We return the vertical position after the empty cell
- * at the start of the next line.
- */
-
-int html_printer::determine_row_limit (text_glob *start, int v)
-{
- text_glob *t;
- int i;
- int vpos, last, prev;
- text_glob *is_gap[MAX_WORDS_PER_LINE];
- text_glob zero(&start->text_style, 0, 0, 0, 0, 0, 0, 0, 0);
-
-#if 1
- if ((v == -1) && (strcmp(start->text_string, "CASE") == 0)) {
- stop();
- }
-#endif
-
- if (v >= indentation.vertical_limit) {
- return( v+1 );
- } else {
- /*
- * initially we start with all gaps in our table
- * after a gap we start a new row
- * here we set the gap array to the previous line
- */
-
- if (v>=0) {
- t = page_contents->words.get_data();
- if (t->minv < v) {
- do {
- page_contents->words.move_right();
- t = page_contents->words.get_data();
- } while ((! page_contents->words.is_equal_to_head()) &&
- (t->minv <= v));
- }
- }
- if (page_contents->words.is_equal_to_head()) {
- t = &zero;
- } else {
- page_contents->words.move_left();
- t = page_contents->words.get_data();
- }
-
- prev = t->minv;
- for (i=0; i<indentation.no_of_columns; i++) {
- is_gap[i] = t;
- }
-
- if (page_contents->words.is_equal_to_tail()) {
- rewind_text_to(start);
- return( indentation.vertical_limit );
- } else {
- page_contents->words.move_right();
- }
- t = page_contents->words.get_data();
- vpos = t->minv;
-
- // now check each row for a gap
- do {
- last = vpos;
- vpos = t->minv;
- if (vpos > indentation.vertical_limit) {
- // we have reached the end of the table, quit
- rewind_text_to(start);
- return( indentation.vertical_limit );
- }
-
- i = find_column_index(t);
- if (i>=indentation.no_of_columns) {
- error("find_column_index has failed");
- stop();
- } else {
- if (! is_on_same_line(t, last)) {
- prev = last;
- }
-
- if ((! is_on_same_line(is_gap[i], vpos)) && (! is_on_same_line(is_gap[i], prev)) &&
- (indentation.columns[i].is_used)) {
- // no word on previous line - must be a gap - force alignment of row
- rewind_text_to(start);
- return( prev );
- }
- is_gap[i] = t;
- }
- page_contents->words.move_right();
- t = page_contents->words.get_data();
- } while ((! page_contents->words.is_equal_to_head()) &&
- (vpos < indentation.vertical_limit) && (vpos >= last));
- page_contents->words.move_left();
- t = page_contents->words.get_data();
- rewind_text_to(start);
- return( indentation.vertical_limit );
- }
-}
-
-/*
- * assign_used_columns - sets the is_used field of the column array of records.
- */
-
-void html_printer::assign_used_columns (text_glob *start)
-{
- text_glob *t = start;
- int i;
-
- for (i=0; i<indentation.no_of_columns; i++) {
- indentation.columns[i].is_used = FALSE;
- }
-
- rewind_text_to(start);
- if (! page_contents->words.is_empty()) {
- do {
- i = find_column_index(t);
- if (indentation.columns[i].right != 0) {
- if (debug_table_on) {
- fprintf(stderr, "[%s] in column %d at %d..%d limit %d\n", t->text_string,
- i, t->minv, t->maxv, indentation.vertical_limit); fflush(stderr);
- }
- indentation.columns[i].is_used = TRUE;
- }
- page_contents->words.move_right();
- t = page_contents->words.get_data();
- } while ((t->minv<indentation.vertical_limit) &&
- (! page_contents->words.is_equal_to_head()));
- }
- if (debug_table_on) {
- for (i=0; i<indentation.no_of_columns; i++) {
- fprintf(stderr, " <left=%d right=%d is_used=%d> ",
- indentation.columns[i].left,
- indentation.columns[i].right,
- indentation.columns[i].is_used);
- }
- fprintf(stderr, "\n");
- fflush(stderr);
- }
-}
-
-/*
- * adjust_margin_percentages - so far we have ignored the header_indent
- * and just considered left_margin_indent..right_margin_indent.
- * (We do this since we can assume 100% is total width for main text).
- * However as header_indent can be < left_margin_indent we need to
- * recalculate the real percentages in the light of the extended width.
- */
-
-void html_printer::adjust_margin_percentages (void)
-{
- if ((header_indent < left_margin_indent) && (header_indent != -1)) {
- /*
- * recalculation necessary
- */
- int i=0;
-
- while (i<indentation.no_of_columns) {
- indentation.columns[i].percent = (indentation.columns[i].percent *
- (right_margin_indent - left_margin_indent)) /
- (right_margin_indent - header_indent);
- i++;
- }
- // remove_zero_percentage_column();
- }
-}
-
-/*
- * foreach_column_include_text - foreach column in a table place the
- * appropriate html text.
- */
-
-void html_printer::foreach_column_include_text (text_glob *start)
-{
- if (indentation.no_of_columns>0) {
- int i;
- int left, right;
- int limit=-1;
-
- start_table();
- rewind_text_to(start);
- count_right_hits(indentation.columns, indentation.no_of_columns);
- rewind_text_to(start);
-
- do {
- limit = determine_row_limit(start, limit); // find the bottom of the next row
- html.put_string("<tr valign=\"top\" align=\"left\">\n");
- i=0;
- start = page_contents->words.get_data();
- while (i<indentation.no_of_columns) {
- // reset the output position to the start of column
- rewind_text_to(start);
- output_vpos = start->minv;
- output_hpos = indentation.columns[i].left;
- // and display each column until limit
- right = column_calculate_right_margin(indentation.columns[i].left,
- indentation.columns[i].right);
- left = column_calculate_left_margin(indentation.columns[i].left,
- indentation.columns[i].right);
-
- if (right>indentation.columns[i].right) {
- if (debug_on) {
- fprintf(stderr, "assert calculated right column edge is greater than column\n"); fflush(stderr);
- // stop();
- }
- }
-
- if (left<indentation.columns[i].left) {
- if (debug_on) {
- fprintf(stderr, "assert calculated left column edge is less than column\n"); fflush(stderr);
- // stop();
- }
- }
-
- if ((indentation.columns[i].right_hits == 1) &&
- (indentation.columns[i].right != right_margin_indent)) {
- indentation.wrap_margin = FALSE;
- if (debug_on) {
- fprintf(stderr, "turning auto wrap off during column %d for start word %s\n",
- i, start->text_string);
- fflush(stderr);
- // stop();
- }
- } else {
- indentation.wrap_margin = TRUE;
- }
-
- column_display_word(i, limit, left, right, indentation.columns[i].right);
- i++;
- }
-
- if (page_contents->words.is_equal_to_tail()) {
- start = 0;
- } else {
- page_contents->words.sub_move_right();
- if (page_contents->words.is_empty()) {
- start = 0;
- } else {
- start = page_contents->words.get_data();
- }
- }
-
- html.put_string("</tr>\n");
- } while (((limit < indentation.vertical_limit) && (start != 0) &&
- (! page_contents->words.is_empty())) || (limit == -1));
- end_table();
-
- if (start == 0) {
- // finished page remove all words
- page_contents->words.start_from_head();
- while (! page_contents->words.is_empty()) {
- page_contents->words.sub_move_right();
- }
- } else if (! page_contents->words.is_empty()) {
- page_contents->words.move_left();
- }
- }
-}
-
-/*
- * write_centered_line - generates a line of centered text.
- */
-
-void html_printer::write_centered_line (text_glob *g)
-{
- int current_vpos=g->minv;
-
- move_vertical(g, center_alignment);
-
- header.written_header = FALSE;
- supress_sub_sup = TRUE;
- output_vpos = g->minv;
- output_hpos = g->minh;
- do {
- char *postword=html_position_text(g, left_margin_indent, right_margin_indent);
-
- if (! header.written_header) {
- if (g->is_raw_command) {
- html.put_string((char *)g->text_string);
- } else {
- translate_to_html(g);
- }
- if (postword != 0) {
- html.put_string(postword);
- }
- need_one_newline = TRUE;
- issued_newline = FALSE;
- }
- page_contents->words.move_right();
- g = page_contents->words.get_data();
- } while ((! page_contents->words.is_equal_to_head()) && (is_on_same_line(g, current_vpos)));
- page_contents->words.move_left(); // so when we move right we land on the word following this centered line
- need_one_newline = TRUE;
-}
-
-/*
- * is_in_middle - returns TRUE if the text defn, t, is in the middle of the page.
- */
-
-int html_printer::is_in_middle (int left, int right)
-{
- return( abs(abs(left-left_margin_indent) - abs(right_margin_indent-right)) <= CENTER_TOLERANCE );
-}
-
-/*
- * single_centered_line - returns TRUE if first is a centered line with a different
- * margin to second.
- */
-
-int html_printer::single_centered_line (text_defn *first, text_defn *second, text_glob *g)
-{
- return(
- ((count_columns(first) == 1) && (first[0].left != left_margin_indent) &&
- (first[0].left != second[0].left) && is_in_middle(first->left, first->right))
- );
-}
-
-/*
- * check_able_to_use_center - returns TRUE if we can see a centered line.
- */
-
-int html_printer::check_able_to_use_center (text_glob *g)
-{
- if (auto_on && table_on && ((! is_on_same_line(g, output_vpos)) || issued_newline) && (! using_table_for_indent())) {
- // we are allowed to check for centered line
- // first check to see whether we might be looking at a set of columns
- struct text_defn last_guess[MAX_WORDS_PER_LINE];
- struct text_defn last_words[MAX_WORDS_PER_LINE];
-
- collect_columns(last_words, last_guess, 0, 0, MAX_WORDS_PER_LINE);
-
- rewind_text_to(g);
- if ((count_columns(last_guess) == 1) && (is_in_middle(last_guess[0].left, last_guess[0].right))) {
- write_centered_line(g);
- return( TRUE );
- }
- }
- return( FALSE );
-}
-
-/*
- * check_able_to_use_table - examines forthcoming text to see whether we can
- * better format it by using an html transparent table.
- */
-
-int html_printer::check_able_to_use_table (text_glob *g)
-{
- if (auto_on && ((! is_on_same_line(g, output_vpos)) || issued_newline) && (! using_table_for_indent())) {
- // we are allowed to check for table
-
- if ((output_hpos != right_margin_indent) && (found_use_for_table(g))) {
- foreach_column_include_text(g);
- return( TRUE );
- }
- }
- return( FALSE );
-}
-
-/*
- * move_vertical - if we are using html auto formatting then decide whether to
- * break the line via a <br> or a </p><p> sequence.
- */
-
-void html_printer::move_vertical (text_glob *g, paragraph_type p)
-{
- int r = font::res;
- int height = (g->text_style.point_size+2)*r/72; // --fixme-- we always assume VS is PS+2 (could do better)
- int temp_vpos;
-
- if (auto_on) {
- if ((more_than_line_break(output_vpos, g->minv, height)) || (p != current_paragraph->para_type)) {
- end_paragraph();
- begin_paragraph(p);
- } else {
- html_newline();
- }
- } else {
- if (output_vpos == -1) {
- temp_vpos = g->minv;
- } else {
- temp_vpos = output_vpos;
- }
-
- force_begin_paragraph();
- if (need_one_newline) {
- html_newline();
- temp_vpos += height;
- } else {
- need_one_newline = TRUE;
- }
-
- while ((temp_vpos < g->minv) && (more_than_line_break(temp_vpos, g->minv, height))) {
- html_newline();
- temp_vpos += height;
- }
- }
-}
-
-/*
- * emit_space - emits a space within html, it checks for the font type and
- * will change font depending upon, g. Courier spaces are larger
- * than roman so we need consistancy when changing between them.
- */
-
-void html_printer::emit_space (text_glob *g, int force_space)
-{
- if (! current_paragraph->need_paragraph) {
- // only generate a space if we have written a word - as html will ignore it otherwise
- if ((output_style != g->text_style) && (g->text_style.f != 0)) {
- terminate_current_font();
- }
- if (force_space || (g->minh > output_hpos)) {
- html.put_string(" ");
- }
- change_font(g, TRUE);
- }
-}
-
-/*
- * html_position_text - determine whether the text is subscript/superscript/normal
- * or a header.
- */
-
-char *html_printer::html_position_text (text_glob *g, int left_margin, int right_margin)
-{
- char *postword=0;
-
- begin_paragraph(left_alignment);
-
- if ((! header.written_header) &&
- (is_on_same_line(g, output_vpos) ||
- pretend_is_on_same_line(g, left_margin, right_margin))) {
-
- /*
- * check whether we should supress superscripts and subscripts.
- * I guess we might be able to do better by examining text on this line
- * --fixme--
- */
-
- if ((! is_on_same_line(g, output_vpos)) && (pretend_is_on_same_line(g, left_margin, right_margin))) {
- supress_sub_sup = TRUE;
- }
- header.written_header = FALSE;
- force_begin_paragraph();
-
- // check whether we need to insert white space between words on 'same' line
- if (pretend_is_on_same_line(g, left_margin, right_margin)) {
- emit_space(g, TRUE);
- }
-
- // check whether the font was reset after generating an image
- if (output_style.f == 0) {
- change_font(g, TRUE);
- }
-
- if (looks_like_subscript(g)) {
-
- g->text_style.point_size = output_style.point_size;
- g->minv = output_vpos; // this ensures that output_vpos doesn't alter
- // which allows multiple subscripted words
- move_horizontal(g, left_margin);
- html.put_string("<sub>");
- postword = "</sub>";
- } else if (looks_like_superscript(g)) {
-
- g->text_style.point_size = output_style.point_size;
- g->minv = output_vpos;
-
- move_horizontal(g, left_margin);
- html.put_string("<sup>");
- postword = "</sup>";
- } else {
- move_horizontal(g, left_margin);
- }
- supress_sub_sup = FALSE;
- } else {
- // we have found a new line
- if (! header.written_header) {
- move_vertical(g, left_alignment);
- }
- header.written_header = FALSE;
-
- if (processed_header(g)) {
- // we must not alter output_vpos as we have peeped at the next word
- // and set vpos to this - to ensure we do not generate a <br> after
- // a heading. (The html heading automatically generates a line break)
- output_hpos = left_margin;
- return( postword );
- } else {
- force_begin_paragraph();
- if ((! is_in_table()) && (margin_on)) {
- make_html_indent(left_margin);
- }
- if (g->minh-left_margin != 0) {
- make_html_indent(g->minh-left_margin);
- }
- change_font(g, TRUE);
- supress_sub_sup = FALSE;
- }
- }
- output_vpos = g->minv;
- output_hpos = g->maxh;
- return( postword );
-}
-
-
-int html_printer::html_position_region (void)
-{
- int r = font::res;
- int height = output_style.point_size*r/72;
- int temp_vpos;
- int is_center = FALSE;
-
- if (output_style.point_size != 0) {
- if (output_vpos != start_region_vpos) {
-
- // graphic starts on a different line
- if (output_vpos == -1) {
- temp_vpos = start_region_vpos;
- } else {
- temp_vpos = output_vpos;
- }
- supress_sub_sup = TRUE;
- if (need_one_newline) {
- html_newline();
- temp_vpos += height;
- } else {
- need_one_newline = TRUE;
- }
-
- while ((temp_vpos < start_region_vpos) &&
- (more_than_line_break(temp_vpos, start_region_vpos, height))) {
- html_newline();
- temp_vpos += height;
- }
- }
- }
- if (auto_on && (is_in_middle(start_region_hpos, end_region_hpos))) {
- is_center = TRUE;
- } else {
- if (start_region_hpos > get_left()) {
- make_html_indent(start_region_hpos-get_left());
- }
- }
- output_vpos = start_region_vpos;
- output_hpos = start_region_hpos;
- return( is_center );
-}
-
-/*
- * gs_x - translate and scale the x axis
- */
-
-int html_printer::gs_x (int x)
-{
- x += IMAGE_BOARDER_PIXELS/2;
- return((x-start_region_hpos)*postscript_res/font::res);
-}
-
-
-/*
- * gs_y - translate and scale the y axis
- */
-
-int html_printer::gs_y (int y)
-{
- int yoffset=((int)(A4_PAGE_LENGTH*(double)font::res))-end_region_vpos;
-
- y += IMAGE_BOARDER_PIXELS/2;
- return( (y+yoffset)*postscript_res/font::res );
-}
-
-
-void html_printer::troff_position_text (text_glob *g)
-{
- change_font(g, FALSE);
-
- troff.put_string("V");
- troff.put_number(gs_y(g->maxv));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->minh));
- troff.put_string("\n");
-}
-
-void html_printer::troff_change_font (const char *fontname, int size, int font_no)
-{
- troff.put_string("x font ");
- troff.put_number(font_no);
- troff.put_string(" ");
- troff.put_string(fontname);
- troff.put_string("\nf");
- troff.put_number(font_no);
- troff.put_string("\ns");
- troff.put_number(size*1000);
- troff.put_string("\n");
-}
-
-
-void html_printer::set_style(const style &sty)
-{
-#if 0
- const char *fontname = sty.f->get_name();
- if (fontname == 0)
- fatal("no internalname specified for font");
-
- change_font(fontname, (font::res/(72*font::sizescale))*sty.point_size);
-#endif
-}
-
-void html_printer::end_of_line()
-{
- flush_sbuf();
- output_hpos = -1;
-}
-
-void html_printer::html_display_word (text_glob *g)
-{
-#if 0
- if (strcmp(g->text_string, "ot") == 0) {
- stop();
- }
-#endif
- if (! check_able_to_use_table(g)) {
- char *postword=html_position_text(g, left_margin_indent, right_margin_indent);
-
- if (! header.written_header) {
- if (g->is_raw_command) {
- html.put_string((char *)g->text_string);
- } else {
- translate_to_html(g);
- }
- if (postword != 0) {
- html.put_string(postword);
- }
- need_one_newline = TRUE;
- issued_newline = FALSE;
- }
- }
-}
-
-void html_printer::troff_display_word (text_glob *g)
-{
- troff_position_text(g);
- if (g->is_raw_command) {
- int l=strlen((char *)g->text_string);
- if (l == 1) {
- troff.put_string("c");
- troff.put_string((char *)g->text_string);
- troff.put_string("\n");
- } else if (l > 1) {
- troff.put_string("C");
- troff.put_troffps_char((char *)g->text_string);
- troff.put_string("\n");
- }
- } else {
- troff_position_text(g);
- troff.put_string("t");
- troff.put_translated_string((const char *)g->text_string);
- troff.put_string("\n");
- }
-}
-
-void html_printer::display_word (text_glob *g, int is_to_html)
-{
- if (is_to_html) {
- html_display_word(g);
- } else if ((g->is_raw_command) && (g->is_html_command)) {
- // found a raw html command inside a graphic glob.
- // We should emit the command to the html device, but of course we
- // cannot place it correctly as we are dealing with troff words.
- // Remember output_vpos will refer to troff and not html.
- html.put_string((char *)g->text_string);
- } else {
- troff_display_word(g);
- }
-}
-
-/*
- * translate_to_html - translates a textual string into html text
- */
-
-void html_printer::translate_to_html (text_glob *g)
-{
- char buf[MAX_STRING_LENGTH];
-
- str_translate_to_html(g->text_style.f, buf, MAX_STRING_LENGTH,
- g->text_string, g->text_length, TRUE);
- html.put_string(buf);
-}
-
-/*
- * html_knows_about - given a character name, troff, return TRUE
- * if we know how to display this character using
- * html unicode.
- */
-
-int html_printer::html_knows_about (char *troff)
-{
- // --fixme-- needs to have similar code as above
- return( FALSE );
-}
-
-/*
- * display_fill - generates a troff format fill command
- */
-
-void html_printer::display_fill (graphic_glob *g)
-{
- troff.put_string("Df ") ;
- troff.put_number(g->fill);
- troff.put_string(" 0\n");
-}
-
-/*
- * display_line - displays a line using troff format
- */
-
-void html_printer::display_line (graphic_glob *g, int is_to_html)
-{
- if (is_to_html) {
- fatal("cannot emit lines in html");
- }
- if (g->code == 'l') {
- // straight line
-
- troff.put_string("V");
- troff.put_number(gs_y(g->point[0].y));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->point[0].x));
- troff.put_string("\n");
-
- display_fill(g);
-
- troff.put_string("Dl ");
- troff.put_number((g->point[1].x-g->point[0].x)*postscript_res/font::res);
- troff.put_string(" ");
- troff.put_number((g->point[1].y-g->point[0].y)*postscript_res/font::res);
- troff.put_string("\n");
- // printf("line %c %d %d %d %d size %d\n", (char)g->code, g->point[0].x, g->point[0].y,
- // g->point[1].x, g->point[1].y, g->size);
- } else if ((g->code == 'c') || (g->code == 'C')) {
- // circle
-
- int xradius = (g->maxh - g->minh) / 2;
- int yradius = (g->maxv - g->minv) / 2;
- // center of circle or elipse
-
- troff.put_string("V");
- troff.put_number(gs_y(g->minv+yradius));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->minh));
- troff.put_string("\n");
-
- display_fill(g);
-
- if (g->code == 'c') {
- troff.put_string("Dc ");
- } else {
- troff.put_string("DC ");
- }
-
- troff.put_number(xradius*2*postscript_res/font::res);
- troff.put_string("\n");
-
- } else if ((g->code == 'e') || (g->code == 'E')) {
- // ellipse
-
- int xradius = (g->maxh - g->minh) / 2;
- int yradius = (g->maxv - g->minv) / 2;
- // center of elipse - this is untested
-
- troff.put_string("V");
- troff.put_number(gs_y(g->minv+yradius));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->minh));
- troff.put_string("\n");
-
- display_fill(g);
-
- if (g->code == 'e') {
- troff.put_string("De ");
- } else {
- troff.put_string("DE ");
- }
-
- troff.put_number(xradius*2*postscript_res/font::res);
- troff.put_string(" ");
- troff.put_number(yradius*2*postscript_res/font::res);
- troff.put_string("\n");
- } else if ((g->code == 'p') || (g->code == 'P')) {
- // polygon
- troff.put_string("V");
- troff.put_number(gs_y(g->yc));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->xc));
- troff.put_string("\n");
-
- display_fill(g);
-
- if (g->code == 'p') {
- troff.put_string("Dp");
- } else {
- troff.put_string("DP");
- }
-
- int i;
- int xc=g->xc;
- int yc=g->yc;
- for (i=0; i<g->nopoints; i++) {
- troff.put_string(" ");
- troff.put_number((g->point[i].x-xc)*postscript_res/font::res);
- troff.put_string(" ");
- troff.put_number((g->point[i].y-yc)*postscript_res/font::res);
- xc = g->point[i].x;
- yc = g->point[i].y;
- }
- troff.put_string("\n");
- } else if (g->code == 'a') {
- // arc
- troff.put_string("V");
- troff.put_number(gs_y(g->yc));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->xc));
- troff.put_string("\n");
-
- display_fill(g);
-
- troff.put_string("Da");
-
- int i;
-
- for (i=0; i<g->nopoints; i++) {
- troff.put_string(" ");
- troff.put_number(g->point[i].x*postscript_res/font::res);
- troff.put_string(" ");
- troff.put_number(g->point[i].y*postscript_res/font::res);
- }
- troff.put_string("\n");
- } else if (g->code == '~') {
- // spline
- troff.put_string("V");
- troff.put_number(gs_y(g->yc));
- troff.put_string("\n");
-
- troff.put_string("H");
- troff.put_number(gs_x(g->xc));
- troff.put_string("\n");
-
- display_fill(g);
-
- troff.put_string("D~");
-
- int i;
- int xc=g->xc;
- int yc=g->yc;
- for (i=0; i<g->nopoints; i++) {
- troff.put_string(" ");
- troff.put_number((g->point[i].x-xc)*postscript_res/font::res);
- troff.put_string(" ");
- troff.put_number((g->point[i].y-yc)*postscript_res/font::res);
- xc = g->point[i].x;
- yc = g->point[i].y;
- }
- troff.put_string("\n");
- }
-}
-
-
-/*
- * flush_sbuf - flushes the current sbuf into the list of glyphs.
- */
-
-void html_printer::flush_sbuf()
-{
- if (sbuf_len > 0) {
- int r=font::res; // resolution of the device
- set_style(sbuf_style);
-
- page_contents->add(&sbuf_style, sbuf, sbuf_len,
- 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;
- sbuf_len = 0;
- sbuf_dmark_hpos = -1;
- }
-}
-
-
-void html_printer::set_line_thickness(const environment *env)
-{
- line_thickness = env->size;
- printf("line thickness = %d\n", line_thickness);
-}
-
-void html_printer::draw(int code, int *p, int np, const environment *env)
-{
- switch (code) {
-
- case 'l':
- if (np == 2) {
- page_contents->add_line(code,
- env->hpos, env->vpos, env->hpos+p[0], env->vpos+p[1],
- env->size, fill);
- } else {
- error("2 arguments required for line");
- }
- 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':
- // 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;
- }
- // firstly lets add our current position to polygon
- int oh=env->hpos;
- int ov=env->vpos;
- int i=0;
-
- while (i<np) {
- p[i+0] += oh;
- p[i+1] += ov;
- oh = p[i+0];
- ov = p[i+1];
- i += 2;
- }
- // now store polygon in page
- page_contents->add_polygon(code, np, p, env->hpos, env->vpos, env->size, fill);
- }
- break;
- case 'E':
- // fall through
- case 'e':
- if (np != 2) {
- error("2 arguments required for ellipse");
- break;
- }
- page_contents->add_line(code,
- env->hpos, env->vpos-p[1]/2, env->hpos+p[0], env->vpos+p[1]/2,
- env->size, fill);
-
- break;
- case 'C':
- // fill circle
-
- case 'c':
- {
- // troff adds an extra argument to C
- if (np != 1 && !(code == 'C' && np == 2)) {
- error("1 argument required for circle");
- break;
- }
- page_contents->add_line(code,
- env->hpos, env->vpos-p[0]/2, env->hpos+p[0], env->vpos+p[0]/2,
- env->size, fill);
- }
- break;
- case 'a':
- {
- if (np == 4) {
- double c[2];
-
- if (adjust_arc_center(p, c)) {
- page_contents->add_arc('a', env->hpos, env->vpos, p, c, env->size, fill);
- } else {
- // a straignt line
- page_contents->add_line('l', env->hpos, env->vpos, p[0]+p[2], p[1]+p[3], env->size, fill);
- }
- } else {
- error("4 arguments required for arc");
- }
- }
- break;
- case '~':
- {
- if (np & 1) {
- error("even number of arguments required for spline");
- break;
- }
- if (np == 0) {
- error("no arguments for spline");
- break;
- }
- // firstly lets add our current position to spline
- int oh=env->hpos;
- int ov=env->vpos;
- int i=0;
-
- while (i<np) {
- p[i+0] += oh;
- p[i+1] += ov;
- oh = p[i+0];
- ov = p[i+1];
- i += 2;
- }
- page_contents->add_spline('~', env->hpos, env->vpos, np, p, env->size, fill);
- }
- break;
- case 'f':
- {
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- fill = p[0];
- if (fill < 0 || fill > FILL_MAX) {
- // This means fill with the current color.
- fill = FILL_MAX + 1;
- }
- break;
- }
-
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
-}
-
-
-void html_printer::begin_page(int n)
-{
- page_number = n;
- html.begin_comment("Page: ").comment_arg(i_to_a(page_number)).end_comment();;
- no_of_printed_pages++;
-
- output_style.f = 0;
- output_space_code = 32;
- output_draw_point_size = -1;
- output_line_thickness = -1;
- output_hpos = -1;
- output_vpos = -1;
-}
-
-void testing (text_glob *g) {}
-
-void html_printer::flush_graphic (void)
-{
- graphic_glob g;
-
- graphic_level = 0;
- page_contents->is_in_graphic = FALSE;
-
- g.minv = -1;
- g.maxv = -1;
- calculate_region_range(&g);
- if (g.minv != -1) {
- page_contents->make_new_region(&g);
- }
- move_region_to_page();
-}
-
-void html_printer::end_page(int)
-{
- flush_sbuf();
- flush_graphic();
- flush_page();
-}
-
-font *html_printer::make_font(const char *nm)
-{
- return html_font::load_html_font(nm);
-}
-
-html_printer::~html_printer()
-{
- if (fseek(tempfp, 0L, 0) < 0)
- fatal("fseek on temporary file failed");
- html.set_file(stdout);
- fputs("<html>\n", stdout);
- fputs("<head>\n", stdout);
- fputs("<meta name=\"Content-Style\" content=\"text/css\">\n", stdout);
- write_title(TRUE);
- fputs("</head>\n", stdout);
- fputs("<body>\n", stdout);
- write_title(FALSE);
- header.write_headings(stdout);
- {
- extern const char *Version_string;
- html.begin_comment("Creator : ")
- .comment_arg("groff ")
- .comment_arg("version ")
- .comment_arg(Version_string)
- .end_comment();
- }
- {
-#ifdef LONG_FOR_TIME_T
- long
-#else
- time_t
-#endif
- t = time(0);
- html.begin_comment("CreationDate: ")
- .comment_arg(ctime(&t))
- .end_comment();
- }
- html.begin_comment("Total number of pages: ").comment_arg(i_to_a(no_of_printed_pages)).end_comment();
- html.end_line();
- html.copy_file(tempfp);
- fputs("</body>\n", stdout);
- fputs("</html>\n", stdout);
- fclose(tempfp);
-}
-
-
-/*
- * calculate_region_range - calculates the vertical range for words and lines
- * within the region lists.
- */
-
-void html_printer::calculate_region_range (graphic_glob *r)
-{
- text_glob *w;
- graphic_glob *g;
-
- if (! page_contents->region_lines.is_empty()) {
- page_contents->region_lines.start_from_head();
- do {
- g = page_contents->region_lines.get_data();
- if ((r->minv == -1) || (g->minv < r->minv)) {
- r->minv = g->minv;
- }
- if ((r->maxv == -1) || (g->maxv > r->maxv)) {
- r->maxv = g->maxv;
- }
- page_contents->region_lines.move_right();
- } while (! page_contents->region_lines.is_equal_to_head());
- }
- if (! page_contents->region_words.is_empty()) {
- page_contents->region_words.start_from_head();
- do {
- w = page_contents->region_words.get_data();
-
- if ((r->minv == -1) || (w->minv < r->minv)) {
- r->minv = w->minv;
- }
- if ((r->maxv == -1) || (w->maxv > r->maxv)) {
- r->maxv = w->maxv;
- }
- page_contents->region_words.move_right();
- } while (! page_contents->region_words.is_equal_to_head());
- }
-}
-
-
-/*
- * move_region_to_page - moves lines and words held in the temporary region
- * list to the page list.
- */
-
-void html_printer::move_region_to_page (void)
-{
- text_glob *w;
- graphic_glob *g;
-
- page_contents->region_lines.start_from_head();
- while (! page_contents->region_lines.is_empty()) {
- g = page_contents->region_lines.get_data(); // remove from our temporary region list
- page_contents->lines.add(g); // and add to the page list
- page_contents->region_lines.sub_move_right();
- }
- page_contents->region_words.start_from_head();
- while (! page_contents->region_words.is_empty()) {
- w = page_contents->region_words.get_data(); // remove from our temporary region list
- page_contents->words.add(w); // and add to the page list
- page_contents->region_words.sub_move_right();
- }
-}
-
-/*
- * is_graphic_start - returns TRUE if the start of table, pic, eqn was seen.
- */
-
-int is_graphic_start (char *s)
-{
- return( (strcmp(s, "graphic-start") == 0) ||
- ((strcmp(s, "table-start") == 0) && (table_image_on)) );
-}
-
-/*
- * is_graphic_end - return TRUE if the end of a table, pic, eqn was seen.
- */
-
-int is_graphic_end (char *s)
-{
- return( (strcmp(s, "graphic-end") == 0) ||
- ((strcmp(s, "table-end") == 0) && (table_image_on)) );
-}
-
-/*
- * special - handle all x X requests from troff. For grohtml they allow users
- * to pass raw html commands, turn auto linked headings off/on and
- * also allow tbl, eqn & pic say what commands they have generated.
- */
-
-void html_printer::special(char *s, const environment *env)
-{
- if (s != 0) {
- if (is_graphic_start(s)) {
- graphic_level++;
- if (graphic_level == 1) {
- page_contents->is_in_graphic = TRUE; // add words and lines to temporary region lists
- }
- } else if (is_graphic_end(s) && (graphic_level > 0)) {
- graphic_level--;
- if (graphic_level == 0) {
- flush_graphic();
- }
- } else if (strncmp(s, "html:", 5) == 0) {
- int r=font::res; // resolution of the device
- char buf[MAX_STRING_LENGTH];
- font *f=sbuf_style.f;
-
- if (f == NULL) {
- int found=FALSE;
-
- f = font::load_font("TR", &found);
- }
- str_translate_to_html(f, buf, MAX_STRING_LENGTH,
- &s[5], strlen(s)-5, FALSE);
- page_contents->add_html_command(&sbuf_style, buf, strlen(buf),
-
- // need to pass rest of string through to html output during flush
-
- env->vpos-env->size*r/72, env->hpos,
- env->vpos , env->hpos);
- // assume that the html command has no width, if it does then we hopefully troff
- // will have fudged this in a macro and requested that the formatting move right by
- // the appropriate width
- } else if (strncmp(s, "index:", 6) == 0) {
- cutoff_heading = atoi(&s[6]);
- }
- }
-}
-
-void set_image_type (char *type)
-{
- if (strcmp(type, "gif") == 0) {
- image_type = gif;
- } else if (strcmp(type, "png") == 0) {
- image_type = png;
- image_device = "png256";
- } else if (strncmp(type, "png", 3) == 0) {
- image_type = png;
- image_device = type;
- }
-}
-
-printer *make_printer()
-{
- return new html_printer;
-}
-
-static void usage();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- while ((c = getopt(argc, argv, "F:atTvdgmx?I:r:")) != EOF)
- switch(c) {
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "grohtml version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'a':
- auto_on = FALSE;
- break;
- case 't':
- table_on = FALSE;
- break;
- case 'T':
- table_image_on = FALSE;
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'I':
- // user specifying the type of images we should generate
- set_image_type(optarg);
- break;
- case 'r':
- // resolution (dots per inch for an image)
- image_res = atoi(optarg);
- break;
- case 'd':
- // debugging on
- debug_on = TRUE;
- break;
- case 'x':
- debug_table_on = TRUE;
- break;
- case 'g':
- // do not guess title and headings
- guess_on = FALSE;
- break;
- case 'm':
- // leave margins alone
- margin_on = TRUE;
- break;
- case '?':
- usage();
- break;
- default:
- assert(0);
- }
- if (optind >= argc) {
- do_file("-");
- } else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- delete pr;
- return 0;
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-avdgmt?] [-r resolution] [-F dir] [-I imagetype] [files ...]\n",
- program_name);
- exit(1);
-}
diff --git a/contrib/groff/grohtml/html.h b/contrib/groff/grohtml/html.h
deleted file mode 100644
index 3700775..0000000
--- a/contrib/groff/grohtml/html.h
+++ /dev/null
@@ -1,57 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-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_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 &put_html_char (char);
- FILE *get_file();
-private:
- FILE *fp;
- int max_line_length; // not including newline
- int col;
- int need_space;
- int fixed_point;
-};
-
-inline FILE *simple_output::get_file()
-{
- return fp;
-}
-
diff --git a/contrib/groff/grohtml/html_chars.h b/contrib/groff/grohtml/html_chars.h
deleted file mode 100644
index 76f094c..0000000
--- a/contrib/groff/grohtml/html_chars.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000 Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote output.cc
- * but it owes a huge amount of ideas and raw code from
- * James Clark (jjc@jclark.com) grops/ps.cc.
- *
- * html_chars.h
- *
- * provides a diacritical character combination table for html
- */
-
-
-
-struct diacritical_desc {
- char *mark;
- char *second_troff_char;
- char translation;
-};
-
-
-static struct diacritical_desc diacritical_table[] = {
- { "ad" , "aeiouyAEIOU" , ':' , }, /* */
- { "ac" , "cC" , ',' , }, /* cedilla */
- { "aa" , "aeiouyAEIOU" , '\'' , }, /* acute */
- { NULL , NULL , (char)0, },
-};
diff --git a/contrib/groff/grohtml/ordered_list.h b/contrib/groff/grohtml/ordered_list.h
deleted file mode 100644
index 5f0c7e1..0000000
--- a/contrib/groff/grohtml/ordered_list.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 1999 Free Software Foundation, Inc.
- *
- * Ordered list, a template module for simple ordered list manipulation.
- *
- * Gaius Mulley (gaius@glam.ac.uk)
- */
-
-template <class T> class list_element
-{
- public:
- list_element<T> *right;
- list_element<T> *left;
-
- list_element (T *in);
- T *data;
-};
-
-template <class T> class ordered_list
-{
- private:
- list_element<T> *head;
- list_element<T> *tail;
- list_element<T> *ptr;
- public:
- ordered_list (void);
- ~ ordered_list (void);
- void add (T* in);
- 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);
- T *move_right_get_data (void);
- T *move_left_get_data (void);
- T *get_data (void);
-};
-
-
-template <class T> ordered_list<T>::ordered_list()
- : head(0), tail(0), ptr(0)
-{
-}
-
-template <class T> ordered_list<T>::~ordered_list()
-{
- list_element<T> *temp=head;
-
- do {
- temp = head;
- if (temp != 0) {
- head = head->right;
- delete temp;
- }
- } while ((head != 0) && (head != tail));
-}
-
-template <class T> list_element<T>::list_element(T *in)
- : right(0), left(0)
-{
- data = in;
-}
-
-template <class T> void ordered_list<T>::add(T *in)
-{
- list_element<T> *t = new list_element<T>(in); // create a new list element with data field initialized
- list_element<T> *last;
-
- if (in == 0) {
- fatal("cannot add NULL to ordered list");
- }
-
- if (head == 0) {
- head = t;
- tail = t;
- t->left = t;
- t->right = t;
- } else {
- last = tail;
-
- while ((last != head) && (in->is_less(in, last->data))) {
- last = last->left;
- }
-
- if (in->is_less(in, last->data)) {
- 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 onto 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;
- }
- }
- }
-}
-
-template <class T> void ordered_list<T>::sub_move_right (void)
-{
- list_element<T> *t=ptr->right;
-
- if (head == tail) {
- head = 0;
- if (tail != 0) {
- delete tail;
- }
- tail = 0;
- ptr = 0;
- } 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;
- }
-}
-
-template <class T> void ordered_list<T>::start_from_head (void)
-{
- ptr = head;
-}
-
-template <class T> void ordered_list<T>::start_from_tail (void)
-{
- ptr = tail;
-}
-
-template <class T> int ordered_list<T>::is_empty (void)
-{
- return( head == 0 );
-}
-
-template <class T> int ordered_list<T>::is_equal_to_tail (void)
-{
- return( ptr == tail );
-}
-
-template <class T> int ordered_list<T>::is_equal_to_head (void)
-{
- return( ptr == head );
-}
-
-template <class T> void ordered_list<T>::move_left (void)
-{
- ptr = ptr->left;
-}
-
-template <class T> void ordered_list<T>::move_right (void)
-{
- ptr = ptr->right;
-}
-
-template <class T> T* ordered_list<T>::get_data (void)
-{
- return( ptr->data );
-}
-
-template <class T> T* ordered_list<T>::move_right_get_data (void)
-{
- ptr = ptr->right;
- if (ptr == head) {
- return( 0 );
- } else {
- return( ptr->data );
- }
-}
-
-template <class T> T* ordered_list<T>::move_left_get_data (void)
-{
- ptr = ptr->left;
- if (ptr == tail) {
- return( 0 );
- } else {
- return( ptr->data );
- }
-}
diff --git a/contrib/groff/grohtml/output.cc b/contrib/groff/grohtml/output.cc
deleted file mode 100644
index d6dc188..0000000
--- a/contrib/groff/grohtml/output.cc
+++ /dev/null
@@ -1,257 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000 Free Software Foundation, Inc.
- *
- * Gaius Mulley (gaius@glam.ac.uk) wrote output.cc
- * but it owes a huge amount of ideas and raw code from
- * James Clark (jjc@jclark.com) grops/ps.cc.
- *
- * output.cc
- *
- * provide the simple low level output routines needed by html.cc
- */
-
-/*
-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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-
-#include <time.h>
-#include "html.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if !defined(TRUE)
-# define TRUE (1==1)
-#endif
-#if !defined(FALSE)
-# define FALSE (1==0)
-#endif
-
-
-/*
- * the classes and methods for simple_output manipulation
- */
-
-simple_output::simple_output(FILE *f, int n)
-: fp(f), max_line_length(n), col(0), need_space(0), fixed_point(0)
-{
-}
-
-simple_output &simple_output::set_file(FILE *f)
-{
- fp = f;
- col = 0;
- 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()
-{
- if (col != 0) {
- putc('\n', fp);
- col = 0;
- need_space = 0;
- }
- return *this;
-}
-
-simple_output &simple_output::special(const char *s)
-{
- return *this;
-}
-
-simple_output &simple_output::simple_comment(const char *s)
-{
- if (col != 0)
- putc('\n', fp);
- fputs("<!-- ", fp);
- fputs(s, fp);
- fputs(" -->\n", fp);
- col = 0;
- need_space = 0;
- return *this;
-}
-
-simple_output &simple_output::begin_comment(const char *s)
-{
- if (col != 0)
- putc('\n', fp);
- fputs("<!-- ", fp);
- fputs(s, fp);
- col = 5 + strlen(s);
- return *this;
-}
-
-simple_output &simple_output::end_comment()
-{
- if (need_space) {
- putc(' ', fp);
- }
- fputs(" -->\n", fp);
- col = 0;
- need_space = 0;
- return *this;
-}
-
-simple_output &simple_output::comment_arg(const char *s)
-{
- int len = strlen(s);
-
- if (col + len + 1 > max_line_length) {
- fputs("\n ", fp);
- col = 1;
- }
- fputs(s, fp);
- col += len + 1;
- 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)
-{
- putc(c, fp);
- col++;
- need_space = 0;
- return *this;
-}
-
-simple_output &simple_output::put_string(const char *s, int n)
-{
- int i=0;
-
- while (i<n) {
- fputc(s[i], fp);
- i++;
- }
- col += n;
- return *this;
-}
-
-simple_output &simple_output::put_translated_string(const char *s)
-{
- int i=0;
-
- while (s[i] != (char)0) {
- if ((s[i] & 0x7f) == s[i]) {
- fputc(s[i], fp);
- }
- i++;
- }
- col += i;
- return *this;
-}
-
-simple_output &simple_output::put_string(const char *s)
-{
- int i=0;
-
- while (s[i] != '\0') {
- fputc(s[i], fp);
- i++;
- }
- col += i;
- return *this;
-}
-
-struct html_2_postscript {
- char *html_char;
- char *postscript_char;
-};
-
-static struct html_2_postscript ps_char_conversions[] = {
- { "+-", "char177", },
- { "eq", "=" , },
- { "mu", "char215", },
- { NULL, NULL , },
-};
-
-
-/*
- * this is an aweful hack which attempts to translate html characters onto
- * postscript characters. Can this be done inside the devhtml files?
- *
- * or should we read the devps files and find out the translations?
- */
-
-simple_output &simple_output::put_troffps_char (const char *s)
-{
- int i=0;
-
- while (ps_char_conversions[i].html_char != NULL) {
- if (strcmp(s, ps_char_conversions[i].html_char) == 0) {
- put_string(ps_char_conversions[i].postscript_char);
- return *this;
- } else {
- i++;
- }
- }
- put_string(s);
- return *this;
-}
-
-simple_output &simple_output::put_number(int n)
-{
- char buf[1 + INT_DIGITS + 1];
- sprintf(buf, "%d", n);
- int len = strlen(buf);
- put_string(buf, len);
- need_space = 1;
- return *this;
-}
-
-simple_output &simple_output::put_float(double d)
-{
- char buf[128];
-
- sprintf(buf, "%.4f", d);
- int len = strlen(buf);
- put_string(buf, len);
- need_space = 1;
- return *this;
-}
-
-
-simple_output &simple_output::put_symbol(const char *s)
-{
- int len = strlen(s);
-
- if (need_space) {
- putc(' ', fp);
- col++;
- }
- fputs(s, fp);
- col += len;
- need_space = 1;
- return *this;
-}
diff --git a/contrib/groff/grolbp/Makefile.sub b/contrib/groff/grolbp/Makefile.sub
deleted file mode 100644
index d60008b..0000000
--- a/contrib/groff/grolbp/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grolbp
-MAN1=grolbp.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lbp.o
-CCSRCS=$(srcdir)/lbp.cc
diff --git a/contrib/groff/grolbp/charset.h b/contrib/groff/grolbp/charset.h
deleted file mode 100644
index adc76f4..0000000
--- a/contrib/groff/grolbp/charset.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Definition of the WP54 character set
-
-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/grolbp/grolbp.man b/contrib/groff/grolbp/grolbp.man
deleted file mode 100644
index 767197d..0000000
--- a/contrib/groff/grolbp/grolbp.man
+++ /dev/null
@@ -1,353 +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 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
-.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 \-F dir
-.OP \-\-fontdir= dir
-.OP \-h
-.OP \-\-help
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.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
-.B \-v
-.TQ
-.B \-\-version
-Print the version number.
-.TP
-.BI \-F dir
-.TQ
-.BI \-\-fontdir= dir
-Search directory
-.IB dir /devlbp
-for font and device description files.
-.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
-To set the paper size in the
-.B DESC
-file, insert in that file a line containing
-.B papersize
-.IR desired_papersize ,
-where
-.I desired_papersize
-is:
-.IP \(bu 4
-One of the recognized paper sizes: `a4', `letter', `legal' or `executive'.
-.IP \(bu 4
-A custom defined paper size, as described in the
-.B CUSTOM PAPER SIZES
-subsection below.
-.IP \(bu 4
-The name of a file (e.g.
-.IR /etc/papersize )
-whose first line must be the desired paper size in one of the above formats.
-.PP
-If there are various papersize lines in the
-.B DESC
-file, only the first valid one is used.
-.PP
-To set the paper size in the command line, add
-.sp 1
-.in +2m
-.BI \-p \ desired_papersize
-.in -2m
-.sp 1
-or
-.sp 1
-.in +2m
-.BI \-\-papersize= desired_papersize
-.in -2m
-.sp 1
-to the other
-.B grolbp
-options, where
-.B desired_papersize
-is in the same format as in the
-.B DESC
-file.
-.PP
-Paper sizes are case insensitive (i.e., `A4' is the same as `a4').
-.PP
-If no paper size is specified in the
-.B DESC
-file or the command line, a default size of A4 is used.
-.TP
-.SH CUSTOM PAPER SIZES
-Custom defined paper sizes are in the form
-.BI cust length x width
-where
-.I length
-and
-.I width
-are the dimensions of the paper you want to to use, specified in printer
-units (1/300 of an inch).
-For instance, to print in a postcard sized paper which is two inches long
-and four inches wide you can insert a line containing
-.sp 1
-.in +2m
-.B papersize cust600x1200
-.in -2m
-.sp 1
-at the beginning of the
-.B DESC
-file.
-.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
-As with paper sizes, 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 .
-.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/grolbp/lbp.cc b/contrib/groff/grolbp/lbp.cc
deleted file mode 100644
index fe06e1c..0000000
--- a/contrib/groff/grolbp/lbp.cc
+++ /dev/null
@@ -1,772 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1994 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/*
-TODO
-
- - Add X command to include bitmaps
-*/
-#define _GNU_SOURCE
-
-#include "driver.h"
-#include "lbp.h"
-#include "charset.h"
-
-#include "nonposix.h"
-
-#ifdef HAVE_STRNCASECMP
-#ifdef NEED_DECLARATION_STRNCASECMP
-extern "C" {
- // SunOS's string.h fails to declare this.
- int strncasecmp(const char *, const char *, int);
-}
-#endif /* NEED_DECLARATION_STRNCASECMP */
-#endif /* HAVE_STRNCASECMP */
-
-static short int papersize = -1, // papersize
- orientation = -1 , // orientation
- paperlength = 0, // Custom Paper size
- paperwidth = 0,
- ncopies = 1; // Number of copies
-
-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();
- ~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, int dot = 0);
- 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;
-};
-
-// Compatibility section.
-//
-// Here we define some functions not present in some of the targets
-// platforms
-#ifndef HAVE_STRSEP
-// Solaris 8 doesn't have the strsep function
-static char *strsep(char **pcadena, const char *delim)
-{
- char *p;
-
- p = strtok(*pcadena,delim);
- *pcadena = strtok(NULL,delim);
- return p;
-
-};
-#endif
-
-#ifndef HAVE_STRDUP
-// Ditto with OS/390 and strdup
-static char *strdup(const char *s)
-{
- char *result;
-
- result = (char *)malloc(strlen(s)+1);
- if (result != NULL) strcpy(result,s);
- return result;
-
-}; // strdup
-
-#endif
-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 Recongnize bitmaped fonts by the first character of it's name
- if (arg[0] == 'N') this->is_scalable = 0;
- // fprintf(stderr,"Loading font \"%s\" \n",arg);
- }; // if (strcmp(command, "lbpname")
- // fprintf(stderr,"Loading font %s \"%s\" in %s at %d\n",command,arg,filename,lineno);
-};
-
-static void wp54charset()
-{
- 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()
-: fill_pattern(1),
- fill_mode(0),
- cur_hpos(-1),
- cur_font(0),
- cur_size(0),
- cur_symbol_set(0),
- line_thickness(-1)
-{
-#ifdef SET_BINARY
- SET_BINARY(fileno(stdout));
-#endif
- 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
- if (papersize < 0) papersize = 14; // Default paper size is A4
- 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<");
-}
-
-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.
-// nam[strlen(f->lbpname)-2]; // The font name without other data.
- int cpi; // The font size in characters per inch
- // (Bitmaped 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 avaiable 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 were only two bitmaped fonts shiped with the printer.
- if (!strcasecmp(nam,"courier"))
- { // Courier font
- if (siz >= 12) cpi = 10;
- else cpi = 17;
- };
- if (!strcasecmp(nam,"elite"))
- { // Elite font
- 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;
-
-}; // lbp_printer::font_name
-
-void lbp_printer::set_char(int index, font *f, const environment *env, int w, const char *name)
-{
- int code = f->get_code(index);
-
- 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*300)/72));
- } else
- { // Bitmaped font
- lbpprintf("\033Pz%s.IBML\033\\\n",font_name(psf,env->size));
- };
- lbpputs("\033)' 1"); // Select IBML and IBMR1 symbol set
- cur_size = env->size;
- cur_font = psf;
- cur_symbol_set = 0;
- }
- 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*300)/72));
- }; // if ( cur_symbol_set == 3 )
- 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*300)/72));
- lbpputs("\033(\"!!0\033)\"!!1"); // Select symbol font
- break;
- case 4: lbpputs("\033)\"! 1\033(\"!$2"); // Select PS symbol set
- break;
- }; // switch (symbol_set)
-
-// if (symbol_set == 1) lbpputs("\033(d"); // Select wp54 symbol set
-// else lbpputs("\033('$2\033)' 1"); // Select IBML and IBMR1 symbol sets
- 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*300)/72));
- cur_size = env->size;
- }
- 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("Openinig temp 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);
- /* lets 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;
-
-}; // lbp_printer::vdmflush
-
-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;
- };
-}; // setfillmode
-
-inline void
-lbp_printer::polygon( int hpos,int vpos,int np,int *p)
-{
- //int points[np+2],i;
- 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)
-{
- 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;
- } // if (np != ...
- if (p[0] == 0) line_thickness = 1;
- if (p[0] < 0) // Default = 1 point
- line_thickness = (int)(env->size*30/72);
- line_thickness = (int)((abs(p[0])*env->size)/10);
- if ((line_thickness > 16 ) && (!vdminited()))
- { /* for greater thickness we must use VDM */
- vdmstart();
- /* vdmlinewidth(line_thickness); already done in
- * vdmstart() */
- };
- if (vdminited()) vdmlinewidth(line_thickness);
- // fprintf(stderr,"\nthickness: %d == %d, size %d\n",
- // p[0],line_thickness,env->size );
- } // else
- 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] == 1)
- 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;
- }; // if (p[0] >= 0 && p[0] <= 1000)
- break;
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }; // switch (code)
- return ;
-};
-
-font *lbp_printer::make_font(const char *nm)
-{
- return lbp_font::load_lbp_font(nm);
-}
-
-
-
-printer *make_printer()
-{
- return new lbp_printer;
-}
-
-static struct
-{
- const char *name;
- int code;
-} papersizes[] =
-{{ "A4", 14 },
-{ "letter", 30 },
-{ "legal", 32 },
-{ "executive", 40 },
-};
-
-
-static int set_papersize(const char *papersize)
-{
- int i;
-
- // First test for a standard (i.e. supported directly by the printer)
- // papersize
- for (i = 0 ; i < sizeof(papersizes)/sizeof(papersizes[0]); i++)
- {
- if (strcasecmp(papersizes[i].name,papersize) == 0)
- return papersizes[i].code;
- };
-
- // Now test for a custom papersize
- if (strncasecmp("cust",papersize,4) == 0)
- {
- char *p ,
- *p1,
- *papsize;
-
- p = papsize = strdup(&papersize[4]);
- if (papsize == NULL) return -1;
- p1 = strsep(&p,"x");
- if (p == NULL)
- { // let's test for an uppercase x
- p = papsize ;
- p1 = strsep(&p,"X");
- if (p == NULL) { free(papsize); return -1;};
- }; // if (p1 == NULL)
- paperlength = atoi(p1);
- if (paperlength == 0) { free(papsize); return -1;};
- paperwidth = atoi(p);
- if (paperwidth == 0) { free(papsize); return -1;};
- free(papsize);
- return 82;
- }; // if (strcnasecmp("cust",papersize,4) == 0)
-
- return -1;
-};
-
-static int handle_papersize_command(const char *arg)
-{
- int n = set_papersize(arg);
-
- if (n < 0)
- { // If is not a standard nor custom paper size
- // let's see if it's a file (i.e /etc/papersize )
- FILE *f = fopen(arg,"r");
- if (f != NULL)
- { // the file exists and is readable
- char psize[255],*p;
- fgets(psize,254,f);
- fclose(f);
- // set_papersize doesn't like the trailing \n
- p = psize; while (*p) p++;
- if (*(--p) == '\n') *p = 0x00;
-
- n = set_papersize(psize);
- }; // if (f != NULL)
- }; // if (n < 0)
-
- return n;
-}; // handle_papersize_command
-
-
-static void handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- // papersize command
- if (strcasecmp(command, "papersize") == 0) {
- // We give priority to command line options
- if (papersize > 0) return;
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`papersize' command requires an argument");
- else
- {
- int n = handle_papersize_command(arg);
- if (n < 0)
- error_with_file_and_line(filename, lineno,
- "unknown paper size `%1'", arg);
- else
- papersize = n;
-
- }; // if (arg == 0) ... else ...
- }; // if (strcasecmp(command, "papersize")
-
- // 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,
- "`papersize' 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,
- "`orientation' command requires an argument");
- };
- }; // if (arg == 0) ... else ...
- }; // if (strcasecmp(command, "orientation") == 0)
-};
-
-static struct option long_options[] = {
- {"orientation",1,NULL,'o'},
- {"version",0,NULL,'v'},
- {"copies",1,NULL,'c'},
- {"landscape",0,NULL,'l'},
- {"papersize",1,NULL,'p'},
- {"fontdir",1,NULL,'F'},
- {"help",0,NULL,'h'},
- {0, 0, 0, 0}
- };
-
-static void usage()
-{
- fprintf(stderr,
- "usage: %s [-lvh] [-c n] [-p paper_size] [-F dir] [-o or] "\
- " [files ...]\n"\
- " -o --orientation=[portrait|landscape]\n"\
- " -v --version\n"\
- " -c --copies=numcopies\n"\
- " -l --landscape\n"\
- " -p --papersize=paper_size\n"\
- " -F --fontdir=dir\n"\
- " -h --help\n",
- program_name);
- exit(1);
-}; // usage
-
-int main(int argc, char **argv)
-{
- if (program_name == NULL) program_name = strdup(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, "F:p:lvo:c:h",\
- long_options, &option_index);
- switch (c) {
- case 'F' : font::command_line_font_dir(optarg);
- break;
- case 'p' : {
- int n = handle_papersize_command(optarg);
- if (n < 0)
- error("unknown paper size `%1'", optarg);
- else
- papersize = n;
- break;
- };
- case 'l' : orientation = 1;
- break;
- case 'v' : {
- extern const char *version_string;
- fprintf(stderr, "grolbp version %s\n",\
- version_string);
- fflush(stderr);
- 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 'h' : usage();
- break;
-
-
- }; // switch (c)
- }; // while (c > 0 )
-
- if (optind >= argc)
- do_file("-");
-
- while (optind < argc) {
- do_file(argv[optind++]);
- };
-
- lbpputs("\033c\033<");
- return 0;
-};
diff --git a/contrib/groff/grolbp/lbp.h b/contrib/groff/grolbp/lbp.h
deleted file mode 100644
index 04e6cec..0000000
--- a/contrib/groff/grolbp/lbp.h
+++ /dev/null
@@ -1,512 +0,0 @@
-
-// -*- C -*-
-/* Copyright (C) 1994 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 inline void
-lbpprintf(char *format, ... )
-{ /* Taken from cjet */
- va_list stuff;
-
- va_start(stuff, format);
- vfprintf(lbpoutput, format, stuff);
- va_end(stuff);
-};
-
-static inline void
-lbpputs(char *data)
-{
- fputs(data,lbpoutput);
-};
-
-static inline void
-lbpputc(char c)
-{
- fputc(c,lbpoutput);
-};
-
-
-static inline void
-lbpsavestatus(int index )
-{
- fprintf(lbpoutput,"\033[%d%%y",index);
-};
-
-static inline void
-lbprestorestatus(int index )
-{
- fprintf(lbpoutput,"\033[%d%cz",index ,'%');
-};
-
-static inline void
-lbpsavepos(int index)
-{
- fprintf(lbpoutput,"\033[1;%d;0x",index);
-};
-
-static inline void
-lbprestorepos(int index)
-{
- fprintf(lbpoutput,"\033[0;%d;0x",index);
-};
-
-static inline void
-lbprestoreposx(int index)
-{
- fprintf(lbpoutput,"\033[0;%d;1x",index);
-};
-
-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 inline void vdmprintf(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));
-}; /* vdmorigin */
-
-
-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 inline void
-vdmprintf(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\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));
-}; /* polyline */
-
-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");
-}; /* polyline */
-
-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");
-
-}; /* vdmpolygon */
-
-
-/************************************************************************
- * Highter level auxiliary functions *
- ************************************************************************/
-static inline int
-vdminited()
-{
- return (vdmoutput != NULL);
-}; /* vdminited */
-
-
-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 float pend = 0.0;
- static int dy = 0, despx = 0, despy = 0, sigpend = 0;
- int dxnew ,dynew, sg;
- char xcoord[4],ycoord[4];
- float 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;
-
-}; /* splinerel */
-
-/**********************************************************************
- * The following code to draw splines is adapted from the transfig package
- */
-static void
-quadratic_spline(double a1,double b1, double a2, double b2, \
- double a3, double b3, double a4, double b4)
-{
- double x1, y1, x4, y4;
- double xmid, ymid;
-
- x1 = a1; y1 = b1;
- x4 = a4; y4 = b4;
- xmid = (a2 + a3)/2.0;
- ymid = (b2 + b3)/2.0;
- if ((fabs(x1 - xmid) < THRESHOLD) && (fabs(y1 - ymid) < THRESHOLD)) {
- splinerel(xmid,ymid,0);
-/* fprintf(tfp, "PA%.4f,%.4f;\n", xmid, ymid);*/
- }
- else {
- quadratic_spline(x1, y1, ((x1+a2)/2.0), ((y1+b2)/2.0),
- ((3.0*a2+a3)/4.0), ((3.0*b2+b3)/4.0), xmid, ymid);
- }
-
- if ((fabs(xmid - x4) < THRESHOLD) && (fabs(ymid - y4) < THRESHOLD)) {
- splinerel(x4,y4,0);
-/* fprintf(tfp, "PA%.4f,%.4f;\n", x4, y4);*/
- }
- else {
- quadratic_spline(xmid, ymid, ((a2+3.0*a3)/4.0), ((b2+3.0*b3)/4.0),
- ((a3+x4)/2.0), ((b3+y4)/2.0), x4, y4);
- };
-}; /* quadratic_spline */
-
-#define XCOORD(i) numbers[(2*i)]
-#define YCOORD(i) numbers[(2*i)+1]
-static void
-vdmspline(int numpoints, int ox,int oy, int *numbers)
-{
- double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4;
- double x1, y1, x2, y2;
- char xcoord[4],ycoord[4];
- int i;
-
- /*p = s->points;
- x1 = p->x/ppi;*/
- x1 = ox;
- y1 = oy;
-/* p = p->next;
- x2 = p->x/ppi;
- y2 = p->y/ppi;*/
- x2 = ox + XCOORD(0);
- y2 = oy + YCOORD(0);
- cx1 = (x1 + x2)/2.0;
- cy1 = (y1 + y2)/2.0;
- cx2 = (x1 + 3.0*x2)/4.0;
- cy2 = (y1 + 3.0*y2)/4.0;
-
-/* fprintf(stderr,"Spline %d (%d,%d)\n",numpoints,(int)x1,(int)y1);*/
- vdmprintf("1%s%s",vdmnum((int)x1,xcoord),vdmnum((int)y1,ycoord));
- splinerel(x1,y1,-1);
- splinerel(cx1,cy1,0);
-/* fprintf(tfp, "PA%.4f,%.4f;PD%.4f,%.4f;\n",
- x1, y1, cx1, cy1);*/
-
- /*for (p = p->next; p != NULL; p = p->next) {*/
- for (i = 1; i < (numpoints); i++) {
- x1 = x2;
- y1 = y2;
-/* x2 = p->x/ppi;
- y2 = p->y/ppi;*/
- x2 = x1 + XCOORD(i);
- y2 = y1 + YCOORD(i);
- cx3 = (3.0*x1 + x2)/4.0;
- cy3 = (3.0*y1 + y2)/4.0;
- cx4 = (x1 + x2)/2.0;
- cy4 = (y1 + y2)/2.0;
- /* fprintf(stderr,"Point (%d,%d) - (%d,%d)\n",(int)x1,(int)(y1),(int)x2,(int)y2);*/
- quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4);
- cx1 = cx4;
- cy1 = cy4;
- cx2 = (x1 + 3.0*x2)/4.0;
- cy2 = (y1 + 3.0*y2)/4.0;
- }
- x1 = x2;
- y1 = y2;
-/* p = s->points->next;
- x2 = p->x/ppi;
- y2 = p->y/ppi;*/
- x2 = ox + XCOORD(0);
- y2 = oy + YCOORD(0);
- cx3 = (3.0*x1 + x2)/4.0;
- cy3 = (3.0*y1 + y2)/4.0;
- cx4 = (x1 + x2)/2.0;
- cy4 = (y1 + y2)/2.0;
- splinerel(x1,y1,0);
- splinerel(x1,y1,1);
- /*vdmprintf("%s%s",vdmnum((int)(x1-lx),xcoord),\
- vdmnum((int)(y1-ly),ycoord));*/
- vdmprintf("\x1e\n");
-/* fprintf(tfp, "PA%.4f,%.4f;PU;\n", x1, y1);*/
-
-
-}; /* vdmspline */
-
-
-#endif
diff --git a/contrib/groff/grolj4/Makefile.sub b/contrib/groff/grolj4/Makefile.sub
deleted file mode 100644
index bbb0cff..0000000
--- a/contrib/groff/grolj4/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grolj4
-MAN1=grolj4.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lj4.o
-CCSRCS=$(srcdir)/lj4.cc
diff --git a/contrib/groff/grolj4/grolj4.man b/contrib/groff/grolj4/grolj4.man
deleted file mode 100644
index e2d5826..0000000
--- a/contrib/groff/grolj4/grolj4.man
+++ /dev/null
@@ -1,144 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1994-2000 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.
-.TP
-.BI \-F dir
-Search directory
-.IB dir /devlj4
-for font and device description files.
-.LP
-The following four commands are available additionally in the
-.B DESC
-file:
-.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@/tmac.lj4
-Macros for use with
-.BR grolj4 .
-.SH BUGS
-Small dots.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
diff --git a/contrib/groff/grolj4/lj4.cc b/contrib/groff/grolj4/lj4.cc
deleted file mode 100644
index 0c23a45..0000000
--- a/contrib/groff/grolj4/lj4.cc
+++ /dev/null
@@ -1,700 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1994 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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"
-
-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 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
-
-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 (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();
- ~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;
-};
-
-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()
-: 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);
- if (paper_size < 0)
- paper_size = 0; // default to letter
- 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 index, font *f, const environment *env, int w, const char *name)
-{
- int code = f->get_code(index);
-
- 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 '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;
-}
-
-static
-int lookup_paper_size(const char *s)
-{
- for (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 handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- if (strcmp(command, "papersize") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`papersize' command requires an argument");
- else if (paper_size < 0) {
- int n = lookup_paper_size(arg);
- if (n < 0)
- error_with_file_and_line(filename, lineno,
- "unknown paper size `%1'", arg);
- else
- paper_size = n;
- }
- }
-}
-
-static void usage();
-
-extern "C" int optopt, optind;
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- font::set_unknown_desc_command_handler(handle_unknown_desc_command);
- int c;
- while ((c = getopt(argc, argv, ":F:p:d:lvw:c:")) != EOF)
- switch(c) {
- case 'l':
- landscape_flag = 1;
- break;
- case ':':
- if (optopt == 'd') {
- fprintf(stderr, "duplex assumed to be long-side\n");
- duplex_flag = 1;
- } else
- fprintf(stderr, "option -%c requires an operand\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
- paper_size = n;
- break;
- }
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "grolj4 version %s\n", Version_string);
- fflush(stderr);
- 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 '?':
- usage();
- break;
- default:
- assert(0);
- }
-#ifdef SET_BINARY
- SET_BINARY(fileno(stdout));
-#endif
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- delete pr;
- return 0;
-}
-
-static void usage()
-{
- fprintf(stderr,
- "usage: %s [-lv] [-d [n]] [-c n] [-p paper_size]\n"
- " [-w n] [-F dir] [files ...]\n",
- program_name);
- exit(1);
-}
diff --git a/contrib/groff/grops/Makefile.sub b/contrib/groff/grops/Makefile.sub
deleted file mode 100644
index 4182527..0000000
--- a/contrib/groff/grops/Makefile.sub
+++ /dev/null
@@ -1,12 +0,0 @@
-PROG=grops
-MAN1=grops.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- ps.o \
- psrm.o
-CCSRCS=\
- $(srcdir)/ps.cc \
- $(srcdir)/psrm.cc
-HDRS=\
- $(srcdir)/ps.h
diff --git a/contrib/groff/grops/TODO b/contrib/groff/grops/TODO
deleted file mode 100644
index da67973..0000000
--- a/contrib/groff/grops/TODO
+++ /dev/null
@@ -1,29 +0,0 @@
-Read PFB files directly.
-
-Generate %%DocumentMedia comment.
-
-Generate %%For comment.
-
-Generate %%Title comment.
-
-For efficiency it might be better to have the printer interface have
-support for the t and u commands.
-
-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/grops/ps.cc b/contrib/groff/grops/ps.cc
deleted file mode 100644
index c065daf..0000000
--- a/contrib/groff/grops/ps.cc
+++ /dev/null
@@ -1,1541 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-#include "nonposix.h"
-
-#include "ps.h"
-#include <time.h>
-
-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;
-
-// Non-zero if -b was specified on the command line.
-static int bflag = 0;
-unsigned broken_flags = 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;
-}
-
-inline double transform_fill(int fill)
-{
- return 1 - fill/double(FILL_MAX);
-}
-
-// 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 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_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_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 style {
- font *f;
- int point_size;
- int height;
- int slant;
- style();
- style(font *, int, int, int);
- int operator==(const style &) const;
- int operator!=(const style &) const;
-};
-
-style::style() : f(0)
-{
-}
-
-style::style(font *p, int sz, int h, int sl)
-: f(p), point_size(sz), height(h), slant(sl)
-{
-}
-
-int style::operator==(const style &s) const
-{
- return (f == s.f && 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;
- style output_style;
- int output_hpos;
- int output_vpos;
- int output_draw_point_size;
- int line_thickness;
- int output_line_thickness;
- int fill;
- unsigned char output_space_code;
- enum { MAX_DEFINED_STYLES = 50 };
- style defined_styles[MAX_DEFINED_STYLES];
- int ndefined_styles;
- int next_encoding_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 *);
- 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(const environment *);
- void fill_path();
- void encode_fonts();
- void define_encoding(const char *, int);
- void reencode_font(ps_font *);
-public:
- ps_printer();
- ~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);
- font *make_font(const char *);
- void end_of_line();
-};
-
-ps_printer::ps_printer()
-: out(0, MAX_LINE_LENGTH),
- pages_output(0),
- sbuf_len(0),
- output_hpos(-1),
- output_vpos(-1),
- line_thickness(-1),
- fill(FILL_MAX + 1),
- ndefined_styles(0),
- next_encoding_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");
- paper_length = font::paperlength;
- 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++;
-}
-
-void ps_printer::set_char(int i, font *f, const environment *env, int w, const char *name)
-{
- if (i == space_char_index || invis_count > 0)
- return;
- unsigned char code = f->get_code(i);
- style sty(f, 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) {
- 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;
-}
-
-static char *make_encoding_name(int encoding_index)
-{
- static char buf[3 + INT_DIGITS + 1];
- sprintf(buf, "ENC%d", encoding_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;
- char buf[256];
- while (fgets(buf, 512, 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;
- 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));
- out.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");
-}
-
-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::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 (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;
- }
- 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_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(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;
- }
- }
-}
-
-void ps_printer::fill_path()
-{
- if (fill > FILL_MAX)
- out.put_symbol("BL");
- else
- out.put_float(transform_fill(fill)).put_symbol("FL");
-}
-
-void ps_printer::draw(int code, int *p, int np, const environment *env)
-{
- if (invis_count > 0)
- return;
- 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();
- }
- else {
- set_line_thickness(env);
- out.put_symbol("ST");
- }
- break;
- case 'l':
- if (np != 2) {
- error("2 arguments required for line");
- break;
- }
- set_line_thickness(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();
- }
- else {
- set_line_thickness(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();
- }
- else {
- set_line_thickness(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(env);
- out.put_symbol("ST");
- }
- 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))
- 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;
- }
- case 'f':
- {
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- fill = p[0];
- if (fill < 0 || fill > FILL_MAX) {
- // This means fill with the current color.
- fill = FILL_MAX + 1;
- }
- break;
- }
- default:
- error("unrecognised drawing command `%1'", char(code));
- break;
- }
-
- output_hpos = output_vpos = -1;
-}
-
-
-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");
- out.put_symbol("BP");
- out.simple_comment("EndPageSetup");
-}
-
-void ps_printer::end_page(int)
-{
- flush_sbuf();
- 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");
- out.put_symbol("end");
- out.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);
- {
- extern const char *Version_string;
- 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 0
- fprintf(out.get_file(), "%%%%DocumentMedia: () %g %g 0 () ()\n",
- font::paperwidth*72.0/font::res,
- paper_length*72.0/font::res);
-#endif
- 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");
- out.simple_comment("BeginProlog");
- rm.output_prolog(out);
- if (!(broken_flags & NO_SETUP_SECTION)) {
- out.simple_comment("EndProlog");
- out.simple_comment("BeginSetup");
- }
- 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();
- 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)
-{
- 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("X command without `ps:' tag ignored");
- return;
- }
- for (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("superflous 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");
- out.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;
-}
-
-static void usage();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- while ((c = getopt(argc, argv, "F:glmc:w:vb:")) != EOF)
- switch(c) {
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "grops version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'c':
- if (sscanf(optarg, "%d", &ncopies) != 1 || ncopies <= 0) {
- error("bad number of copies `%s'", optarg);
- ncopies = 1;
- }
- break;
- case 'g':
- guess_flag = 1;
- break;
- case 'l':
- landscape_flag = 1;
- break;
- case 'm':
- manual_feed_flag = 1;
- break;
- case 'F':
- font::command_line_font_dir(optarg);
- break;
- case 'w':
- if (sscanf(optarg, "%d", &linewidth) != 1 || linewidth < 0) {
- error("bad linewidth `%1'", optarg);
- linewidth = -1;
- }
- break;
- case 'b':
- // XXX check this
- broken_flags = atoi(optarg);
- bflag = 1;
- break;
- case '?':
- usage();
- break;
- default:
- assert(0);
- }
- font::set_unknown_desc_command_handler(handle_unknown_desc_command);
-#ifdef SET_BINARY
- SET_BINARY(fileno(stdout));
-#endif
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- delete pr;
- return 0;
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-glmv] [-b n] [-c n] [-w n] [-F dir] [files ...]\n",
- program_name);
- exit(1);
-}
diff --git a/contrib/groff/grops/ps.h b/contrib/groff/grops/ps.h
deleted file mode 100644
index 6e78597..0000000
--- a/contrib/groff/grops/ps.h
+++ /dev/null
@@ -1,122 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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_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
-};
diff --git a/contrib/groff/grops/psfig.diff b/contrib/groff/grops/psfig.diff
deleted file mode 100644
index 5be080d..0000000
--- a/contrib/groff/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/grops/psrm.cc b/contrib/groff/grops/psrm.cc
deleted file mode 100644
index 91b7e6f..0000000
--- a/contrib/groff/grops/psrm.cc
+++ /dev/null
@@ -1,1103 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "stringclass.h"
-#include "cset.h"
-
-#include "ps.h"
-
-#define PROLOGUE "prologue"
-
-static void print_ps_string(const string &s, FILE *outfp);
-
-cset white_space("\n\r \t");
-string an_empty_string;
-
-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) == 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;
- 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;
- 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 = fopen(r->filename, "r");
- 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_LINE_MAX 255
-#define PS_MAGIC "%!PS-Adobe-"
-
-static int ps_get_line(char *buf, FILE *fp)
-{
- int c = getc(fp);
- if (c == EOF) {
- buf[0] = '\0';
- return 0;
- }
- current_lineno++;
- int i = 0;
- int err = 0;
- while (c != '\r' && c != '\n' && c != EOF) {
- if ((c < 0x1b && !white_space(c)) || c == 0x7f)
- error("illegal input character code %1", int(c));
- else if (i < PS_LINE_MAX)
- buf[i++] = c;
- else if (!err) {
- err = 1;
- error("PostScript file non-conforming "
- "because length of line exceeds 255");
- }
- 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;
-}
-
-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]) == *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(const char *buf, const char *comment)
-{
- if (buf[0] != '%' || buf[1] != '%')
- return 0;
- for (buf += 2; *comment; comment++, buf++)
- if (*buf != *comment)
- return 0;
- if (comment[-1] == ':')
- return buf;
- if (*buf == '\0' || white_space(*buf))
- return buf;
- 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 *)
-{
- char buf[PS_LINE_MAX + 2];
- 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]) == *ptr - start
- && memcmp(s[i], start, *ptr - start) == 0)
- return i;
- return -1;
-}
-
-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);
- }
- char buf[PS_LINE_MAX + 2];
- 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, 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(c, fp);
- }
- else if (c == '\n')
- current_lineno++;
- }
- char buf[PS_LINE_MAX + 2];
- 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, 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]) == 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]);
- char buf[PS_LINE_MAX + 2];
- 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 (strlen(buf) < sizeof(PS_MAGIC) - 1
- || memcmp(buf, PS_MAGIC, sizeof(PS_MAGIC) - 1) != 0) {
- if (outfp) {
- do {
- if (!(broken_flags & STRIP_PERCENT_BANG)
- || buf[0] != '%' || buf[1] != '!')
- fputs(buf, outfp);
- } while (ps_get_line(buf, fp));
- }
- }
- else {
- if (!(broken_flags & STRIP_PERCENT_BANG) && outfp)
- fputs(buf, 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, 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/grotty/Makefile.sub b/contrib/groff/grotty/Makefile.sub
deleted file mode 100644
index 91d3908..0000000
--- a/contrib/groff/grotty/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=grotty
-MAN1=grotty.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=tty.o
-CCSRCS=$(srcdir)/tty.cc
diff --git a/contrib/groff/grotty/TODO b/contrib/groff/grotty/TODO
deleted file mode 100644
index 3f23dc3..0000000
--- a/contrib/groff/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/grotty/tty.cc b/contrib/groff/grotty/tty.cc
deleted file mode 100644
index 63d8fb8..0000000
--- a/contrib/groff/grotty/tty.cc
+++ /dev/null
@@ -1,474 +0,0 @@
-// -*- C++ -*-
-/* 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "device.h"
-
-#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 = 1;
-static int underline_flag = 1;
-static int overstrike_flag = 1;
-static int draw_flag = 1;
-
-enum {
- UNDERLINE_MODE = 01,
- BOLD_MODE = 02,
- VDRAW_MODE = 04,
- HDRAW_MODE = 010
-};
-
-// Mode to use for bold-underlining.
-static unsigned char bold_underline_mode = BOLD_MODE|UNDERLINE_MODE;
-
-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 = int(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 = (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;
- short hpos;
- unsigned int code;
- unsigned char mode;
- void *operator new(size_t);
- void operator delete(void *);
- inline int draw_mode() { return mode & (VDRAW_MODE|HDRAW_MODE); }
-};
-
-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;
- void add_char(unsigned int, int, int, unsigned char);
-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 put_char(unsigned int);
- void begin_page(int) { }
- void end_page(int page_length);
- font *make_font(const char *);
-};
-
-tty_printer::tty_printer(const char *device) : cached_v(0)
-{
- is_utf8 = !strcmp(device,"utf8");
- nlines = 66;
- lines = new glyph *[nlines];
- for (int i = 0; i < nlines; i++)
- lines[i] = 0;
-}
-
-tty_printer::~tty_printer()
-{
- a_delete lines;
-}
-
-void tty_printer::set_char(int i, font *f, const environment *env, int w, const char *name)
-{
- if (w != font::hor)
- fatal("width of character not equal to horizontal resolution");
- add_char(f->get_code(i), env->hpos, env->vpos, ((tty_font *)f)->get_mode());
-}
-
-void tty_printer::add_char(unsigned int c, int h, int v, 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->hpos = hpos;
- g->code = c;
- g->mode = mode;
-
- // The list will be reversed later. After reversal, it must be in
- // increasing order of hpos, with 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)->draw_mode() >= g->draw_mode()))
- break;
-
- g->next = *pp;
- *pp = g;
-}
-
-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;
- }
- while (len >= 0) {
- add_char('|', env->hpos, v, VDRAW_MODE);
- len -= font::vert;
- v += font::vert;
- }
- }
- if (p[1] == 0) {
- // horizontal line
- int h = env->hpos;
- int len = p[0];
- if (len < 0) {
- h += len;
- len = -len;
- }
- while (len >= 0) {
- add_char('-', h, env->vpos, HDRAW_MODE);
- len -= font::hor;
- h += font::hor;
- }
- }
-}
-
-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';
- fputs(buf,stdout);
- } else {
- putchar(wc);
- }
-}
-
-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;
- for (p = g; p; delete p, p = nextp) {
- nextp = p->next;
- if (nextp && p->hpos == nextp->hpos) {
- if (p->draw_mode() == HDRAW_MODE && nextp->draw_mode() == VDRAW_MODE) {
- 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;
- putchar('\t');
- hpos = next_tab_pos;
- }
- }
- for (; hpos < p->hpos; hpos++)
- putchar(' ');
- }
- assert(hpos == p->hpos);
- if (p->mode & UNDERLINE_MODE) {
- putchar('_');
- putchar('\b');
- }
- if (p->mode & BOLD_MODE) {
- put_char(p->code);
- putchar('\b');
- }
- put_char(p->code);
- hpos++;
- }
- 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 usage();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int c;
- while ((c = getopt(argc, argv, "F:vhfbuoBUd")) != EOF)
- switch(c) {
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "grotty version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'b':
- // Do not embolden by overstriking.
- bold_flag = 0;
- break;
- case 'u':
- // Do not underline.
- underline_flag = 0;
- break;
- case 'o':
- // Do not overstrike (other than emboldening and underlining).
- overstrike_flag = 0;
- break;
- case 'B':
- // Do bold-underlining as bold.
- bold_underline_mode = BOLD_MODE;
- break;
- case 'U':
- // Do bold-underlining as underlining.
- bold_underline_mode = 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 '?':
- usage();
- break;
- default:
- assert(0);
- }
- if (optind >= argc)
- do_file("-");
- else {
- for (int i = optind; i < argc; i++)
- do_file(argv[i]);
- }
- delete pr;
- return 0;
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-hfvbuodBU] [-F dir] [files ...]\n",
- program_name);
- exit(1);
-}
diff --git a/contrib/groff/hpftodit/Makefile.sub b/contrib/groff/hpftodit/Makefile.sub
deleted file mode 100644
index f5ff13e..0000000
--- a/contrib/groff/hpftodit/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=hpftodit
-MAN1=hpftodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=hpftodit.o
-CCSRCS=$(srcdir)/hpftodit.cc
diff --git a/contrib/groff/hpftodit/hpftodit.cc b/contrib/groff/hpftodit/hpftodit.cc
deleted file mode 100644
index 2e5978c..0000000
--- a/contrib/groff/hpftodit/hpftodit.cc
+++ /dev/null
@@ -1,812 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1994 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/*
-TODO
-put human readable font name in device file
-devise new names for useful characters
-use --- for unnamed characters
-option to specify symbol sets to look in
-make it work with TrueType fonts
-put filename in error messages (or fix lib)
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-#include <errno.h>
-#include "assert.h"
-#include "lib.h"
-#include "posix.h"
-#include "errarg.h"
-#include "error.h"
-#include "cset.h"
-#include "nonposix.h"
-
-#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
-
-const int MULTIPLIER = 3;
-
-inline
-int scale(int n)
-{
- return n * MULTIPLIER;
-}
-
-// tags in TFM file
-
-enum tag_type {
- min_tag = 400,
- type_tag = 400,
- symbol_set_tag = 404,
- msl_tag = 403,
- inches_per_point_tag = 406,
- design_units_per_em_tag = 408,
- posture_tag = 409,
- stroke_weight_tag = 411,
- spacing_tag = 412,
- slant_tag = 413,
- appearance_width_tag = 414,
- word_spacing_tag = 421,
- x_height_tag = 424,
- lower_ascent_tag = 427,
- lower_descent_tag = 428,
- width_tag = 433,
- left_extent_tag = 435,
- right_extent_tag = 436,
- ascent_tag = 437,
- descent_tag = 438,
- pair_kern_tag = 439,
- typeface_tag = 442,
- max_tag = 443
- };
-
-// types in TFM file
-
-enum {
- ENUM_TYPE = 1,
- BYTE_TYPE = 2,
- USHORT_TYPE = 3,
- FLOAT_TYPE = 5,
- SIGNED_SHORT_TYPE = 17
- };
-
-
-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();
- 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;
- entry() : present(0) { }
-};
-
-struct char_info {
- uint16 msl;
- uint16 width;
- uint16 ascent;
- int16 descent;
- int16 left_extent;
- uint16 right_extent;
- uint16 symbol_set;
- unsigned char code;
-};
-
-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(0, 'N'), // Latin 1
- SYMBOL_SET(6, 'J'), // Microsoft Publishing
- SYMBOL_SET(2, 'N'), // Latin 2
- 0
- };
-
-uint16 special_symbol_sets[] = {
- SYMBOL_SET(8, 'M'),
- SYMBOL_SET(5, 'M'),
- SYMBOL_SET(15, 'U'),
- 0
- };
-
-entry tags[max_tag + 1 - min_tag];
-
-char_info *char_table;
-uint32 nchars;
-
-int msl_name_table_size = 0;
-name_list **msl_name_table = 0;
-
-int n_symbol_sets;
-symbol_set *symbol_set_table;
-
-static int special_flag = 0;
-static int italic_flag = 0;
-static int italic_sep;
-
-static void usage();
-static const char *xbasename(const char *);
-static void read_tags(File &);
-static void check_type();
-static void check_units(File &);
-static int read_map(const char *);
-static void require_tag(tag_type);
-static void dump_tags(File &f);
-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();
-static void read_char_table(File &f);
-
-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 debug_flag = 0;
-
- while ((opt = getopt(argc, argv, "dsvi:")) != EOF) {
- switch (opt) {
- case 'd':
- debug_flag = 1;
- break;
- case 's':
- special_flag = 1;
- break;
- case 'i':
- italic_flag = 1;
- italic_sep = atoi(optarg);
- break;
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "hpftodit version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- break;
- case '?':
- usage();
- default:
- assert(0);
- }
- }
- if (argc - optind != 3)
- usage();
- File f(argv[optind]);
- if (!read_map(argv[optind + 1]))
- exit(1);
- current_filename = 0;
- current_lineno = -1; // no line numbers
- if (freopen(argv[optind + 2], "w", stdout) == 0)
- fatal("cannot open `%1': %2", argv[optind + 2], strerror(errno));
- current_filename = argv[optind];
- printf("name %s\n", xbasename(argv[optind + 2]));
- if (special_flag)
- printf("special\n");
- read_tags(f);
- check_type();
- check_units(f);
- if (debug_flag)
- dump_tags(f);
- read_char_table(f);
- output_spacewidth();
- output_slant();
- read_and_output_pcltypeface(f);
- output_pclproportional();
- output_pclweight();
- output_pclstyle();
- read_symbol_sets(f);
- output_ligatures();
- read_and_output_kernpairs(f);
- output_charset();
- return 0;
-}
-
-static
-void usage()
-{
- fprintf(stderr, "usage: %s [-s] [-i n] tfm_file map_file output_font\n",
- program_name);
- 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;
- // These are actually text files, so we must get rid of the `\r'
- // characters. This is also enabled for Posix systems, in case the
- // input came from Windows...
- unsigned char *p = buf_, *q = buf_;
- while (q < end_)
- {
- if (*q == '\r')
- {
- if (*++q != '\n')
- *p++ = '\r';
- }
-#if defined(__MSDOS__) || defined(_MSC_VER)
- if (*q == '\032') // ^Z means ``software EOF''
- break;
-#endif
- *p++ = *q++;
- }
- end_ = p;
-}
-
-void File::skip(int n)
-{
- if (end_ - ptr_ < n)
- fatal("unexpected end of file");
- ptr_ += n;
-}
-
-void File::seek(uint32 n)
-{
- if (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;
-}
-
-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();
- }
-}
-
-static
-void check_type()
-{
- require_tag(type_tag);
- if (tag_info(type_tag).value != 0) {
- if (tag_info(type_tag).value == 2)
- fatal("cannot handle TrueType tfm files");
- fatal("unknown type tag %1", int(tag_info(type_tag).value));
- }
-}
-
-static
-void check_units(File &f)
-{
- 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 (num != 8782 || den != 1)
- fatal("design units per em != 8782/1");
- require_tag(inches_per_point_tag);
- f.seek(tag_info(inches_per_point_tag).value);
- num = f.get_uint32();
- den = f.get_uint32();
- if (num != 100 || den != 7231)
- fatal("inches per point not 100/7231");
-}
-
-static
-void require_tag(tag_type t)
-{
- if (!tag_info(t).present)
- fatal("tag %1 missing", int(t));
-}
-
-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;
- n_symbol_sets = symbol_set_dir_length/14;
- symbol_set_table = new symbol_set[n_symbol_sets];
- int i;
- for (i = 0; i < n_symbol_sets; i++) {
- f.seek(tag_info(symbol_set_tag).value + i*14);
- (void)f.get_uint32();
- uint32 off1 = f.get_uint32();
- uint32 off2 = f.get_uint32();
- (void)f.get_uint16(); // what's this for?
- f.seek(off1);
- int j;
- uint16 kind = 0;
- for (j = 0; j < off2 - off1; j++) {
- unsigned char c = f.get_byte();
- if ('0' <= c && c <= '9')
- kind = kind*10 + (c - '0');
- else if ('A' <= c && c <= 'Z')
- 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();
- }
- for (i = 0; i < nchars; i++)
- char_table[i].symbol_set = NO_SYMBOL_SET;
-
- uint16 *symbol_set_selectors = (special_flag
- ? special_symbol_sets
- : text_symbol_sets);
- for (i = 0; symbol_set_selectors[i] != 0; i++) {
- 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 index = symbol_set_table[j].index[k];
- if (index != 0xffff
- && char_table[index].symbol_set == NO_SYMBOL_SET) {
- char_table[index].symbol_set = symbol_set_table[j].select;
- char_table[index].code = k;
- }
- }
- }
- }
-}
-
-static
-void read_char_table(File &f)
-{
- require_tag(msl_tag);
- nchars = tag_info(msl_tag).count;
- char_table = new char_info[nchars];
-
- f.seek(tag_info(msl_tag).value);
- uint32 i;
- for (i = 0; i < nchars; i++)
- char_table[i].msl = 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();
- }
-
- 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);
- 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);
- }
- 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;
- int i;
- for (i = 0; i < nchars; i++) {
- uint16 msl = char_table[i].msl;
- if (msl < msl_name_table_size
- && char_table[i].symbol_set != NO_SYMBOL_SET) {
- for (name_list *p = msl_name_table[msl]; p; p = p->next)
- for (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].msl < msl_name_table_size
- && char_table[i2].msl < msl_name_table_size) {
- for (name_list *p = msl_name_table[char_table[i1].msl];
- p;
- p = p->next)
- for (name_list *q = msl_name_table[char_table[i2].msl];
- q;
- q = q->next)
- printf("%s %s %d\n", p->name, q->name, scale(val));
- }
- }
- }
-}
-
-static
-void output_charset()
-{
- require_tag(slant_tag);
- double slant_angle = int16(tag_info(slant_tag).value)*PI/18000.0;
- double slant = sin(slant_angle)/cos(slant_angle);
-
- require_tag(x_height_tag);
- require_tag(lower_ascent_tag);
- require_tag(lower_descent_tag);
-
- printf("charset\n");
- int i;
- for (i = 0; i < nchars; i++) {
- uint16 msl = char_table[i].msl;
- if (msl < msl_name_table_size
- && msl_name_table[msl]) {
- if (char_table[i].symbol_set != NO_SYMBOL_SET) {
- printf("%s\t%d,%d",
- msl_name_table[msl]->name,
- 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 > (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\n",
- type,
- char_table[i].symbol_set*256 + char_table[i].code);
- for (name_list *p = msl_name_table[msl]->next; p; p = p->next)
- printf("%s\t\"\n", p->name);
- }
- else
- warning("MSL %1 not in any of the searched symbol sets", msl);
- }
- }
-}
-
-static
-void dump_tags(File &f)
-{
- int i;
- for (i = min_tag; i <= max_tag; i++) {
- enum tag_type t = tag_type(i);
- if (tag_info(t).present) {
- fprintf(stderr,
- "%d %d %d %d\n", i, tag_info(t).type, tag_info(t).count,
- tag_info(t).value);
- if (tag_info(t).type == FLOAT_TYPE
- && tag_info(t).count == 1) {
- f.seek(tag_info(t).value);
- uint32 num = f.get_uint32();
- uint32 den = f.get_uint32();
- fprintf(stderr, "(%u/%u = %g)\n", num, den, (double)num/den);
- }
- }
- }
-}
-
-static
-int read_map(const char *file)
-{
- 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;
- 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 n;
- if (sscanf(ptr, "%d", &n) != 1) {
- error("bad map file");
- fclose(fp);
- return 0;
- }
- if (n < 0) {
- error("negative code");
- fclose(fp);
- return 0;
- }
- if (n >= msl_name_table_size) {
- size_t old_size = msl_name_table_size;
- name_list **old_table = msl_name_table;
- msl_name_table_size = n + 256;
- msl_name_table = new name_list *[msl_name_table_size];
- if (old_table) {
- memcpy(msl_name_table, old_table, old_size*sizeof(name_list *));
- a_delete old_table;
- }
- for (size_t i = old_size; i < msl_name_table_size; i++)
- msl_name_table[i] = 0;
- }
- ptr = strtok(0, " \n\t");
- if (!ptr) {
- error("missing names");
- fclose(fp);
- return 0;
- }
- for (; ptr; ptr = strtok(0, " \n\t"))
- msl_name_table[n] = new name_list(ptr, msl_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/hpftodit/hpftodit.man b/contrib/groff/hpftodit/hpftodit.man
deleted file mode 100644
index d107e8c..0000000
--- a/contrib/groff/hpftodit/hpftodit.man
+++ /dev/null
@@ -1,155 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1994-2000 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 HPFTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-hpftodit \- create font description files for use with groff \-Tlj4
-.SH SYNOPSIS
-.B hpftodit
-[
-.B \-sv
-]
-[
-.BI \-i n
-]
-.I tfm_file
-.I map_file
-.I font
-.PP
-It is possible to have whitespace between the
-.B \-i
-command line option and its parameter.
-.SH DESCRIPTION
-.B hpftodit
-creates a font file for use with
-.B
-groff \-Tlj4\fR
-from an HP tagged font metric file.
-.I tfm_file
-is the name of the tagged 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 MSL number of the character,
-and
-.IR c1 ,
-.IR c2 ,.\|.\|.
-are the groff names of the 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
-If the
-.B \-i
-option is used,
-.B hpftodit
-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@)).
-.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 \-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
-design units
-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.
-There are 8782 design units per em for Intellifont fonts.
-.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
-design units
-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 is normally needed only with italic (or oblique) fonts.
-.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 BUGS
-.LP
-This program was written without the benefit of complete, official
-documentation on the tagged font metric format.
-It is therefore likely that it will fail to work on tfm files that are
-dissimilar to those for the internal fonts on the Laserjet 4,
-with which it was tested:
-.LP
-TrueType tfm files are not supported.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR grolj4 (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@)
diff --git a/contrib/groff/include/Makefile.sub b/contrib/groff/include/Makefile.sub
deleted file mode 100644
index 500f059..0000000
--- a/contrib/groff/include/Makefile.sub
+++ /dev/null
@@ -1,41 +0,0 @@
-HDRS=\
- assert.h \
- cmap.h \
- cset.h \
- device.h \
- driver.h \
- errarg.h \
- error.h \
- font.h \
- getopt.h \
- groff-getopt.h \
- htmlindicate.h \
- index.h \
- lib.h \
- macropath.h \
- nonposix.h \
- posix.h \
- printer.h \
- ptable.h \
- refid.h \
- search.h \
- searchpath.h \
- stringclass.h
-GENHDRS=defs.h
-CLEANADD=$(GENHDRS)
-
-all depend: $(GENHDRS)
-
-defs.h: FORCE
- @$(SHELL) $(top_srcdir)/gendef.sh defs.h \
- "PROG_PREFIX=\"$(g)\"" \
- "DEVICE=\"$(DEVICE)\"" \
- "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/include/assert.h b/contrib/groff/include/assert.h
deleted file mode 100644
index 18d9c26..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/include/cmap.h b/contrib/groff/include/cmap.h
deleted file mode 100644
index 1537d46..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/include/cset.h b/contrib/groff/include/cset.h
deleted file mode 100644
index b3a1a97..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/include/device.h b/contrib/groff/include/device.h
deleted file mode 100644
index 341af8d..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-extern const char *device;
diff --git a/contrib/groff/include/driver.h b/contrib/groff/include/driver.h
deleted file mode 100644
index c0384c7..0000000
--- a/contrib/groff/include/driver.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#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 "lib.h"
-
-void do_file(const char *);
-extern printer *pr;
diff --git a/contrib/groff/include/errarg.h b/contrib/groff/include/errarg.h
deleted file mode 100644
index 0c7957c..0000000
--- a/contrib/groff/include/errarg.h
+++ /dev/null
@@ -1,46 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-class errarg {
- enum { EMPTY, STRING, CHAR, INTEGER, DOUBLE } type;
- union {
- const char *s;
- int n;
- char c;
- double d;
- };
- public:
- errarg();
- errarg(const char *);
- errarg(char);
- errarg(unsigned char);
- errarg(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/include/error.h b/contrib/groff/include/error.h
deleted file mode 100644
index d26e2c7..0000000
--- a/contrib/groff/include/error.h
+++ /dev/null
@@ -1,58 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 const char *program_name;
-extern int current_lineno;
-extern const char *current_filename;
-
diff --git a/contrib/groff/include/font.h b/contrib/groff/include/font.h
deleted file mode 100644
index 099f97b..0000000
--- a/contrib/groff/include/font.h
+++ /dev/null
@@ -1,116 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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();
-
- static font *load_font(const char *, int *not_found = 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 int biggestfont;
- static int spare2;
- static int sizescale;
- static int tcommand;
- static int pass_filenames;
- static int use_charnames_in_special;
-
- 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;
- short *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);
- virtual void handle_unknown_font_command(const char *command,
- const char *arg,
- const char *file, int lineno);
-protected:
- font(const char *);
- int load(int *not_found = 0);
-};
diff --git a/contrib/groff/include/getopt.h b/contrib/groff/include/getopt.h
deleted file mode 100644
index b0147e9..0000000
--- a/contrib/groff/include/getopt.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Declarations for getopt.
- Copyright (C) 1989,90,91,92,93,94,96,97,98 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., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#ifndef _GETOPT_H
-
-#ifndef __need_getopt
-# define _GETOPT_H 1
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns -1, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
- for unrecognized options. */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized. */
-
-extern int optopt;
-
-#ifndef __need_getopt
-/* Describe the long-named options requested by the application.
- The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
- of `struct option' terminated by an element containing a name which is
- zero.
-
- The field `has_arg' is:
- no_argument (or 0) if the option does not take an argument,
- required_argument (or 1) if the option requires an argument,
- optional_argument (or 2) if the option takes an optional argument.
-
- If the field `flag' is not NULL, it points to a variable that is set
- to the value given in the field `val' when the option is found, but
- left unchanged if the option is not found.
-
- To have a long-named option do something other than set an `int' to
- a compiled-in constant, such as set a value from `optarg', set the
- option's `flag' field to zero and its `val' field to a nonzero
- value (the equivalent single-letter option character, if there is
- one). For long options that have a zero `flag' field, `getopt'
- returns the contents of the `val' field. */
-
-struct option
-{
-# if defined __STDC__ && __STDC__
- const char *name;
-# else
- char *name;
-# endif
- /* has_arg can't be an enum because some compilers complain about
- type mismatches in all the code that assumes it is an int. */
- int has_arg;
- int *flag;
- int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'. */
-
-# define no_argument 0
-# define required_argument 1
-# define optional_argument 2
-#endif /* need getopt */
-
-
-/* Get definitions and prototypes for functions to process the
- arguments in ARGV (ARGC of them, minus the program name) for
- options given in OPTS.
-
- Return the option character from OPTS just read. Return -1 when
- there are no more options. For unrecognized options, or options
- missing arguments, `optopt' is set to the option letter, and '?' is
- returned.
-
- The OPTS string is a list of characters which are recognized option
- letters, optionally followed by colons, specifying that that letter
- takes an argument, to be placed in `optarg'.
-
- If a letter in OPTS is followed by two colons, its argument is
- optional. This behavior is specific to the GNU `getopt'.
-
- The argument `--' causes premature termination of argument
- scanning, explicitly telling `getopt' that there are no more
- options.
-
- If OPTS begins with `--', then non-option arguments are treated as
- arguments to the option '\0'. This behavior is specific to the GNU
- `getopt'. */
-
-#if defined __STDC__ && __STDC__
-# ifdef __GNU_LIBRARY__
-/* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in stdlib.h. To avoid compilation
- errors, only prototype getopt for the GNU C library. */
-extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
-# else /* not __GNU_LIBRARY__ */
-extern int getopt ();
-# endif /* __GNU_LIBRARY__ */
-
-# ifndef __need_getopt
-extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
- const struct option *__longopts, int *__longind);
-extern int getopt_long_only (int __argc, char *const *__argv,
- const char *__shortopts,
- const struct option *__longopts, int *__longind);
-
-/* Internal only. Users should not call this directly. */
-extern int _getopt_internal (int __argc, char *const *__argv,
- const char *__shortopts,
- const struct option *__longopts, int *__longind,
- int __long_only);
-# endif
-#else /* not __STDC__ */
-extern int getopt ();
-# ifndef __need_getopt
-extern int getopt_long ();
-extern int getopt_long_only ();
-
-extern int _getopt_internal ();
-# endif
-#endif /* __STDC__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-/* Make sure we later can get all the definitions and declarations. */
-#undef __need_getopt
-
-#endif /* getopt.h */
diff --git a/contrib/groff/include/groff-getopt.h b/contrib/groff/include/groff-getopt.h
deleted file mode 100644
index 1807fc7..0000000
--- a/contrib/groff/include/groff-getopt.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/*
- This file has to be included from within lib.h instead of getopt.h
- to avoid problems with picky C++ compilers.
-*/
-
-#ifndef _GROFF_GETOPT_H
-#define _GROFF_GETOPT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern char *optarg;
-extern int optind;
-extern int opterr;
-extern int optopt;
-
-struct option
-{
- const char *name;
- int has_arg;
- int *flag;
- int val;
-};
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-extern int getopt(int __argc,
- char *const *__argv,
- const char *__shortopts);
-extern int getopt_long(int __argc,
- char *const *__argv,
- const char *__shortopts,
- const struct option *__longopts,
- int *__longind);
-extern int getopt_long_only(int __argc,
- char *const *__argv,
- const char *__shortopts,
- const struct option *__longopts,
- int *__longind);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GROFF_GETOPT_H */
diff --git a/contrib/groff/include/htmlindicate.h b/contrib/groff/include/htmlindicate.h
deleted file mode 100644
index 96a6388..0000000
--- a/contrib/groff/include/htmlindicate.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if !defined(HTMLINDICATE_H)
-# define HTMLINDICATE_H
-
-/*
- * graphic_start - emit a html graphic start indicator, but only
- * if one has not already been issued.
- */
-
-extern void graphic_start (void);
-
-
-/*
- * graphic_end - emit a html graphic end indicator, but only
- * if a corresponding matching graphic-start has
- * been issued.
- */
-
-extern void graphic_end (void);
-
-#endif
-
diff --git a/contrib/groff/include/index.h b/contrib/groff/include/index.h
deleted file mode 100644
index 7e60813..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/include/lib.h b/contrib/groff/include/lib.h
deleted file mode 100644
index 2af894a..0000000
--- a/contrib/groff/include/lib.h
+++ /dev/null
@@ -1,114 +0,0 @@
-// -*- C++ -*-
-/* 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-extern "C" {
-#ifndef strerror
- char *strerror(int);
-#endif
- const char *i_to_a(int);
- const char *if_to_a(int, int);
-}
-
-#include <groff-getopt.h>
-
-char *strsave(const char *s);
-int is_prime(unsigned);
-
-#include <stdio.h>
-
-FILE *xtmpfile(char **namep=0, char *postfix=0, int do_unlink=1);
-char *xtmptemplate(char *extension=0);
-
-#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 */
-
-int interpret_lf_args(const char *p);
-
-extern char illegal_char_table[];
-
-inline int illegal_input_char(int c)
-{
- return c >= 0 && illegal_char_table[c];
-}
-
-#ifndef HAVE_STRCASECMP
-#define strcasecmp(a,b) strcmp((a),(b))
-#endif
-
-#ifndef HAVE_STRNCASECMP
-#define strncasecmp(a,b,c) strncmp((a),(b),(c))
-#endif
-
-#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/include/macropath.h b/contrib/groff/include/macropath.h
deleted file mode 100644
index 4aa2f00..0000000
--- a/contrib/groff/include/macropath.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-extern search_path macro_path;
diff --git a/contrib/groff/include/nonposix.h b/contrib/groff/include/nonposix.h
deleted file mode 100644
index e4b02da..0000000
--- a/contrib/groff/include/nonposix.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Copyright (C) 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* This header file compartmentalize all idiosyncrasies of non-Posix
- systems, such as MS-DOS, MS-Windows, etc. */
-
-#if defined _MSC_VER
-# ifndef _WIN32
-# define _WIN32
-# endif
-# define setmode(f,m) _setmode(f,m)
-# define fileno(f) _fileno(f)
-#endif
-
-#if defined(__MSDOS__) || (defined(_WIN32) && !defined(__CYGWIN32__))
-
-/* Binary I/O nuisances. Note: "setmode" is right for DJGPP and
- Borland; Windows compilers might need _setmode or some such. */
-# include <fcntl.h>
-# include <io.h>
-# ifdef HAVE_UNISTD_H
-# include <unistd.h>
-# 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+"
-# ifdef _MSC_VER
-# define POPEN_RT "rt"
-# define POPEN_WT "wt"
-# define popen(c,m) _popen(c,m)
-# define pclose(p) _pclose(p)
-# define getpid() (1)
-# endif
-# 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. */
-# define BSHELL (system_shell_name())
-# define BSHELL_DASH_C (system_shell_dash_c())
-# define IS_BSHELL(s) (is_system_shell(s))
-
-/* The separator for directories in PATH and other environment
- variables. */
-# define PATH_SEP ";"
-
-/* 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"
-
-/* The system null device. */
-# define NULL_DEV "NUL"
-
-/* Prototypes. */
-# ifdef __cplusplus
- extern "C" {
-# endif
- const char * system_shell_name(void);
- const char * system_shell_dash_c(void);
- int is_system_shell(const char *);
-# ifdef __cplusplus
- }
-# endif
-
-#endif
-
-/* Defaults, for Posix systems. */
-
-#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 ":"
-#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 NULL_DEV
-# define NULL_DEV "/dev/null"
-#endif
diff --git a/contrib/groff/include/posix.h b/contrib/groff/include/posix.h
deleted file mode 100644
index 1b7d5cd..0000000
--- a/contrib/groff/include/posix.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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_ISREG
-#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
diff --git a/contrib/groff/include/printer.h b/contrib/groff/include/printer.h
deleted file mode 100644
index 974c9d5..0000000
--- a/contrib/groff/include/printer.h
+++ /dev/null
@@ -1,76 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-struct environment {
- int fontno;
- int size;
- int hpos;
- int vpos;
- int height;
- int slant;
-};
-
-struct 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);
- 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);
- virtual void draw(int code, int *p, int np, const environment *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);
- static int adjust_arc_center(const int *, double *);
-protected:
- font_pointer_list *font_list;
-
- // 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 **font_table;
- int nfonts;
- 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/include/ptable.h b/contrib/groff/include/ptable.h
deleted file mode 100644
index dc56add..0000000
--- a/contrib/groff/include/ptable.h
+++ /dev/null
@@ -1,168 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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)(); \
-}; \
- \
-struct 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); \
-};
-
-
-#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; \
- 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) { \
- 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/include/refid.h b/contrib/groff/include/refid.h
deleted file mode 100644
index 605427e..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/include/search.h b/contrib/groff/include/search.h
deleted file mode 100644
index 260410e..0000000
--- a/contrib/groff/include/search.h
+++ /dev/null
@@ -1,96 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-struct search_item;
-struct 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;
-};
-
-struct 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/include/searchpath.h b/contrib/groff/include/searchpath.h
deleted file mode 100644
index d1cb2ee..0000000
--- a/contrib/groff/include/searchpath.h
+++ /dev/null
@@ -1,29 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-class search_path {
- char *dirs;
- unsigned init_len;
-public:
- search_path(const char *envvar, const char *standard);
- ~search_path();
- void command_line_dir(const char *);
- FILE *open_file(const char *, char **);
-};
diff --git a/contrib/groff/include/stringclass.h b/contrib/groff/include/stringclass.h
deleted file mode 100644
index be3a044..0000000
--- a/contrib/groff/include/stringclass.h
+++ /dev/null
@@ -1,195 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 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/indxbib/Makefile.sub b/contrib/groff/indxbib/Makefile.sub
deleted file mode 100644
index 2c50e65..0000000
--- a/contrib/groff/indxbib/Makefile.sub
+++ /dev/null
@@ -1,30 +0,0 @@
-PROG=indxbib
-MAN1=indxbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- indxbib.o \
- dirnamemax.o \
- signal.o
-CCSRCS=\
- $(srcdir)/indxbib.cc
-CSRCS=\
- $(srcdir)/dirnamemax.c \
- $(srcdir)/signal.c
-NAMEPREFIX=$(g)
-
-install_data: eign
- -test -d $(datadir) || $(mkinstalldirs) $(datadir)
- -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/indxbib/dirnamemax.c b/contrib/groff/indxbib/dirnamemax.c
deleted file mode 100644
index a8cd992..0000000
--- a/contrib/groff/indxbib/dirnamemax.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* dir_name_max(dir) does the same as pathconf(dir, _PC_NAME_MAX) */
-
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#ifdef _POSIX_VERSION
-
-long dir_name_max(dir)
- char *dir;
-{
- return pathconf(dir, _PC_NAME_MAX);
-}
-
-#else /* not _POSIX_VERSION */
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif /* HAVE_LIMITS_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 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 */
-
-long dir_name_max(dir)
- char *dir;
-{
- return NAME_MAX;
-}
-
-#endif /* not _POSIX_VERSION */
diff --git a/contrib/groff/indxbib/eign b/contrib/groff/indxbib/eign
deleted file mode 100644
index 7718c8b..0000000
--- a/contrib/groff/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/indxbib/indxbib.cc b/contrib/groff/indxbib/indxbib.cc
deleted file mode 100644
index 3185fe2..0000000
--- a/contrib/groff/indxbib/indxbib.cc
+++ /dev/null
@@ -1,794 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "lib.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" {
- // Solaris 2.5.1 has these functions,
- // but its stdlib.h fails to declare them.
- char *mktemp(char *);
- int mkstemp(char *);
-}
-
-#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();
-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();
- long dir_name_max(const char *);
- 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 *basename = 0;
- typedef int (*parser_t)(const char *);
- parser_t parser = do_file;
- const char *directory = 0;
- const char *foption = 0;
- int opt;
- while ((opt = getopt(argc, argv, "c:o:h:i:k:l:t:n:c:d:f:vw")) != 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':
- basename = optarg;
- break;
- case 't':
- check_integer_arg('t', optarg, 1, &truncate_len);
- break;
- case 'w':
- parser = do_whole_file;
- break;
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU indxbib version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case '?':
- usage();
- 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 (!basename)
- basename = optind < argc ? argv[optind] : DEFAULT_INDEX_NAME;
- const char *p = strrchr(basename, DIR_SEPS[0]), *p1;
- const char *sep = &DIR_SEPS[1];
- while (*sep)
- {
- p1 = strrchr(basename, *sep);
- if (p1 && (!p || p1 > p))
- p = p1;
- sep++;
- }
- long name_max;
- if (p) {
- char *dir = strsave(basename);
- dir[p - basename] = '\0';
- name_max = dir_name_max(dir);
- a_delete dir;
- }
- else
- name_max = dir_name_max(".");
- const char *filename = p ? p + 1 : basename;
- if (name_max >= 0 && 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 - basename + sizeof(TEMP_INDEX_TEMPLATE)];
- memcpy(temp_index_file, basename, p - basename);
- strcpy(temp_index_file + (p - basename), TEMP_INDEX_TEMPLATE);
- }
- else {
- temp_index_file = strsave(TEMP_INDEX_TEMPLATE);
- }
-#ifndef HAVE_MKSTEMP
- if (!mktemp(temp_index_file) || !temp_index_file[0])
- fatal("cannot create file name for temporary file");
-#endif
- catch_fatal_signals();
-#ifdef HAVE_MKSTEMP
- int fd = mkstemp(temp_index_file);
-#else
- int fd = creat(temp_index_file, S_IRUSR|S_IRGRP|S_IROTH);
-#endif
- 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(basename) + sizeof(INDEX_SUFFIX)];
- strcpy(index_file, basename);
- strcat(index_file, INDEX_SUFFIX);
-#ifdef HAVE_RENAME
- 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 - basename) : 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()
-{
- fprintf(stderr,
-"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);
- exit(1);
-}
-
-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)
- 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) != 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/indxbib/indxbib.man b/contrib/groff/indxbib/indxbib.man
deleted file mode 100644
index ed84cca..0000000
--- a/contrib/groff/indxbib/indxbib.man
+++ /dev/null
@@ -1,207 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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@)
diff --git a/contrib/groff/indxbib/signal.c b/contrib/groff/indxbib/signal.c
deleted file mode 100644
index 8078472..0000000
--- a/contrib/groff/indxbib/signal.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (C) 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 <sys/types.h>
-#include <signal.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifndef RETSIGTYPE
-#define RETSIGTYPE void
-#endif
-
-extern void cleanup();
-
-static RETSIGTYPE handle_fatal_signal(signum)
- int signum;
-{
- signal(signum, SIG_DFL);
- cleanup();
- kill(getpid(), signum);
-}
-
-void catch_fatal_signals()
-{
-#ifdef SIGHUP
- signal(SIGHUP, handle_fatal_signal);
-#endif
- signal(SIGINT, handle_fatal_signal);
- signal(SIGTERM, handle_fatal_signal);
-}
-
-#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/libbib/Makefile.sub b/contrib/groff/libbib/Makefile.sub
deleted file mode 100644
index 482f01a..0000000
--- a/contrib/groff/libbib/Makefile.sub
+++ /dev/null
@@ -1,14 +0,0 @@
-LIB=bib
-OBJS=\
- common.o \
- index.o \
- linear.o \
- search.o \
- map.o
-CCSRCS=\
- $(srcdir)/common.cc \
- $(srcdir)/index.cc \
- $(srcdir)/linear.cc \
- $(srcdir)/search.cc
-CSRCS=\
- $(srcdir)/map.c
diff --git a/contrib/groff/libbib/common.cc b/contrib/groff/libbib/common.cc
deleted file mode 100644
index 4b2bcca..0000000
--- a/contrib/groff/libbib/common.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/libbib/index.cc b/contrib/groff/libbib/index.cc
deleted file mode 100644
index 5573771..0000000
--- a/contrib/groff/libbib/index.cc
+++ /dev/null
@@ -1,641 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "lib.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 &searcher,
- 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) {
- struct stat sb;
- 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) != 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 = searcher.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]) == 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/libbib/linear.cc b/contrib/groff/libbib/linear.cc
deleted file mode 100644
index a8c2a55..0000000
--- a/contrib/groff/libbib/linear.cc
+++ /dev/null
@@ -1,503 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "lib.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/libbib/map.c b/contrib/groff/libbib/map.c
deleted file mode 100644
index 3632a11..0000000
--- a/contrib/groff/libbib/map.c
+++ /dev/null
@@ -1,75 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#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
-
-char *mapread(fd, nbytes)
- int fd;
- int nbytes;
-{
- char *p = (char *)mmap((caddr_t)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(p, len)
- char *p;
- int len;
-{
- return munmap((caddr_t)p, len);
-}
-
-#else /* not HAVE_MMAP */
-
-#include <errno.h>
-
-#ifndef errno
-extern int errno;
-#endif
-
-char *mapread(fd, nbytes)
- int fd;
- int nbytes;
-{
- errno = ENODEV;
- return 0;
-}
-
-int unmap(p, len)
- char *p;
- int len;
-{
- errno = EINVAL;
- return -1;
-}
-
-#endif /* not HAVE_MMAP */
diff --git a/contrib/groff/libbib/search.cc b/contrib/groff/libbib/search.cc
deleted file mode 100644
index 1e027c6..0000000
--- a/contrib/groff/libbib/search.cc
+++ /dev/null
@@ -1,132 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "posix.h"
-#include "lib.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/libdriver/Makefile.sub b/contrib/groff/libdriver/Makefile.sub
deleted file mode 100644
index d50f060..0000000
--- a/contrib/groff/libdriver/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-LIB=driver
-OBJS=\
- input.o \
- printer.o
-CCSRCS=\
- $(srcdir)/input.cc \
- $(srcdir)/printer.cc
diff --git a/contrib/groff/libdriver/input.cc b/contrib/groff/libdriver/input.cc
deleted file mode 100644
index ba71a5b..0000000
--- a/contrib/groff/libdriver/input.cc
+++ /dev/null
@@ -1,501 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-#include "device.h"
-#include "cset.h"
-
-const char *current_filename=0;
-int current_lineno;
-const char *device = 0;
-FILE *current_file;
-
-int get_integer(); // don't read the newline
-int possibly_get_integer(int *);
-char *get_string(int is_long = 0);
-void skip_line();
-
-struct environment_list {
- environment env;
- environment_list *next;
-
- environment_list(const environment &, environment_list *);
-};
-
-environment_list::environment_list(const environment &e, environment_list *p)
-: env(e), next(p)
-{
-}
-
-inline int get_char()
-{
- return getc(current_file);
-}
-
-/*
- * remember_filename - is needed as get_string might overwrite the
- * filename eventually.
- */
-
-void remember_filename (const char *filename)
-{
- if (current_filename != 0) {
- free((char *)current_filename);
- }
- if (strcmp(filename, "-") == 0) {
- filename = "<standard input>";
- }
- current_filename = (const char *)malloc(strlen(filename)+1);
- if (current_filename == 0) {
- fatal("can't malloc space for filename");
- }
- strcpy((char *)current_filename, (char *)filename);
-}
-
-void do_file(const char *filename)
-{
- int npages = 0;
- if (filename[0] == '-' && filename[1] == '\0') {
- remember_filename(filename);
- current_file = stdin;
- }
- else {
- errno = 0;
- current_file = fopen(filename, "r");
- if (current_file == 0) {
- error("can't open `%1'", filename);
- return;
- }
- remember_filename(filename);
- }
- environment env;
- env.vpos = -1;
- env.hpos = -1;
- env.fontno = -1;
- env.height = 0;
- env.slant = 0;
- environment_list *env_list = 0;
- current_lineno = 1;
- int command;
- char *s;
- command = get_char();
- if (command == EOF)
- return;
- if (command != 'x')
- fatal("the first command must be `x T'");
- s = get_string();
- if (s[0] != 'T')
- fatal("the first command must be `x T'");
- char *dev = get_string();
- if (pr == 0) {
- device = strsave(dev);
- if (!font::load_desc())
- fatal("sorry, I can't continue");
- }
- else {
- if (device == 0 || strcmp(device, dev) != 0)
- fatal("all files must use the same device");
- }
- skip_line();
- env.size = 10*font::sizescale;
- command = get_char();
- if (command != 'x')
- fatal("the second command must be `x res'");
- s = get_string();
- if (s[0] != 'r')
- fatal("the second command must be `x res'");
- int n = get_integer();
- if (n != font::res)
- fatal("resolution does not match");
- n = get_integer();
- if (n != font::hor)
- fatal("horizontal resolution does not match");
- n = get_integer();
- if (n != font::vert)
- fatal("vertical resolution does not match");
- skip_line();
- command = get_char();
- if (command != 'x')
- fatal("the third command must be `x init'");
- s = get_string();
- if (s[0] != 'i')
- fatal("the third command must be `x init'");
- skip_line();
- if (pr == 0)
- pr = make_printer();
- while ((command = get_char()) != EOF) {
- switch (command) {
- case 's':
- env.size = get_integer();
- if (env.height == env.size)
- env.height = 0;
- break;
- case 'f':
- env.fontno = get_integer();
- break;
- case 'F':
- remember_filename(get_string());
- break;
- case 'C':
- {
- if (npages == 0)
- fatal("`C' command illegal before first `p' command");
- char *s = get_string();
- pr->set_special_char(s, &env);
- }
- break;
- case 'N':
- {
- if (npages == 0)
- fatal("`N' command illegal before first `p' command");
- pr->set_numbered_char(get_integer(), &env);
- }
- break;
- case 'H':
- env.hpos = get_integer();
- break;
- case 'h':
- env.hpos += get_integer();
- break;
- case 'V':
- env.vpos = get_integer();
- break;
- case 'v':
- env.vpos += get_integer();
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
- int c = get_char();
- if (!csdigit(c))
- fatal("digit expected");
- env.hpos += (command - '0')*10 + (c - '0');
- }
- // fall through
- case 'c':
- {
- if (npages == 0)
- fatal("`c' command illegal before first `p' command");
- int c = get_char();
- if (c == EOF)
- fatal("missing argument to `c' command");
- pr->set_ascii_char(c, &env);
- }
- break;
- case 'n':
- if (npages == 0)
- fatal("`n' command illegal before first `p' command");
- pr->end_of_line();
- (void)get_integer();
- (void)get_integer();
- break;
- case 'w':
- case ' ':
- break;
- case '\n':
- current_lineno++;
- break;
- case 'p':
- if (npages)
- pr->end_page(env.vpos);
- npages++;
- pr->begin_page(get_integer());
- env.vpos = 0;
- break;
- case '{':
- env_list = new environment_list(env, env_list);
- break;
- case '}':
- if (!env_list) {
- fatal("can't pop");
- }
- else {
- env = env_list->env;
- environment_list *tem = env_list;
- env_list = env_list->next;
- delete tem;
- }
- break;
- case 'u':
- {
- if (npages == 0)
- fatal("`u' command illegal before first `p' command");
- int kern = get_integer();
- int c = get_char();
- while (c == ' ')
- c = get_char();
- while (c != EOF) {
- if (c == '\n') {
- current_lineno++;
- break;
- }
- int w;
- pr->set_ascii_char(c, &env, &w);
- env.hpos += w + kern;
- c = get_char();
- if (c == ' ')
- break;
- }
- }
- break;
- case 't':
- {
- if (npages == 0)
- fatal("`t' command illegal before first `p' command");
- int c;
- while ((c = get_char()) != EOF && c != ' ') {
- if (c == '\n') {
- current_lineno++;
- break;
- }
- int w;
- pr->set_ascii_char(c, &env, &w);
- env.hpos += w;
- }
- }
- break;
- case '#':
- skip_line();
- break;
- case 'D':
- {
- if (npages == 0)
- fatal("`D' command illegal before first `p' command");
- int c;
- while ((c = get_char()) == ' ')
- ;
- int n;
- int *p = 0;
- int szp = 0;
- int np;
- for (np = 0; possibly_get_integer(&n); np++) {
- if (np >= szp) {
- if (szp == 0) {
- szp = 16;
- p = new int[szp];
- }
- else {
- int *oldp = p;
- p = new int[szp*2];
- memcpy(p, oldp, szp*sizeof(int));
- szp *= 2;
- a_delete oldp;
- }
- }
- p[np] = n;
- }
- pr->draw(c, p, np, &env);
- if (c == 'e') {
- if (np > 0)
- env.hpos += p[0];
- }
- else if (c == 'f' || c == 't')
- ;
- else {
- int i;
- for (i = 0; i < np/2; i++) {
- env.hpos += p[i*2];
- env.vpos += p[i*2 + 1];
- }
- // there might be an odd number of characters
- if (i*2 < np)
- env.hpos += p[i*2];
- }
- a_delete p;
- skip_line();
- }
- break;
- case 'x':
- {
- char *s = get_string();
- int suppress_skip = 0;
- switch (s[0]) {
- case 'i':
- error("duplicate `x init' command");
- break;
- case 'T':
- error("duplicate `x T' command");
- break;
- case 'r':
- error("duplicate `x res' command");
- break;
- case 'p':
- break;
- case 's':
- break;
- case 't':
- break;
- case 'f':
- {
- int n = get_integer();
- char *name = get_string();
- pr->load_font(n, name);
- }
- break;
- case 'H':
- env.height = get_integer();
- if (env.height == env.size)
- env.height = 0;
- break;
- case 'S':
- env.slant = get_integer();
- break;
- case 'X':
- if (npages == 0)
- fatal("`x X' command illegal before first `p' command");
- pr->special(get_string(1), &env);
- suppress_skip = 1;
- break;
- default:
- error("unrecognised x command `%1'", s);
- }
- if (!suppress_skip)
- skip_line();
- }
- break;
- default:
- error("unrecognised command code %1", int(command));
- skip_line();
- break;
- }
- }
- if (npages)
- pr->end_page(env.vpos);
-}
-
-int get_integer()
-{
- int c = get_char();
- while (c == ' ')
- c = get_char();
- int neg = 0;
- if (c == '-') {
- neg = 1;
- c = get_char();
- }
- if (!csdigit(c))
- fatal("integer expected");
- int total = 0;
- do {
- total = total*10;
- if (neg)
- total -= c - '0';
- else
- total += c - '0';
- c = get_char();
- } while (csdigit(c));
- if (c != EOF)
- ungetc(c, current_file);
- return total;
-}
-
-int possibly_get_integer(int *res)
-{
- int c = get_char();
- while (c == ' ')
- c = get_char();
- int neg = 0;
- if (c == '-') {
- neg = 1;
- c = get_char();
- }
- if (!csdigit(c)) {
- if (c != EOF)
- ungetc(c, current_file);
- return 0;
- }
- int total = 0;
- do {
- total = total*10;
- if (neg)
- total -= c - '0';
- else
- total += c - '0';
- c = get_char();
- } while (csdigit(c));
- if (c != EOF)
- ungetc(c, current_file);
- *res = total;
- return 1;
-}
-
-
-char *get_string(int is_long)
-{
- static char *buf;
- static int buf_size;
- int c = get_char();
- while (c == ' ')
- c = get_char();
- for (int i = 0;; i++) {
- if (i >= buf_size) {
- if (buf_size == 0) {
- buf_size = 16;
- buf = new char[buf_size];
- }
- else {
- char *old_buf = buf;
- int old_size = buf_size;
- buf_size *= 2;
- buf = new char[buf_size];
- memcpy(buf, old_buf, old_size);
- a_delete old_buf;
- }
- }
- if ((!is_long && (c == ' ' || c == '\n')) || c == EOF) {
- buf[i] = '\0';
- break;
- }
- if (is_long && c == '\n') {
- current_lineno++;
- c = get_char();
- if (c == '+')
- c = '\n';
- else {
- buf[i] = '\0';
- break;
- }
- }
- buf[i] = c;
- c = get_char();
- }
- if (c != EOF)
- ungetc(c, current_file);
- return buf;
-}
-
-void skip_line()
-{
- int c;
- while ((c = get_char()) != EOF)
- if (c == '\n') {
- current_lineno++;
- break;
- }
-}
-
diff --git a/contrib/groff/libdriver/printer.cc b/contrib/groff/libdriver/printer.cc
deleted file mode 100644
index 770aa50..0000000
--- a/contrib/groff/libdriver/printer.cc
+++ /dev/null
@@ -1,263 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "driver.h"
-
-printer *pr = 0;
-
-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 (ferror(stdout) || fflush(stdout) < 0)
- 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 *)
-{
-}
-
-void printer::draw(int, int *, int, const environment *)
-{
-}
-
-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);
-}
-
-// 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 printer::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
diff --git a/contrib/groff/libgroff/Makefile.sub b/contrib/groff/libgroff/Makefile.sub
deleted file mode 100644
index 5ce0691..0000000
--- a/contrib/groff/libgroff/Makefile.sub
+++ /dev/null
@@ -1,84 +0,0 @@
-LIB=groff
-OBJS=\
- assert.o \
- change_lf.o \
- cmap.o \
- cset.o \
- device.o \
- errarg.o \
- error.o \
- fatal.o \
- filename.o \
- font.o \
- fontfile.o \
- getopt.o \
- getopt1.o \
- htmlindicate.o \
- illegal.o \
- lf.o \
- lineno.o \
- macropath.o \
- nametoindex.o \
- new.o \
- prime.o \
- progname.o \
- ptable.o \
- searchpath.o \
- string.o \
- strsave.o \
- tmpfile.o \
- iftoa.o \
- itoa.o \
- matherr.o \
- version.o \
- $(LIBOBJS)
-CCSRCS=\
- $(srcdir)/assert.cc \
- $(srcdir)/change_lf.cc \
- $(srcdir)/cmap.cc \
- $(srcdir)/cset.cc \
- $(srcdir)/device.cc \
- $(srcdir)/errarg.cc \
- $(srcdir)/error.cc \
- $(srcdir)/fatal.cc \
- $(srcdir)/filename.cc \
- $(srcdir)/font.cc \
- $(srcdir)/fontfile.cc \
- $(srcdir)/htmlindicate.cc \
- $(srcdir)/illegal.cc \
- $(srcdir)/lf.cc \
- $(srcdir)/lineno.cc \
- $(srcdir)/macropath.cc \
- $(srcdir)/nametoindex.cc \
- $(srcdir)/new.cc \
- $(srcdir)/prime.cc \
- $(srcdir)/progname.cc \
- $(srcdir)/ptable.cc \
- $(srcdir)/searchpath.cc \
- $(srcdir)/string.cc \
- $(srcdir)/strsave.cc \
- $(srcdir)/tmpfile.cc \
- version.cc
-CSRCS=\
- $(srcdir)/fmod.c \
- $(srcdir)/getcwd.c \
- $(srcdir)/getopt.c \
- $(srcdir)/getopt1.c \
- $(srcdir)/iftoa.c \
- $(srcdir)/itoa.c \
- $(srcdir)/matherr.c \
- $(srcdir)/putenv.c \
- $(srcdir)/strerror.c \
- $(srcdir)/strtol.c
-GENSRCS=\
- version.cc
-
-version=`cat $(top_srcdir)/VERSION`
-revision=`cat $(top_srcdir)/REVISION`
-
-version.cc: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
- @echo Making version.cc
- @echo const char \*version_string = \"$(version)\"\; >$@
- @echo const char \*revision_string = \"$(revision)\"\; >>$@
- @echo const char \*Version_string = \"$(version).$(revision)\"\; | \
- sed -e 's/\.0\"/\"/' >>$@
diff --git a/contrib/groff/libgroff/assert.cc b/contrib/groff/libgroff/assert.cc
deleted file mode 100644
index 89742e3..0000000
--- a/contrib/groff/libgroff/assert.cc
+++ /dev/null
@@ -1,34 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "assert.h"
-
-extern 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/libgroff/change_lf.cc b/contrib/groff/libgroff/change_lf.cc
deleted file mode 100644
index 2e44af1..0000000
--- a/contrib/groff/libgroff/change_lf.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/libgroff/device.cc b/contrib/groff/libgroff/device.cc
deleted file mode 100644
index 7efbfef..0000000
--- a/contrib/groff/libgroff/device.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/libgroff/errarg.cc b/contrib/groff/libgroff/errarg.cc
deleted file mode 100644
index be4d3dc..0000000
--- a/contrib/groff/libgroff/errarg.cc
+++ /dev/null
@@ -1,118 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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(unsigned char cc) : type(CHAR)
-{
- c = cc;
-}
-
-errarg::errarg(int nn) : type(INTEGER)
-{
- n = nn;
-}
-
-errarg::errarg(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);
-}
-
-void errarg::print() const
-{
- switch (type) {
- case INTEGER:
- fputs(i_to_a(n), 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/libgroff/error.cc b/contrib/groff/libgroff/error.cc
deleted file mode 100644
index 53fd629..0000000
--- a/contrib/groff/libgroff/error.cc
+++ /dev/null
@@ -1,137 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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, 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>";
- 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_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, 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, 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, lineno,
- FATAL, format, arg1, arg2, arg3);
-}
diff --git a/contrib/groff/libgroff/fatal.cc b/contrib/groff/libgroff/fatal.cc
deleted file mode 100644
index 42560dc..0000000
--- a/contrib/groff/libgroff/fatal.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdlib.h>
-
-#define FATAL_ERROR_EXIT_CODE 3
-
-void fatal_error_exit()
-{
- exit(FATAL_ERROR_EXIT_CODE);
-}
diff --git a/contrib/groff/libgroff/filename.cc b/contrib/groff/libgroff/filename.cc
deleted file mode 100644
index 1cbaa93..0000000
--- a/contrib/groff/libgroff/filename.cc
+++ /dev/null
@@ -1 +0,0 @@
-const char *current_filename = 0;
diff --git a/contrib/groff/libgroff/fmod.c b/contrib/groff/libgroff/fmod.c
deleted file mode 100644
index 818f946..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/libgroff/fontfile.cc b/contrib/groff/libgroff/fontfile.cc
deleted file mode 100644
index fa87b86..0000000
--- a/contrib/groff/libgroff/fontfile.cc
+++ /dev/null
@@ -1,66 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "font.h"
-#include "lib.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);
-
-int font::res = 0;
-int font::hor = 1;
-int font::vert = 1;
-int font::unitwidth = 0;
-int font::paperwidth = 0;
-int font::paperlength = 0;
-int font::biggestfont = 0;
-int font::spare2 = 0;
-int font::sizescale = 1;
-int font::tcommand = 0;
-int font::pass_filenames = 0;
-int font::use_charnames_in_special = 0;
-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 *name, char **pathp)
-{
- char *filename = new char[strlen(name) + strlen(device) + 5];
- sprintf(filename, "dev%s/%s", device, name);
- FILE *fp = font_path.open_file(filename, pathp);
- a_delete filename;
- return fp;
-}
diff --git a/contrib/groff/libgroff/getcwd.c b/contrib/groff/libgroff/getcwd.c
deleted file mode 100644
index 208e811..0000000
--- a/contrib/groff/libgroff/getcwd.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Partial emulation of getcwd in terms of getwd. */
-
-#include <sys/param.h>
-#include <string.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-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/libgroff/getopt.c b/contrib/groff/libgroff/getopt.c
deleted file mode 100644
index 4744e43..0000000
--- a/contrib/groff/libgroff/getopt.c
+++ /dev/null
@@ -1,1055 +0,0 @@
-/* Getopt for GNU.
- NOTE: getopt is now part of the C library, so if you don't know what
- "Keep this file name-space clean" means, talk to drepper@gnu.org
- before changing it!
-
- Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
- Free Software Foundation, Inc.
-
- 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., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
- Ditto for AIX 3.2 and <stdlib.h>. */
-#ifndef _NO_PROTO
-# define _NO_PROTO
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if !defined __STDC__ || !__STDC__
-/* This is a separate conditional since some stdc systems
- reject `defined (const)'. */
-# ifndef const
-# define const
-# endif
-#endif
-
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#define GETOPT_INTERFACE_VERSION 2
-#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
-# include <gnu-versions.h>
-# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
-# define ELIDE_CODE
-# endif
-#endif
-
-#ifndef ELIDE_CODE
-
-
-/* This needs to come after some library #include
- to get __GNU_LIBRARY__ defined. */
-#ifdef __GNU_LIBRARY__
-/* Don't include stdlib.h for non-GNU C libraries because some of them
- contain conflicting prototypes for getopt. */
-# include <stdlib.h>
-# include <unistd.h>
-#endif /* GNU C library. */
-
-#ifdef VMS
-# include <unixlib.h>
-# if HAVE_STRING_H - 0
-# include <string.h>
-# endif
-#endif
-
-#ifndef _
-/* This is for other GNU distributions with internationalized messages.
- When compiling libc, the _ macro is predefined. */
-# ifdef HAVE_LIBINTL_H
-# include <libintl.h>
-# define _(msgid) gettext (msgid)
-# else
-# define _(msgid) (msgid)
-# endif
-#endif
-
-/* This version of `getopt' appears to the caller like standard Unix `getopt'
- but it behaves differently for the user, since it allows the user
- to intersperse the options with the other arguments.
-
- As `getopt' works, it permutes the elements of ARGV so that,
- when it is done, all the options precede everything else. Thus
- all application programs are extended to handle flexible argument order.
-
- Setting the environment variable POSIXLY_CORRECT disables permutation.
- Then the behavior is completely standard.
-
- GNU application programs can use a third alternative mode in which
- they can distinguish the relative order of options and other arguments. */
-
-#include "getopt.h"
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns -1, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-/* 1003.2 says this must be 1 before any call. */
-int optind = 1;
-
-/* Formerly, initialization of getopt depended on optind==0, which
- causes problems with re-calling getopt as programs generally don't
- know that. */
-
-int __getopt_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. */
-
-static char *nextchar;
-
-/* Callers store zero here to inhibit the error message
- for unrecognized options. */
-
-int opterr = 1;
-
-/* Set to an option character which was unrecognized.
- This must be initialized on some systems to avoid linking in the
- system's own getopt implementation. */
-
-int optopt = '?';
-
-/* 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.
-
- 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. */
-
-static enum
-{
- REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-} ordering;
-
-/* Value of POSIXLY_CORRECT environment variable. */
-static char *posixly_correct;
-
-#ifdef __GNU_LIBRARY__
-/* We want to avoid inclusion of string.h with non-GNU libraries
- because there are many ways it can cause trouble.
- On some systems, it contains special magic macros that don't work
- in GCC. */
-# include <string.h>
-# define my_index strchr
-#else
-
-# if HAVE_STRING_H
-# include <string.h>
-# else
-# include <strings.h>
-# endif
-
-/* Avoid depending on library functions or files
- whose names are inconsistent. */
-
-#ifndef getenv
-extern char *getenv ();
-#endif
-
-static char *
-my_index (str, chr)
- const char *str;
- int chr;
-{
- while (*str)
- {
- if (*str == chr)
- return (char *) str;
- str++;
- }
- return 0;
-}
-
-/* If using GCC, we can safely declare strlen this way.
- If not using GCC, it is ok not to declare it. */
-#ifdef __GNUC__
-/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
- That was relevant to code that was here before. */
-# if (!defined __STDC__ || !__STDC__) && !defined strlen
-/* gcc with -traditional declares the built-in strlen to return int,
- and has done so at least since version 2.4.5. -- rms. */
-extern int strlen (const char *);
-# endif /* not __STDC__ */
-#endif /* __GNUC__ */
-
-#endif /* not __GNU_LIBRARY__ */
-
-/* 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. */
-
-static int first_nonopt;
-static int last_nonopt;
-
-#ifdef _LIBC
-/* Bash 2.0 gives us an environment variable containing flags
- indicating ARGV elements that should not be considered arguments. */
-
-/* Defined in getopt_init.c */
-extern char *__getopt_nonoption_flags;
-
-static int nonoption_flags_max_len;
-static int nonoption_flags_len;
-
-static int original_argc;
-static char *const *original_argv;
-
-/* Make sure the environment variable bash 2.0 puts in the environment
- is valid for the getopt call we must make sure that the ARGV passed
- to getopt is that one passed to the process. */
-static void
-__attribute__ ((unused))
-store_args_and_env (int argc, char *const *argv)
-{
- /* XXX This is no good solution. We should rather copy the args so
- that we can compare them later. But we must not use malloc(3). */
- original_argc = argc;
- original_argv = argv;
-}
-# ifdef text_set_element
-text_set_element (__libc_subinit, store_args_and_env);
-# endif /* text_set_element */
-
-# define SWAP_FLAGS(ch1, ch2) \
- if (nonoption_flags_len > 0) \
- { \
- char __tmp = __getopt_nonoption_flags[ch1]; \
- __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
- __getopt_nonoption_flags[ch2] = __tmp; \
- }
-#else /* !_LIBC */
-# define SWAP_FLAGS(ch1, ch2)
-#endif /* _LIBC */
-
-/* Exchange two adjacent subsequences of ARGV.
- One subsequence is elements [first_nonopt,last_nonopt)
- which contains all the non-options that have been skipped so far.
- The other is elements [last_nonopt,optind), which contains all
- the options processed since those non-options were skipped.
-
- `first_nonopt' and `last_nonopt' are relocated so that they describe
- the new indices of the non-options in ARGV after they are moved. */
-
-#if defined __STDC__ && __STDC__
-static void exchange (char **);
-#endif
-
-static void
-exchange (argv)
- char **argv;
-{
- int bottom = first_nonopt;
- int middle = last_nonopt;
- int top = optind;
- char *tem;
-
- /* Exchange the shorter segment with the far end of the longer segment.
- That puts the shorter segment into the right place.
- It leaves the longer segment in the right place overall,
- but it consists of two parts that need to be swapped next. */
-
-#ifdef _LIBC
- /* First make sure the handling of the `__getopt_nonoption_flags'
- string can work normally. Our top argument must be in the range
- of the string. */
- if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
- {
- /* We must extend the array. The user plays games with us and
- presents new arguments. */
- char *new_str = malloc (top + 1);
- if (new_str == NULL)
- nonoption_flags_len = nonoption_flags_max_len = 0;
- else
- {
- memset (__mempcpy (new_str, __getopt_nonoption_flags,
- nonoption_flags_max_len),
- '\0', top + 1 - nonoption_flags_max_len);
- nonoption_flags_max_len = top + 1;
- __getopt_nonoption_flags = new_str;
- }
- }
-#endif
-
- while (top > middle && middle > bottom)
- {
- if (top - middle > middle - bottom)
- {
- /* Bottom segment is the short one. */
- int len = middle - bottom;
- register int i;
-
- /* Swap it with the top part of the top segment. */
- for (i = 0; i < len; i++)
- {
- tem = argv[bottom + i];
- argv[bottom + i] = argv[top - (middle - bottom) + i];
- argv[top - (middle - bottom) + i] = tem;
- SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
- }
- /* Exclude the moved bottom segment from further swapping. */
- top -= len;
- }
- else
- {
- /* Top segment is the short one. */
- int len = top - middle;
- register int i;
-
- /* Swap it with the bottom part of the bottom segment. */
- for (i = 0; i < len; i++)
- {
- tem = argv[bottom + i];
- argv[bottom + i] = argv[middle + i];
- argv[middle + i] = tem;
- SWAP_FLAGS (bottom + i, middle + i);
- }
- /* Exclude the moved top segment from further swapping. */
- bottom += len;
- }
- }
-
- /* Update records for the slots the non-options now occupy. */
-
- first_nonopt += (optind - last_nonopt);
- last_nonopt = optind;
-}
-
-/* Initialize the internal data when the first call is made. */
-
-#if defined __STDC__ && __STDC__
-static const char *_getopt_initialize (int, char *const *, const char *);
-#endif
-static const char *
-_getopt_initialize (argc, argv, optstring)
- int argc;
- char *const *argv;
- const char *optstring;
-{
- /* Start processing options with ARGV-element 1 (since ARGV-element 0
- is the program name); the sequence of previously skipped
- non-option ARGV-elements is empty. */
-
- first_nonopt = last_nonopt = optind;
-
- nextchar = NULL;
-
- posixly_correct = getenv ("POSIXLY_CORRECT");
-
- /* Determine how to handle the ordering of options and nonoptions. */
-
- if (optstring[0] == '-')
- {
- ordering = RETURN_IN_ORDER;
- ++optstring;
- }
- else if (optstring[0] == '+')
- {
- ordering = REQUIRE_ORDER;
- ++optstring;
- }
- else if (posixly_correct != NULL)
- ordering = REQUIRE_ORDER;
- else
- ordering = PERMUTE;
-
-#ifdef _LIBC
- if (posixly_correct == NULL
- && argc == original_argc && argv == original_argv)
- {
- if (nonoption_flags_max_len == 0)
- {
- if (__getopt_nonoption_flags == NULL
- || __getopt_nonoption_flags[0] == '\0')
- nonoption_flags_max_len = -1;
- else
- {
- const char *orig_str = __getopt_nonoption_flags;
- int len = nonoption_flags_max_len = strlen (orig_str);
- if (nonoption_flags_max_len < argc)
- nonoption_flags_max_len = argc;
- __getopt_nonoption_flags =
- (char *) malloc (nonoption_flags_max_len);
- if (__getopt_nonoption_flags == NULL)
- nonoption_flags_max_len = -1;
- else
- memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
- '\0', nonoption_flags_max_len - len);
- }
- }
- nonoption_flags_len = nonoption_flags_max_len;
- }
- else
- nonoption_flags_len = 0;
-#endif
-
- return optstring;
-}
-
-/* Scan elements of ARGV (whose length is ARGC) for option characters
- given in OPTSTRING.
-
- If an element of ARGV starts with '-', and is not exactly "-" or "--",
- then it is an option element. The characters of this element
- (aside from the initial '-') are option characters. If `getopt'
- is called repeatedly, it returns successively each of the option characters
- from each of the option elements.
-
- If `getopt' finds another option character, it returns that character,
- updating `optind' and `nextchar' so that the next call to `getopt' can
- resume the scan with the following option character or ARGV-element.
-
- If there are no more option characters, `getopt' returns -1.
- Then `optind' is the index in ARGV of the first ARGV-element
- that is not an option. (The ARGV-elements have been permuted
- so that those that are not options now come last.)
-
- OPTSTRING is a string containing the legitimate option characters.
- If an option character is seen that is not listed in OPTSTRING,
- return '?' after printing an error message. If you set `opterr' to
- zero, the error message is suppressed but we still return '?'.
-
- If a char in OPTSTRING is followed by a colon, that means it wants an arg,
- so the following text in the same ARGV-element, or the text of the following
- ARGV-element, is returned in `optarg'. Two colons mean an option that
- wants an optional arg; if there is text in the current ARGV-element,
- it is returned in `optarg', otherwise `optarg' is set to zero.
-
- If OPTSTRING starts with `-' or `+', it requests different methods of
- handling the non-option ARGV-elements.
- See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
-
- Long-named options begin with `--' instead of `-'.
- Their names may be abbreviated as long as the abbreviation is unique
- or is an exact match for some defined option. If they have an
- argument, it follows the option name in the same ARGV-element, separated
- from the option name by a `=', or else the in next ARGV-element.
- When `getopt' finds a long-named option, it returns 0 if that option's
- `flag' field is nonzero, the value of the option's `val' field
- if the `flag' field is zero.
-
- The elements of ARGV aren't really const, because we permute them.
- But we pretend they're const in the prototype to be compatible
- with other systems.
-
- LONGOPTS is a vector of `struct option' terminated by an
- element containing a name which is zero.
-
- LONGIND returns the index in LONGOPT of the long-named option found.
- It is only valid when a long-named option has been found by the most
- recent call.
-
- If LONG_ONLY is nonzero, '-' as well as '--' can introduce
- long-named options. */
-
-int
-_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
- int argc;
- char *const *argv;
- const char *optstring;
- const struct option *longopts;
- int *longind;
- int long_only;
-{
- int print_errors = opterr;
- if (optstring[0] == ':')
- print_errors = 0;
-
- optarg = NULL;
-
- if (optind == 0 || !__getopt_initialized)
- {
- if (optind == 0)
- optind = 1; /* Don't scan ARGV[0], the program name. */
- optstring = _getopt_initialize (argc, argv, optstring);
- __getopt_initialized = 1;
- }
-
- /* Test whether ARGV[optind] points to a non-option argument.
- Either it does not have option syntax, or there is an environment flag
- from the shell indicating it is not an option. The later information
- is only used when the used in the GNU libc. */
-#ifdef _LIBC
-# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
- || (optind < nonoption_flags_len \
- && __getopt_nonoption_flags[optind] == '1'))
-#else
-# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
-#endif
-
- if (nextchar == NULL || *nextchar == '\0')
- {
- /* Advance to the next ARGV-element. */
-
- /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
- moved back by the user (who may also have changed the arguments). */
- if (last_nonopt > optind)
- last_nonopt = optind;
- if (first_nonopt > optind)
- first_nonopt = optind;
-
- if (ordering == PERMUTE)
- {
- /* If we have just processed some options following some non-options,
- exchange them so that the options come first. */
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange ((char **) argv);
- else if (last_nonopt != optind)
- first_nonopt = optind;
-
- /* Skip any additional non-options
- and extend the range of non-options previously skipped. */
-
- while (optind < argc && NONOPTION_P)
- optind++;
- last_nonopt = optind;
- }
-
- /* The special ARGV-element `--' means premature end of options.
- Skip it like a null option,
- then exchange with previous non-options as if it were an option,
- then skip everything else like a non-option. */
-
- if (optind != argc && !strcmp (argv[optind], "--"))
- {
- optind++;
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange ((char **) argv);
- else if (first_nonopt == last_nonopt)
- first_nonopt = optind;
- last_nonopt = argc;
-
- optind = argc;
- }
-
- /* If we have done all the ARGV-elements, stop the scan
- and back over any non-options that we skipped and permuted. */
-
- if (optind == argc)
- {
- /* Set the next-arg-index to point at the non-options
- that we previously skipped, so the caller will digest them. */
- if (first_nonopt != last_nonopt)
- optind = first_nonopt;
- return -1;
- }
-
- /* If we have come to a non-option and did not permute it,
- either stop the scan or describe it to the caller and pass it by. */
-
- if (NONOPTION_P)
- {
- if (ordering == REQUIRE_ORDER)
- return -1;
- optarg = argv[optind++];
- return 1;
- }
-
- /* We have found another option-ARGV-element.
- Skip the initial punctuation. */
-
- nextchar = (argv[optind] + 1
- + (longopts != NULL && argv[optind][1] == '-'));
- }
-
- /* Decode the current option-ARGV-element. */
-
- /* Check whether the ARGV-element is a long option.
-
- If long_only and the ARGV-element has the form "-f", where f is
- a valid short option, don't consider it an abbreviated form of
- a long option that starts with f. Otherwise there would be no
- way to give the -f short option.
-
- On the other hand, if there's a long option "fubar" and
- the ARGV-element is "-fu", do consider that an abbreviation of
- the long option, just like "--fu", and not "-f" with arg "u".
-
- This distinction seems to be the most useful approach. */
-
- if (longopts != NULL
- && (argv[optind][1] == '-'
- || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
- {
- char *nameend;
- const struct option *p;
- const struct option *pfound = NULL;
- int exact = 0;
- int ambig = 0;
- int indfound = -1;
- int option_index;
-
- for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
- /* Do nothing. */ ;
-
- /* Test all long options for either exact match
- or abbreviated matches. */
- for (p = longopts, option_index = 0; p->name; p++, option_index++)
- if (!strncmp (p->name, nextchar, nameend - nextchar))
- {
- if ((unsigned int) (nameend - nextchar)
- == (unsigned int) strlen (p->name))
- {
- /* Exact match found. */
- pfound = p;
- indfound = option_index;
- exact = 1;
- break;
- }
- else if (pfound == NULL)
- {
- /* First nonexact match found. */
- pfound = p;
- indfound = option_index;
- }
- else
- /* Second or later nonexact match found. */
- ambig = 1;
- }
-
- if (ambig && !exact)
- {
- if (print_errors)
- fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
- argv[0], argv[optind]);
- nextchar += strlen (nextchar);
- optind++;
- optopt = 0;
- return '?';
- }
-
- if (pfound != NULL)
- {
- option_index = indfound;
- optind++;
- if (*nameend)
- {
- /* Don't test has_arg with >, because some C compilers don't
- allow it to be used on enums. */
- if (pfound->has_arg)
- optarg = nameend + 1;
- else
- {
- if (print_errors)
- {
- if (argv[optind - 1][1] == '-')
- /* --option */
- fprintf (stderr,
- _("%s: option `--%s' doesn't allow an argument\n"),
- argv[0], pfound->name);
- else
- /* +option or -option */
- fprintf (stderr,
- _("%s: option `%c%s' doesn't allow an argument\n"),
- argv[0], argv[optind - 1][0], pfound->name);
- }
-
- nextchar += strlen (nextchar);
-
- optopt = pfound->val;
- return '?';
- }
- }
- else if (pfound->has_arg == 1)
- {
- if (optind < argc)
- optarg = argv[optind++];
- else
- {
- if (print_errors)
- fprintf (stderr,
- _("%s: option `%s' requires an argument\n"),
- argv[0], argv[optind - 1]);
- nextchar += strlen (nextchar);
- optopt = pfound->val;
- return optstring[0] == ':' ? ':' : '?';
- }
- }
- nextchar += strlen (nextchar);
- if (longind != NULL)
- *longind = option_index;
- if (pfound->flag)
- {
- *(pfound->flag) = pfound->val;
- return 0;
- }
- return pfound->val;
- }
-
- /* Can't find it as a long option. If this is not getopt_long_only,
- or the option starts with '--' or is not a valid short
- option, then it's an error.
- Otherwise interpret it as a short option. */
- if (!long_only || argv[optind][1] == '-'
- || my_index (optstring, *nextchar) == NULL)
- {
- if (print_errors)
- {
- if (argv[optind][1] == '-')
- /* --option */
- fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
- argv[0], nextchar);
- else
- /* +option or -option */
- fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
- argv[0], argv[optind][0], nextchar);
- }
- nextchar = (char *) "";
- optind++;
- optopt = 0;
- return '?';
- }
- }
-
- /* Look at and handle the next short option-character. */
-
- {
- char c = *nextchar++;
- char *temp = my_index (optstring, c);
-
- /* Increment `optind' when we start to process its last character. */
- if (*nextchar == '\0')
- ++optind;
-
- if (temp == NULL || c == ':')
- {
- if (print_errors)
- {
- if (posixly_correct)
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, _("%s: illegal option -- %c\n"),
- argv[0], c);
- else
- fprintf (stderr, _("%s: invalid option -- %c\n"),
- argv[0], c);
- }
- optopt = c;
- return '?';
- }
- /* Convenience. Treat POSIX -W foo same as long option --foo */
- if (temp[0] == 'W' && temp[1] == ';')
- {
- char *nameend;
- const struct option *p;
- const struct option *pfound = NULL;
- int exact = 0;
- int ambig = 0;
- int indfound = 0;
- int option_index;
-
- /* This is an option that requires an argument. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- /* If we end this ARGV-element by taking the rest as an arg,
- we must advance to the next element now. */
- optind++;
- }
- else if (optind == argc)
- {
- if (print_errors)
- {
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, _("%s: option requires an argument -- %c\n"),
- argv[0], c);
- }
- optopt = c;
- if (optstring[0] == ':')
- c = ':';
- else
- c = '?';
- return c;
- }
- else
- /* We already incremented `optind' once;
- increment it again when taking next ARGV-elt as argument. */
- optarg = argv[optind++];
-
- /* optarg is now the argument, see if it's in the
- table of longopts. */
-
- for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
- /* Do nothing. */ ;
-
- /* Test all long options for either exact match
- or abbreviated matches. */
- for (p = longopts, option_index = 0; p->name; p++, option_index++)
- if (!strncmp (p->name, nextchar, nameend - nextchar))
- {
- if ((unsigned int) (nameend - nextchar) == strlen (p->name))
- {
- /* Exact match found. */
- pfound = p;
- indfound = option_index;
- exact = 1;
- break;
- }
- else if (pfound == NULL)
- {
- /* First nonexact match found. */
- pfound = p;
- indfound = option_index;
- }
- else
- /* Second or later nonexact match found. */
- ambig = 1;
- }
- if (ambig && !exact)
- {
- if (print_errors)
- fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
- argv[0], argv[optind]);
- nextchar += strlen (nextchar);
- optind++;
- return '?';
- }
- if (pfound != NULL)
- {
- option_index = indfound;
- if (*nameend)
- {
- /* Don't test has_arg with >, because some C compilers don't
- allow it to be used on enums. */
- if (pfound->has_arg)
- optarg = nameend + 1;
- else
- {
- if (print_errors)
- fprintf (stderr, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
- argv[0], pfound->name);
-
- nextchar += strlen (nextchar);
- return '?';
- }
- }
- else if (pfound->has_arg == 1)
- {
- if (optind < argc)
- optarg = argv[optind++];
- else
- {
- if (print_errors)
- fprintf (stderr,
- _("%s: option `%s' requires an argument\n"),
- argv[0], argv[optind - 1]);
- nextchar += strlen (nextchar);
- return optstring[0] == ':' ? ':' : '?';
- }
- }
- nextchar += strlen (nextchar);
- if (longind != NULL)
- *longind = option_index;
- if (pfound->flag)
- {
- *(pfound->flag) = pfound->val;
- return 0;
- }
- return pfound->val;
- }
- nextchar = NULL;
- return 'W'; /* Let the application handle it. */
- }
- if (temp[1] == ':')
- {
- if (temp[2] == ':')
- {
- /* This is an option that accepts an argument optionally. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- optind++;
- }
- else
- optarg = NULL;
- nextchar = NULL;
- }
- else
- {
- /* This is an option that requires an argument. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- /* If we end this ARGV-element by taking the rest as an arg,
- we must advance to the next element now. */
- optind++;
- }
- else if (optind == argc)
- {
- if (print_errors)
- {
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr,
- _("%s: option requires an argument -- %c\n"),
- argv[0], c);
- }
- optopt = c;
- if (optstring[0] == ':')
- c = ':';
- else
- c = '?';
- }
- else
- /* We already incremented `optind' once;
- increment it again when taking next ARGV-elt as argument. */
- optarg = argv[optind++];
- nextchar = NULL;
- }
- }
- return c;
- }
-}
-
-int
-getopt (argc, argv, optstring)
- int argc;
- char *const *argv;
- const char *optstring;
-{
- return _getopt_internal (argc, argv, optstring,
- (const struct option *) 0,
- (int *) 0,
- 0);
-}
-
-#endif /* Not ELIDE_CODE. */
-
-#ifdef TEST
-
-/* Compile with -DTEST to make an executable for use in testing
- the above definition of `getopt'. */
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- int c;
- int digit_optind = 0;
-
- while (1)
- {
- int this_option_optind = optind ? optind : 1;
-
- c = getopt (argc, argv, "abc:d:0123456789");
- if (c == -1)
- break;
-
- switch (c)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
-
- exit (0);
-}
-
-#endif /* TEST */
diff --git a/contrib/groff/libgroff/getopt1.c b/contrib/groff/libgroff/getopt1.c
deleted file mode 100644
index 3d264f2..0000000
--- a/contrib/groff/libgroff/getopt1.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* getopt_long and getopt_long_only entry points for GNU getopt.
- Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
- 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., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "getopt.h"
-
-#if !defined __STDC__ || !__STDC__
-/* This is a separate conditional since some stdc systems
- reject `defined (const)'. */
-#ifndef const
-#define const
-#endif
-#endif
-
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#define GETOPT_INTERFACE_VERSION 2
-#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
-#include <gnu-versions.h>
-#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
-#define ELIDE_CODE
-#endif
-#endif
-
-#ifndef ELIDE_CODE
-
-
-/* This needs to come after some library #include
- to get __GNU_LIBRARY__ defined. */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-int
-getopt_long (argc, argv, options, long_options, opt_index)
- int argc;
- char *const *argv;
- const char *options;
- const struct option *long_options;
- int *opt_index;
-{
- return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
-}
-
-/* Like getopt_long, but '-' as well as '--' can indicate a long option.
- If an option that starts with '-' (not '--') doesn't match a long option,
- but does match a short option, it is parsed as a short option
- instead. */
-
-int
-getopt_long_only (argc, argv, options, long_options, opt_index)
- int argc;
- char *const *argv;
- const char *options;
- const struct option *long_options;
- int *opt_index;
-{
- return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
-}
-
-
-#endif /* Not ELIDE_CODE. */
-
-#ifdef TEST
-
-#include <stdio.h>
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- int c;
- int digit_optind = 0;
-
- while (1)
- {
- int this_option_optind = optind ? optind : 1;
- int option_index = 0;
- static struct option long_options[] =
- {
- {"add", 1, 0, 0},
- {"append", 0, 0, 0},
- {"delete", 1, 0, 0},
- {"verbose", 0, 0, 0},
- {"create", 0, 0, 0},
- {"file", 1, 0, 0},
- {0, 0, 0, 0}
- };
-
- c = getopt_long (argc, argv, "abc:d:0123456789",
- long_options, &option_index);
- if (c == -1)
- break;
-
- switch (c)
- {
- case 0:
- printf ("option %s", long_options[option_index].name);
- if (optarg)
- printf (" with arg %s", optarg);
- printf ("\n");
- break;
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", optarg);
- break;
-
- case 'd':
- printf ("option d with value `%s'\n", optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
-
- exit (0);
-}
-
-#endif /* TEST */
diff --git a/contrib/groff/libgroff/htmlindicate.cc b/contrib/groff/libgroff/htmlindicate.cc
deleted file mode 100644
index 91e53a2..0000000
--- a/contrib/groff/libgroff/htmlindicate.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "posix.h"
-#include "stringclass.h"
-
-/*
- * this file contains a very simple set of routines shared by
- * tbl, pic, eqn which help the html device driver to make
- * sensible formatting choices. Currently it simply indicates
- * when a region of gyphs should be rendered as an image rather
- * than html. In the future it should be expanded so to enable:
- *
- * tbl to inform grohtml about table widths.
- * troff to inform grohtml about tab positions and whether
- * we are entering two/three column mode.
- */
-
-
-static int is_in_graphic_start = 0;
-
-/*
- * graphic_start - emit a html graphic start indicator, but only
- * if one has not already been issued.
- */
-
-void graphic_start (void)
-{
- if (! is_in_graphic_start) {
- put_string(".if '\\*(.T'html' \\X(graphic-start(\\c\n", stdout);
- is_in_graphic_start = 1;
- }
-}
-
-/*
- * graphic_end - emit a html graphic end indicator, but only
- * if a corresponding matching graphic-start has
- * been issued.
- */
-
-void graphic_end (void)
-{
- if (is_in_graphic_start) {
- put_string(".if '\\*(.T'html' \\X(graphic-end(\\c\n", stdout);
- is_in_graphic_start = 0;
- }
-}
diff --git a/contrib/groff/libgroff/iftoa.c b/contrib/groff/libgroff/iftoa.c
deleted file mode 100644
index fa10833..0000000
--- a/contrib/groff/libgroff/iftoa.c
+++ /dev/null
@@ -1,65 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#define INT_DIGITS 19 /* enough for 64-bit integer */
-
-char *if_to_a(i, decimal_point)
- int i, 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;
-}
diff --git a/contrib/groff/libgroff/itoa.c b/contrib/groff/libgroff/itoa.c
deleted file mode 100644
index c811c76..0000000
--- a/contrib/groff/libgroff/itoa.c
+++ /dev/null
@@ -1,43 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#define INT_DIGITS 19 /* enough for 64 bit integer */
-
-char *i_to_a(i)
- 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;
-}
diff --git a/contrib/groff/libgroff/lf.cc b/contrib/groff/libgroff/lf.cc
deleted file mode 100644
index 34272c7..0000000
--- a/contrib/groff/libgroff/lf.cc
+++ /dev/null
@@ -1,62 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <string.h>
-#include <ctype.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/libgroff/lineno.cc b/contrib/groff/libgroff/lineno.cc
deleted file mode 100644
index f7138db..0000000
--- a/contrib/groff/libgroff/lineno.cc
+++ /dev/null
@@ -1 +0,0 @@
-int current_lineno = 0;
diff --git a/contrib/groff/libgroff/macropath.cc b/contrib/groff/libgroff/macropath.cc
deleted file mode 100644
index 4fd22a3..0000000
--- a/contrib/groff/libgroff/macropath.cc
+++ /dev/null
@@ -1,28 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
diff --git a/contrib/groff/libgroff/matherr.c b/contrib/groff/libgroff/matherr.c
deleted file mode 100644
index b0097b8..0000000
--- a/contrib/groff/libgroff/matherr.c
+++ /dev/null
@@ -1,45 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#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/libgroff/nametoindex.cc b/contrib/groff/libgroff/nametoindex.cc
deleted file mode 100644
index 39a7b69..0000000
--- a/contrib/groff/libgroff/nametoindex.cc
+++ /dev/null
@@ -1,118 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include "lib.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;
- int lookup_char(const char *, int);
-};
-
-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;
- *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 *res;
- long n = strtol(s + 4, &res, 10);
- if (res != s + 4 && *res == '\0' && n >= 0 && n < 256)
- return indexer.ascii_char_index((unsigned char)n);
- }
- return indexer.named_char_index(s);
-}
-
diff --git a/contrib/groff/libgroff/new.cc b/contrib/groff/libgroff/new.cc
deleted file mode 100644
index d26db2f..0000000
--- a/contrib/groff/libgroff/new.cc
+++ /dev/null
@@ -1,67 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "posix.h"
-
-extern 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 */
-}
-
-#ifdef COOKIE_BUG
-
-void operator delete(void *p)
-{
- if (p)
- free((void *)((char *)p - 8));
-}
-
-#endif /* COOKIE_BUG */
diff --git a/contrib/groff/libgroff/prime.cc b/contrib/groff/libgroff/prime.cc
deleted file mode 100644
index f0b1ead..0000000
--- a/contrib/groff/libgroff/prime.cc
+++ /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/libgroff/progname.cc b/contrib/groff/libgroff/progname.cc
deleted file mode 100644
index a70e341..0000000
--- a/contrib/groff/libgroff/progname.cc
+++ /dev/null
@@ -1 +0,0 @@
-const char *program_name = 0;
diff --git a/contrib/groff/libgroff/ptable.cc b/contrib/groff/libgroff/ptable.cc
deleted file mode 100644
index 76735c2..0000000
--- a/contrib/groff/libgroff/ptable.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/libgroff/putenv.c b/contrib/groff/libgroff/putenv.c
deleted file mode 100644
index c1ca671..0000000
--- a/contrib/groff/libgroff/putenv.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (C) 1991 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. */
-
-#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/libgroff/searchpath.cc b/contrib/groff/libgroff/searchpath.cc
deleted file mode 100644
index a857c25..0000000
--- a/contrib/groff/libgroff/searchpath.cc
+++ /dev/null
@@ -1,118 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "lib.h"
-#include "searchpath.h"
-#include "nonposix.h"
-
-search_path::search_path(const char *envvar, const char *standard)
-{
- char *e = envvar ? getenv(envvar) : 0;
- if (e && standard) {
- dirs = new char[strlen(e) + strlen(standard) + 2];
- strcpy(dirs, e);
- strcat(dirs, PATH_SEP);
- strcat(dirs, standard);
- }
- else
- dirs = strsave(e ? e : standard);
- init_len = dirs ? strlen(dirs) : 0;
-}
-
-search_path::~search_path()
-{
- if (dirs)
- a_delete dirs;
-}
-
-void search_path::command_line_dir(const char *s)
-{
- if (!dirs)
- dirs = strsave(s);
- else {
- 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[0];
- memcpy(p, s, slen);
- p += slen;
- if (init_len > 0) {
- *p++ = PATH_SEP[0];
- 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 || *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[0]);
- if (!end)
- end = strchr(p, '\0');
- int need_slash = end > p && strchr(DIR_SEPS, end[-1]) == 0;
- char *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 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;
-}
diff --git a/contrib/groff/libgroff/strerror.c b/contrib/groff/libgroff/strerror.c
deleted file mode 100644
index 69089f1..0000000
--- a/contrib/groff/libgroff/strerror.c
+++ /dev/null
@@ -1,41 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-
-#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/libgroff/string.cc b/contrib/groff/libgroff/string.cc
deleted file mode 100644
index 4bcd4cc..0000000
--- a/contrib/groff/libgroff/string.cc
+++ /dev/null
@@ -1,311 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include "stringclass.h"
-#include "lib.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];
- q[n] = '\0';
- return q;
-}
-
-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/libgroff/strsave.cc b/contrib/groff/libgroff/strsave.cc
deleted file mode 100644
index dfd2b6f..0000000
--- a/contrib/groff/libgroff/strsave.cc
+++ /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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/libgroff/strtol.c b/contrib/groff/libgroff/strtol.c
deleted file mode 100644
index 071bade..0000000
--- a/contrib/groff/libgroff/strtol.c
+++ /dev/null
@@ -1,131 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#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/libgroff/tmpfile.cc b/contrib/groff/libgroff/tmpfile.cc
deleted file mode 100644
index ffc165c..0000000
--- a/contrib/groff/libgroff/tmpfile.cc
+++ /dev/null
@@ -1,187 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "posix.h"
-#include "lib.h"
-#include "errarg.h"
-#include "error.h"
-#include "nonposix.h"
-
-extern "C" {
- // Solaris 2.5.1 has these functions,
- // but its stdlib.h fails to declare them.
- char *mktemp(char *);
- int mkstemp(char *);
-}
-
-// 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 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 "groff"
-
-/*
- * 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(char *postfix)
-{
- const char *dir = getenv(GROFF_TMPDIR_ENVVAR);
- int postlen = 0;
-
- if (postfix)
- postlen = strlen(postfix);
-
- if (!dir) {
- dir = getenv(TMPDIR_ENVVAR);
- if (!dir)
- dir = DEFAULT_TMPDIR;
- }
-
- size_t dir_len = strlen(dir);
- const char *dir_end = dir + dir_len - 1;
- int needs_slash = strchr(DIR_SEPS, *dir_end) == NULL;
- char *templ = new char[strlen(dir) + needs_slash
- + sizeof(TMPFILE_PREFIX) - 1 + 6 + 1 + postlen];
- strcpy(templ, dir);
- if (needs_slash)
- strcat(templ, "/");
- strcat(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, and
-// register an atexit function that will remove them all in one go.
-// This should be portable to all platforms.
-
-static struct xtmpfile_list {
- struct xtmpfile_list *next;
- char *fname;
-} *xtmpfiles_to_delete;
-
-static void remove_tmp_files(void)
-{
- struct xtmpfile_list *p = xtmpfiles_to_delete;
-
- while (p)
- {
- if (unlink(p->fname) < 0)
- error("cannot unlink `%1': %2", p->fname, strerror(errno));
- a_delete p->fname;
- struct xtmpfile_list *old = p;
- p = p->next;
- free(old);
- }
-}
-
-static void add_tmp_file(const char *name)
-{
- if (xtmpfiles_to_delete == NULL)
- atexit(remove_tmp_files);
-
- char *fname = new char[FILENAME_MAX];
- struct xtmpfile_list *p
- = (struct xtmpfile_list *)malloc(sizeof(struct xtmpfile_list));
- if (p == NULL)
- {
- error("cannot unlink `%1': %2", name, strerror(errno));
- return;
- }
- p->next = xtmpfiles_to_delete;
- p->fname = strcpy(fname, name);
- xtmpfiles_to_delete = p;
-}
-
-// Open a temporary file and with fatal error on failure.
-
-#ifndef _MSC_VER
-
-FILE *xtmpfile(char **namep, char *postfix, int do_unlink)
-{
- char *templ = xtmptemplate(postfix);
-
-#ifdef HAVE_MKSTEMP
- 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));
-#else /* not HAVE_MKSTEMP */
- if (!mktemp(templ) || !templ[0])
- fatal("cannot create file name for temporary file");
- errno = 0;
- FILE *fp = fopen(templ, FOPEN_RWB);
- if (!fp)
- fatal("cannot open `%1': %2", templ, strerror(errno));
-#endif /* not HAVE_MKSTEMP */
- if (do_unlink)
- add_tmp_file(templ);
- if ((namep != 0) && ((*namep) != 0)) {
- *namep = templ;
- } else {
- a_delete templ;
- }
- return fp;
-}
-
-#else
-
-// FIXME: does MSVC have mktemp or mkstemp? If so, it should now
-// use the version above, as it no longer removes an open file.
-// The version below will NOT work with grohtml, since grohtml
-// wants to know the name of the file opened by xtmpfile!!
-
-// If you're not running Unix, the following will do:
-FILE *xtmpfile(char **namep, char *postfix, int do_unlink)
-{
- FILE *fp = tmpfile();
- if (!fp)
- fatal("couldn't create temporary file");
- return fp;
-}
-
-#endif /* _MSC_VER */
diff --git a/contrib/groff/lkbib/Makefile.sub b/contrib/groff/lkbib/Makefile.sub
deleted file mode 100644
index 8f31e10..0000000
--- a/contrib/groff/lkbib/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=lkbib
-MAN1=lkbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lkbib.o
-CCSRCS=$(srcdir)/lkbib.cc
diff --git a/contrib/groff/lkbib/lkbib.cc b/contrib/groff/lkbib/lkbib.cc
deleted file mode 100644
index cfd099a..0000000
--- a/contrib/groff/lkbib/lkbib.cc
+++ /dev/null
@@ -1,124 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <assert.h>
-
-#include "lib.h"
-#include "errarg.h"
-#include "error.h"
-
-#include "defs.h"
-#include "refid.h"
-#include "search.h"
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-nv] [-p database] [-i XYZ] [-t N] keys ...\n",
- program_name);
- exit(1);
-}
-
-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;
- while ((opt = getopt(argc, argv, "nvVi:t:p:")) != 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':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU lkbib version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'p':
- list.add_file(optarg);
- break;
- case '?':
- usage();
- default:
- assert(0);
- }
- if (optind >= argc)
- usage();
- 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) != 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/lkbib/lkbib.man b/contrib/groff/lkbib/lkbib.man
deleted file mode 100644
index 872313d..0000000
--- a/contrib/groff/lkbib/lkbib.man
+++ /dev/null
@@ -1,110 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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.
-..
-.ds g \" empty
-.ds G \" empty
-.\" 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.
-.IB filename @INDEX_SUFFIX@
-Index files.
-.SH "SEE ALSO"
-.BR @g@refer (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-.BR @g@indxbib (@MAN1EXT@)
diff --git a/contrib/groff/lookbib/Makefile.sub b/contrib/groff/lookbib/Makefile.sub
deleted file mode 100644
index 91b1404..0000000
--- a/contrib/groff/lookbib/Makefile.sub
+++ /dev/null
@@ -1,7 +0,0 @@
-PROG=lookbib
-MAN1=lookbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lookbib.o
-CCSRCS=$(srcdir)/lookbib.cc
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/lookbib/lookbib.cc b/contrib/groff/lookbib/lookbib.cc
deleted file mode 100644
index 4240a47..0000000
--- a/contrib/groff/lookbib/lookbib.cc
+++ /dev/null
@@ -1,128 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "errarg.h"
-#include "error.h"
-#include "lib.h"
-#include "cset.h"
-
-#include "refid.h"
-#include "search.h"
-
-extern "C" {
- int isatty(int);
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-v] [-i XYZ] [-t N] database ...\n",
- program_name);
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int opt;
- while ((opt = getopt(argc, argv, "vVi:t:")) != 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':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU lookbib version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case '?':
- usage();
- default:
- assert(0);
- }
- if (optind >= argc)
- usage();
- 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) != 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/lookbib/lookbib.man b/contrib/groff/lookbib/lookbib.man
deleted file mode 100644
index 846798d..0000000
--- a/contrib/groff/lookbib/lookbib.man
+++ /dev/null
@@ -1,78 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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
-@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@)
diff --git a/contrib/groff/mm/ChangeLog b/contrib/groff/mm/ChangeLog
deleted file mode 100644
index 09d7b07..0000000
--- a/contrib/groff/mm/ChangeLog
+++ /dev/null
@@ -1,493 +0,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
-
-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
-
-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/mm/Makefile.sim b/contrib/groff/mm/Makefile.sim
deleted file mode 100644
index 7775c79..0000000
--- a/contrib/groff/mm/Makefile.sim
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# $Id: Makefile.sim,v 1.2 2000/06/18 10:08:06 wlemb Exp $
-#
-# To install mgm separately as tmac.gm:
-# make -f Makefile.sub tmacdir=/usr/local/lib/groff/tmac srcdir=. \
-# INSTALL_DATA='install -m 644' tmac_m=gm install
-#
-# or as tmac.m:
-#
-# 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 = 1.32
-mdate = 1999-09-03
-
-.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/mm/Makefile.sub b/contrib/groff/mm/Makefile.sub
deleted file mode 100644
index c706d71..0000000
--- a/contrib/groff/mm/Makefile.sub
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# $Id: Makefile.sub,v 1.3 2000/03/07 22:17:58 wlemb Exp $
-#
-PROG=mmroff
-MAN7=\
- groff_mm.n \
- groff_mmse.n \
- mmroff.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
-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
- $(INSTALL_DATA) $(srcdir)/tmac.m $(tmacdir)/tmac.$(tmac_m_prefix)m
- @sed -e "s;^.mso tmac.m;.mso tmac.$(tmac_m_prefix)m;g" \
- $(srcdir)/tmac.mse > $(tmacdir)/tmac.$(tmac_m_prefix)mse
-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.$(tmac_m_prefix)mse
- -rmdir $(tmacdir)/mm
- -rm -f $(bindir)/mmroff
diff --git a/contrib/groff/mm/NOTES b/contrib/groff/mm/NOTES
deleted file mode 100644
index 43794a2..0000000
--- a/contrib/groff/mm/NOTES
+++ /dev/null
@@ -1,103 +0,0 @@
-######################################################################
-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/mm/README b/contrib/groff/mm/README
deleted file mode 100644
index a720f07..0000000
--- a/contrib/groff/mm/README
+++ /dev/null
@@ -1,28 +0,0 @@
-
-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.se 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 tmac.m) and the version of groff.
-
-Any new ideas or improvements are welcome.
-
-Newest version is available with anonymous FTP
-at ftp://ftp.efd.lth.se/pub/groff/mm<something>.gz
-or 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.
-
-Thanks to everyone who have sent me bug-reports and fixes.
diff --git a/contrib/groff/mm/examples/APP b/contrib/groff/mm/examples/APP
deleted file mode 100644
index 82352e5..0000000
--- a/contrib/groff/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/mm/examples/B1B2 b/contrib/groff/mm/examples/B1B2
deleted file mode 100644
index a2bb3ad..0000000
--- a/contrib/groff/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/mm/examples/COVER b/contrib/groff/mm/examples/COVER
deleted file mode 100644
index d23597f..0000000
--- a/contrib/groff/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/mm/examples/IND b/contrib/groff/mm/examples/IND
deleted file mode 100644
index fbf6c43..0000000
--- a/contrib/groff/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/mm/examples/LT b/contrib/groff/mm/examples/LT
deleted file mode 100644
index cf06389..0000000
--- a/contrib/groff/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/mm/examples/LT.se b/contrib/groff/mm/examples/LT.se
deleted file mode 100644
index bfbd77f..0000000
--- a/contrib/groff/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/mm/examples/ML b/contrib/groff/mm/examples/ML
deleted file mode 100644
index bbfca3d..0000000
--- a/contrib/groff/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/mm/examples/MOVE b/contrib/groff/mm/examples/MOVE
deleted file mode 100644
index 0f0399c..0000000
--- a/contrib/groff/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/mm/examples/MUL b/contrib/groff/mm/examples/MUL
deleted file mode 100644
index ae91fae..0000000
--- a/contrib/groff/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/mm/examples/NCOL b/contrib/groff/mm/examples/NCOL
deleted file mode 100644
index 82c6f8d..0000000
--- a/contrib/groff/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/mm/examples/ND b/contrib/groff/mm/examples/ND
deleted file mode 100644
index 4b3694a..0000000
--- a/contrib/groff/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/mm/examples/README b/contrib/groff/mm/examples/README
deleted file mode 100644
index cb6980f..0000000
--- a/contrib/groff/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/mm/examples/References b/contrib/groff/mm/examples/References
deleted file mode 100644
index 72f6482..0000000
--- a/contrib/groff/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/mm/examples/SETR b/contrib/groff/mm/examples/SETR
deleted file mode 100644
index 0a92241..0000000
--- a/contrib/groff/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/mm/groff_mm.man b/contrib/groff/mm/groff_mm.man
deleted file mode 100644
index a6de21b..0000000
--- a/contrib/groff/mm/groff_mm.man
+++ /dev/null
@@ -1,1895 +0,0 @@
-.\"
-.\" $Id: groff_mm.man,v 1.3 2000/06/04 21:47:19 wlemb Exp $
-.\"
-.de T2
-.ne 2v
-.ti -.5i
-\\$1
-.sp -1
-..
-.de T3
-.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 is 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]]"
-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.
-.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 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.
-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
-.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 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 7, 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\fP (all headings in italic).
-Could also be written as \fBI\ I\ I\ I\ I\ I\ I\fP.
-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\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
-Seven number registers, named \fBH1\fP thru \fBH7\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 [... [arg7]]]]"
-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
-\fIfilename.tmp\fP and \fIfilename.qrf\fP. Requires two passes with groff.
-The first looks for references and the second includes them.
-\fBINITR\fP can be used several times, but it is only the first
-occurrence of \fBINITR\fP that is active.
-Option \fB-U\fP might be needed if \fBunsafe\fP-errors occur.
-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@TMAC@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@TMAC@tbl\fP. See separate manual for \fB@TMAC@tbl\fP.
-\fBTS\fP ends with \fBTE\fP.
-Argument \fIH\fP tells \fBm@TMAC@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 [top [bottom]]"
-Vertical margin.
-.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
-.TP
-The current appendix text.
-.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
-.TP
-Contains \fIINDEX\fP.
-.B Indcmd
-.TP
-Contains the index command, \fIsort\ -t\et\fP.
-.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:7], 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
-.TP
-Copy of number register \fBH1\fP, but it is incremented
-just before the page break. Useful in user defined header macros.
-.B Hb
-Heading break level [0:7], default 2.
-.TP
-.B Hc
-Heading centering level, [0:7]. 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
-Numbervariable 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:7], 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 1.
-.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 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 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 .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 mm (@MAN7EXT@)
-.BR m@TMAC_M_PREFIX@mse (@MAN7EXT@)
diff --git a/contrib/groff/mm/groff_mmse.man b/contrib/groff/mm/groff_mmse.man
deleted file mode 100644
index 45ae722..0000000
--- a/contrib/groff/mm/groff_mmse.man
+++ /dev/null
@@ -1,82 +0,0 @@
-.\"
-.\" $Id: groff_mmse.man,v 1.2 2000/02/21 20:32:58 jhaegg 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 m@TMAC_M_PREFIX@m (@MAN7EXT@)
diff --git a/contrib/groff/mm/mm/0.MT b/contrib/groff/mm/mm/0.MT
deleted file mode 100644
index 8c93108..0000000
--- a/contrib/groff/mm/mm/0.MT
+++ /dev/null
@@ -1,146 +0,0 @@
-.\"------------
-.\" $Id: 0.MT,v 1.2 2000/02/21 20:32:58 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/mm/mm/4.MT b/contrib/groff/mm/mm/4.MT
deleted file mode 100644
index 330d283..0000000
--- a/contrib/groff/mm/mm/4.MT
+++ /dev/null
@@ -1,81 +0,0 @@
-.\"------------
-.\" $Id: 4.MT,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
-.\" Cover sheet. Memorandum type 4
-.\"------------
-.de cov@print-title
-.if !d cov*title .@error title (.TL) not defined!
-.MOVE 2.4c
-.S +4
-.ad c
-.fi
-.B
-.cov*title
-.br
-.S
-.R
-.ad b
-.PGFORM
-..
-.\"------------
-.de cov@print-authors
-.SP 0.5
-.I
-.nr cov*i 0 1
-.while \\n+[cov*i]<=\\n[cov*au] \{\
-.ce
-\\*[cov*au!\\n[cov*i]!1]
-.br
-.\}
-.R
-.PGFORM
-..
-.\"------------
-.de cov@print-firm
-.if !d cov*firm .@error firm (.AF) not defined!
-.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 3
-. 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/mm/mm/5.MT b/contrib/groff/mm/mm/5.MT
deleted file mode 100644
index ee0ac11..0000000
--- a/contrib/groff/mm/mm/5.MT
+++ /dev/null
@@ -1,34 +0,0 @@
-.\"------------
-.\" $Id: 5.MT,v 1.2 2000/02/21 20:32:58 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/mm/mm/ms.cov b/contrib/groff/mm/mm/ms.cov
deleted file mode 100644
index 699ca44..0000000
--- a/contrib/groff/mm/mm/ms.cov
+++ /dev/null
@@ -1,84 +0,0 @@
-.\"------------
-.\" $Id: ms.cov,v 1.2 2000/02/21 20:32:58 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/mm/mm/se_ms.cov b/contrib/groff/mm/mm/se_ms.cov
deleted file mode 100644
index 64e7c117..0000000
--- a/contrib/groff/mm/mm/se_ms.cov
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" $Id: se_ms.cov,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
-.mso mm/ms.cov
-.nr cur*abstract-ll 11c
diff --git a/contrib/groff/mm/mmroff.man b/contrib/groff/mm/mmroff.man
deleted file mode 100644
index e6aa5eb..0000000
--- a/contrib/groff/mm/mmroff.man
+++ /dev/null
@@ -1,48 +0,0 @@
-.\"
-.\" $Id: mmroff.man,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
-.\"
-.TH MMROFF @MAN7EXT@ "@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@)
-.br
-.BR mm (@MAN7EXT@)
-.BR m@TMAC_M_PREFIX@mse (@MAN7EXT@)
diff --git a/contrib/groff/mm/mmroff.pl b/contrib/groff/mm/mmroff.pl
deleted file mode 100755
index 69b6105..0000000
--- a/contrib/groff/mm/mmroff.pl
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/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);
-}
-
-my $check_macro = "groff -rRef=1 -z @ARGV";
-my $run_macro = "groff @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 && @out) {
- 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:$!";
- 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/mm/tmac.m b/contrib/groff/mm/tmac.m
deleted file mode 100644
index cf7d8e11..0000000
--- a/contrib/groff/mm/tmac.m
+++ /dev/null
@@ -1,3471 +0,0 @@
-.\"
-.de @revision
-.ds RE \\$2
-..
-.\"
-.\" $Id: tmac.m,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
-.@revision $Revision: 1.2 $
-.ig
-
-Copyright (C) 1991-2000 Free Software Foundation, Inc.
-mgm is written by Jörgen Hägg <jh@axis.se>
-
-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.
-.if \n(.C .ab The groff mm macros do not work in compatibility mode.
-.warn
-.\" ######## init #######
-.\" Contents level [0:7], 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
-.\" Heading break level [0:7]
-.nr Hb 2
-.\" heading centering level, [0:7]
-.nr Hc 0
-.\" header format
-.ds HF 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
-.\" heading space level [0:7]
-.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]
-.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.5
-.if n .nr Hps1 1
-.\"
-.\" Hps2 is the number of lines when level <= Hps
-.nr Hps2 1
-.if n .nr Hps2 2
-.\"
-.\" 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-hpos -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
-.ie !((\\n[nl]=\\n[hd*last-pos]):(\\n[nl]=(\\n[hd*last-pos]-.5v))) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-. if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c
-.\}
-.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-. if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c
-.\}
-.nr par@ind-flag 1
-..
-.\"------------
-.de nP
-.\" skip P if previous heading
-.ie !((\\n[nl]=\\n[hd*last-pos]):(\\n[nl]=(\\n[hd*last-pos]-.5v))) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-\\n[H2].\\n+[par*number2]\ \ \c
-.\}
-.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. 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[@ps]u
-. 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]u+2p
-. el .vs \\*[misc*b]
-. if \\n[D]>2 .tm S: .vs \\*[misc*b]
-. \}
-.\}
-.nr @ps \\n[.ps]
-.nr @vs \\n[.v]
-.\"
-.if \\n[D]>1 .tm S(\\$*): ma:\\*[misc*a], mb:\\*[misc*b] => ps:\\n[@ps]u, vs:\\n[@vs]u
-.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
-. \}
-.\}
-.if \\n[Ref]>0 \{\
-. tm .\\\\" PIC id \\n[pict*id]
-. tm .\\\\" PIC file \\*[pict*f]
-.\}
-.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
-. \"
-. \" these lines are copied and modified from tmac.pspic.
-. \" Originally written by James Clark
-. br
-. ie \\n[pict*box]>0 \{\
-\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 \{\
-\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
-.\}
-..
-.\" external picture
-.de EPIC
-.if \\n[.$]< 2 .@error "EPIC: Not enough arguments"
-.nr pict*w \\$1
-.nr pict*h \\$2
-.ds pict*name "External picture
-.if !''$3' .ds pict*name \\$3
-\&
-.br
-.ne \\n[pict*h]u
-.sp \\n[pict*h]u
-.nr pict*ind (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2)
-.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
-..
-.\" ######## 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]<8 .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]<8 .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"
-.\"--------------------------------------
-.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-hpos \\n[.k]
-.nr par@ind-flag 0
-..
-.\"--------
-.de HM
-.nr hd*i 0 1
-.while \\n+[hd*i]<8 .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 5\" 1v+footer+even/odd footer+2v
-.nr pg*header-size 7\" 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]v+\\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]v+\\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]v)
-.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]v) = \\n[pg*last-pos]
-..
-.de pg@enable-trap
-.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
-.if \\n[D]>1 .tm Page# \\n[%] (\\n[.F]:\\n[c.])
-.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.])
-.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
-.\" 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
-.\" 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
-..
-.\"-------------------------
-.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
-.de VM
-.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)
-.\"
-.nr pg*cols-per-page (u;\\n[.l]/(\\n[pg*column-size]+\\n[pg*column-sep]+1))
-.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 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]v-\\n[pg*extra-header-size]v
-.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 \\$6\" 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
-.if '\\$1'N' @error TH: N not implemented yet. Sorry.
-.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
-' sp (u;\\$1/2-.45v)
-. ie (\\n[Eq]%2) \{\
-. \" label to the left
-\h'|0'\\*[eq*label]\c
-. \}
-. 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]<8 \{\
-. 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]<8 .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
-.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
-'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
-'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/mm/tmac.mse b/contrib/groff/mm/tmac.mse
deleted file mode 100644
index 39f137e..0000000
--- a/contrib/groff/mm/tmac.mse
+++ /dev/null
@@ -1,184 +0,0 @@
-.\" $Id: tmac.mse,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
-.\"
-.\" swedish version of mm
-.\" See tmac.m for version-information.
-.ds @language se
-.mso tmac.m
-.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/nroff/Makefile.sub b/contrib/groff/nroff/Makefile.sub
deleted file mode 100644
index fa6bc4d..0000000
--- a/contrib/groff/nroff/Makefile.sub
+++ /dev/null
@@ -1,18 +0,0 @@
-MAN1=nroff.n
-NAMEPREFIX=$(g)
-CLEANADD=nroff
-
-all: nroff
-
-nroff: nroff.sh
- rm -f $@
- sed "$(SH_SCRIPT_SED_CMD)" $(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/pfbtops/Makefile.sub b/contrib/groff/pfbtops/Makefile.sub
deleted file mode 100644
index f731ff5..0000000
--- a/contrib/groff/pfbtops/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=pfbtops
-MAN1=pfbtops.n
-OBJS=pfbtops.o
-CSRCS=$(srcdir)/pfbtops.c
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
diff --git a/contrib/groff/pfbtops/pfbtops.c b/contrib/groff/pfbtops/pfbtops.c
deleted file mode 100644
index 9aaeecc..0000000
--- a/contrib/groff/pfbtops/pfbtops.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* This translates ps fonts in .pfb format to ASCII ps files. */
-
-#include <stdio.h>
-#include <getopt.h>
-
-#include "nonposix.h"
-
-/* Binary bytes per output line. */
-#define BYTES_PER_LINE (64/2)
-#define HEX_DIGITS "0123456789abcdef"
-
-static char *program_name;
-
-static void error(s)
- char *s;
-{
- fprintf(stderr, "%s: %s\n", program_name, s);
- exit(2);
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [-v] [pfb_file]\n", program_name);
- exit(1);
-}
-
-int main(argc, argv)
- int argc;
- char **argv;
-{
- int opt;
- extern int optind;
-
- program_name = argv[0];
-
- while ((opt = getopt(argc, argv, "v")) != EOF) {
- switch (opt) {
- case 'v':
- {
- extern char *Version_string;
- fprintf(stderr, "pfbtops groff version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case '?':
- usage();
- }
- }
-
- if (argc - optind > 1)
- usage();
- if (argc > optind && !freopen(argv[optind], "r", stdin))
- {
- perror(argv[optind]);
- exit(1);
- }
-#ifdef SET_BINARY
- SET_BINARY(fileno(stdin));
-#endif
- 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)
- {
- while (--n >= 0)
- {
- c = getchar();
- if (c == EOF)
- error("end of file in text packet");
- if (c == '\r')
- c = '\n';
- putchar(c);
- }
- if (c != '\n')
- putchar('\n');
- }
- else
- {
- 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');
- }
- }
- exit(0);
-}
diff --git a/contrib/groff/pfbtops/pfbtops.man b/contrib/groff/pfbtops/pfbtops.man
deleted file mode 100644
index cfef3e0..0000000
--- a/contrib/groff/pfbtops/pfbtops.man
+++ /dev/null
@@ -1,44 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 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
-[
-.I pfb_file
-]
-.SH DESCRIPTION
-.B pfbtops
-translates a PostScript font in
-.B .pfb
-format to ASCII.
-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 "SEE ALSO"
-.BR grops (@MAN1EXT@)
diff --git a/contrib/groff/pic/Makefile.sub b/contrib/groff/pic/Makefile.sub
deleted file mode 100644
index f1e2927..0000000
--- a/contrib/groff/pic/Makefile.sub
+++ /dev/null
@@ -1,31 +0,0 @@
-PROG=pic
-MAN1=pic.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- pic.o \
- lex.o \
- main.o \
- object.o \
- common.o \
- troff.o \
- tex.o
- # fig.o
-CCSRCS=\
- $(srcdir)/lex.cc \
- $(srcdir)/main.cc \
- $(srcdir)/object.cc \
- $(srcdir)/common.cc \
- $(srcdir)/troff.cc \
- $(srcdir)/tex.cc
-HDRS=\
- $(srcdir)/common.h \
- $(srcdir)/object.h \
- $(srcdir)/output.h \
- $(srcdir)/pic.h \
- $(srcdir)/position.h \
- $(srcdir)/text.h
-GRAM=$(srcdir)/pic.y
-YTABC=$(srcdir)/pic.cc
-YTABH=$(srcdir)/pic_tab.h
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/pic/TODO b/contrib/groff/pic/TODO
deleted file mode 100644
index 2346b57..0000000
--- a/contrib/groff/pic/TODO
+++ /dev/null
@@ -1,37 +0,0 @@
-Dotted and dashed ellipses.
-
-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/pic/common.cc b/contrib/groff/pic/common.cc
deleted file mode 100644
index e83ef31..0000000
--- a/contrib/groff/pic/common.cc
+++ /dev/null
@@ -1,497 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
-}
-
-// 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/pic/common.h b/contrib/groff/pic/common.h
deleted file mode 100644
index 25a6e10..0000000
--- a/contrib/groff/pic/common.h
+++ /dev/null
@@ -1,70 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 dashed_circle(const position &, double rad, const line_type &);
- void dotted_circle(const position &, double rad, 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);
-};
-
-int compute_arc_center(const position &start, const position &cent,
- const position &end, position *result);
-
diff --git a/contrib/groff/pic/depend b/contrib/groff/pic/depend
deleted file mode 100644
index 73ac3ab..0000000
--- a/contrib/groff/pic/depend
+++ /dev/null
@@ -1,21 +0,0 @@
-pic.tab.o : pic.tab.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h ../lib/ptable.h object.h
-lex.o : lex.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h ../lib/ptable.h object.h pic.tab.h
-main.o : main.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h
-object.o : object.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h ../lib/ptable.h object.h
-common.o : common.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h common.h
-troff.o : troff.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h common.h
-tex.o : tex.cc pic.h ../lib/assert.h ../lib/cset.h ../lib/lib.h \
- ../lib/stringclass.h ../lib/errarg.h ../lib/error.h position.h text.h \
- output.h common.h
diff --git a/contrib/groff/pic/lex.cc b/contrib/groff/pic/lex.cc
deleted file mode 100644
index 329578a..0000000
--- a/contrib/groff/pic/lex.cc
+++ /dev/null
@@ -1,1939 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 (illegal_input_char(c))
- lex_error("illegal 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 illegal 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 },
- { "command", COMMAND },
- { "copy", COPY },
- { "cos", COS },
- { "cw", CW },
- { "dashed", DASHED },
- { "define", DEFINE },
- { "diam", DIAMETER },
- { "diameter", DIAMETER },
- { "do", DO },
- { "dotted", DOTTED },
- { "down", DOWN },
- { "ellipse", ELLIPSE },
- { "else", ELSE },
- { "end", END },
- { "exp", EXP },
- { "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 },
- { "of", OF },
- { "plot", PLOT },
- { "print", PRINT },
- { "rad", RADIUS },
- { "radius", RADIUS },
- { "rand", RAND },
- { "reset", RESET },
- { "right", RIGHT },
- { "rjust", RJUST },
- { "same", SAME },
- { "sh", SH },
- { "sin", SIN },
- { "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 },
- { "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 to;
- int by_is_multiplicative;
- double by;
- const char *p;
- int done_newline;
-public:
- for_input(char *, double, int, double, char *);
- ~for_input();
- int get();
- int peek();
-};
-
-for_input::for_input(char *vr, double t, int bim, double b, char *bd)
-: var(vr), body(bd), 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 (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 (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 (from <= to)
- input_stack::push(new for_input(var, 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 (illegal_input_char(c)) {
- error("illegal input character code %1", c);
- c = getc(fp);
- }
- if (c == '\n')
- lineno++;
- return c;
-}
-
-int simple_file_input::peek()
-{
- int c = getc(fp);
- while (illegal_input_char(c)) {
- error("illegal 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 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/pic/main.cc b/contrib/groff/pic/main.cc
deleted file mode 100644
index 1536513..0000000
--- a/contrib/groff/pic/main.cc
+++ /dev/null
@@ -1,624 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "pic.h"
-
-extern int yyparse();
-
-output *out;
-
-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 (illegal_input_char(c)) {
- error("illegal 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 (illegal_input_char(c)) {
- error("illegal 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;
- 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)
- 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()
-{
- fprintf(stderr, "usage: %s [ -nvC ] [ filename ... ]\n", program_name);
-#ifdef TEX_SUPPORT
- fprintf(stderr, " %s -t [ -cvzC ] [ filename ... ]\n", program_name);
-#endif
-#ifdef FIG_SUPPORT
- fprintf(stderr, " %s -f [ -v ] [ filename ]\n", program_name);
-#endif
- exit(1);
-}
-
-#ifdef __MSDOS__
-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__ */
-
-int main(int argc, char **argv)
-{
-#ifdef __MSDOS__
- argv[0] = fix_program_name(argv[0], "pic");
-#endif /* __MSDOS__ */
- 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
- while ((opt = getopt(argc, argv, "T:CDSUtcvnxzpf")) != 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':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU pic version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'z':
- // zero length lines will be printed as dots
- zero_length_line_flag++;
- break;
- case '?':
- usage();
- 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();
- 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/pic/object.cc b/contrib/groff/pic/object.cc
deleted file mode 100644
index 6b34633..0000000
--- a/contrib/groff/pic/object.cc
+++ /dev/null
@@ -1,1833 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
-}
-
-void output::command(const char *, const char *, int)
-{
-}
-
-void output::set_location(const char *, int)
-{
-}
-
-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 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)
-{
- 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;
- // A value > 1 means fill with the current color.
- out->polygon(v, 3, slt, 2.0);
- }
- else {
- position v[2];
- v[0] = pos;
- v[1] = pos + base + n;
- out->line(pos + base - n, v, 2, 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;
- 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;
-}
-
-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;
-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();
- virtual void set_fill(double);
-};
-
-graphic_object::graphic_object() : ntext(0), text(0), aligned(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_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->text(center(), text, ntext, angle);
-}
-
-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);
-protected:
- double fill; // < 0 if not filled
-};
-
-closed_object::closed_object(const position &pos)
-: rectangle_object(pos), fill(-1.0)
-{
-}
-
-void closed_object::set_fill(double f)
-{
- assert(f >= 0.0);
- fill = 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)
- return;
- 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);
- }
-}
-
-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)
- return;
- out->ellipse(cent, dim, lt, fill);
-}
-
-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)
- return;
- out->circle(cent, dim.x/2.0, lt, fill);
-}
-
-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->line(strt, v, n, lt);
- if (arrow_at_start)
- draw_arrow(strt, strt-v[0], aht, lt);
- if (arrow_at_end)
- draw_arrow(en, v[n-1] - (n > 1 ? v[n - 2] : strt), aht, lt);
-}
-
-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->spline(strt, v, n, lt);
- if (arrow_at_start)
- draw_arrow(strt, strt-v[0], aht, lt);
- if (arrow_at_end)
- draw_arrow(en, v[n-1] - (n > 1 ? v[n - 2] : strt), aht, lt);
-}
-
-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;
- if (clockwise)
- out->arc(en, cent, strt, lt);
- else
- out->arc(strt, cent, en, lt);
- if (arrow_at_start) {
- position c = cent - strt;
- draw_arrow(strt,
- (clockwise ? position(c.y, -c.x) : position(-c.y, c.x)),
- aht, lt);
- }
- if (arrow_at_end) {
- position e = en - cent;
- draw_arrow(en,
- (clockwise ? position(e.y, -e.x) : position(-e.y, e.x)),
- aht, lt);
- }
-}
-
-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 radius = 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 = radius;
- break;
- case 1:
- offset.y = radius;
- break;
- case 2:
- offset.x = -radius;
- break;
- case 3:
- offset.y = -radius;
- 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_DEFAULT_FILLED|IS_FILLED)) {
- 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. */
-
-path::path(corner c)
-: crn(c), label_list(0), ypath(0)
-{
-}
-
-path::path(char *l, corner c)
-: crn(c), ypath(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
-{
- 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 pos = ((p->obj)->*(crn))();
- result->x = pos.x;
- result->y = pos.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/pic/object.h b/contrib/groff/pic/object.h
deleted file mode 100644
index 2748e81..0000000
--- a/contrib/groff/pic/object.h
+++ /dev/null
@@ -1,217 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 {
- corner crn;
- string_list *label_list;
- path *ypath;
-public:
- path(corner = 0);
- 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;
-
-struct segment {
- int is_absolute;
- position pos;
- segment *next;
- segment(const position &, int, segment *);
-};
-
-struct rectangle_object;
-struct graphic_object;
-struct 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;
- 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/pic/output.h b/contrib/groff/pic/output.h
deleted file mode 100644
index ac490db..0000000
--- a/contrib/groff/pic/output.h
+++ /dev/null
@@ -1,79 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
- virtual void set_location(const char *, int);
- 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/pic/pic.h b/contrib/groff/pic/pic.h
deleted file mode 100644
index 72485a3..0000000
--- a/contrib/groff/pic/pic.h
+++ /dev/null
@@ -1,104 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#ifdef NEED_DECLARATION_HYPOT
-extern "C" {
- double hypot(double, double);
-}
-#endif /* NEED_DECLARATION_HYPOT */
-
-#include "assert.h"
-#include "cset.h"
-#include "lib.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;
diff --git a/contrib/groff/pic/pic.man b/contrib/groff/pic/pic.man
deleted file mode 100644
index 311a04e..0000000
--- a/contrib/groff/pic/pic.man
+++ /dev/null
@@ -1,883 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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
-.el .ds tx TeX
-.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 .
-.SS \*(tx mode
-.LP
-\*(tx mode is enabled by the
-.B \-t
-option.
-In \*(tx mode,
-.B pic
-will define a vbox called
-.B \egraph
-for each picture.
-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 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
-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 .
-.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.
-.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\fB,\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 the value of
-.I variable
-will be changed only in the innermost block in which it is defined.
-(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.)
-.LP
-Arguments of the form
-.IP
-.IR 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 10\v'-.4m'\fIx\*(ic\fR\v'.4m')
-.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
-.LP
-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
-.IP
-.B line 2i
-.LP
-means draw a line 2 inches long in the current direction.
-.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
-.B
-x = 5e\-2
-.RE
-.LP
-Text attributes can be compounded.
-For example,
-.RS
-.B
-"foo" above ljust
-.RE
-is legal.
-.LP
-There is no limit to the depth to which blocks can be examined.
-For example,
-.RS
-.B
-[A: [B: [C: box ]]] with .A.B.C.sw at 1,2
-.br
-.B
-circle at last [\^].A.B.C
-.RE
-is acceptable.
-.LP
-Arcs now have compass points
-determined by the circle of which the arc is a part.
-.LP
-Circles and arcs can be dotted or dashed.
-In \*(tx mode splines can be dotted or dashed.
-.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 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 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,
-using only the
-.BR e ,
-.BR f ,
-.B g
-or
-.B %
-format characters.
-.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 then 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
-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 \-x
-option has been given.
-Initially
-.B arrowhead
-has a value of 1.
-.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 when 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
-.B
-.nf
-for i = 1 to 4 do {
- line from `i'th box.nw to `i+1'th box.se
-}
-.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
-.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@/tmac.pic'u+3n
-.B
-@MACRODIR@/tmac.pic
-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
-<URL: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
-.LP
-Input characters that are illegal for
-.B groff
-(ie those with
-.SM ASCII
-code 0 or between 013 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.
diff --git a/contrib/groff/pic/pic.y b/contrib/groff/pic/pic.y
deleted file mode 100644
index d9191b4..0000000
--- a/contrib/groff/pic/pic.y
+++ /dev/null
@@ -1,1807 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-%{
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-extern int delim_flag;
-extern void do_copy(const char *);
-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();
-
-#ifndef HAVE_FMOD
-extern "C" {
- double fmod(double, double);
-}
-#endif
-
-#undef rand
-#undef srand
-extern "C" {
- int rand();
-#ifdef RET_TYPE_SRAND_IS_VOID
- void srand(unsigned int);
-#else
- int srand(unsigned int);
-#endif
-}
-
-/* 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 WIDTH
-%token DIAMETER
-%token UP
-%token DOWN
-%token RIGHT
-%token LEFT
-%token FROM
-%token TO
-%token AT
-%token WITH
-%token BY
-%token THEN
-%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 CENTER
-%token END
-%token START
-%token RESET
-%token UNTIL
-%token PLOT
-%token THICKNESS
-%token FILL
-%token ALIGNED
-%token SPRINTF
-%token COMMAND
-
-%token DEFINE
-%token UNDEF
-
-/* 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 DASHED DOTTED UP DOWN FILL
-%left LABEL
-
-%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
-%left ORDINAL HERE '`'
-
-/* 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 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> 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:
- 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); }
- ;
-
-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 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 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 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;
- $$.v = new double[$$.maxv];
- memcpy($$.v, oldv, $$.nv*sizeof(double));
- a_delete oldv;
- }
- }
- $$.v[$$.nv] = $3;
- $$.nv += 1;
- }
- ;
-
-position:
- position_not_place
- { $$ = $1; }
- | place
- {
- position pos = $1;
- $$.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 = $1.x - $3.x;
- $$.y = $1.y - $3.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 '<' position ',' position '>'
- {
- $$.x = (1.0 - $1)*$3.x + $1*$5.x;
- $$.y = (1.0 - $1)*$3.y + $1*$5.y;
- }
- ;
-
-between:
- BETWEEN
- | OF THE WAY BETWEEN
- ;
-
-expr_pair:
- expr ',' expr
- { $$.x = $1; $$.y = $3; }
- | '(' expr_pair ')'
- { $$ = $2; }
- ;
-
-place:
- label %prec CHOP /* line at A left == line (at A) left */
- { $$ = $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
- {
- $$ = 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; }
- | 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;
- *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;
- 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 (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 (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 (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";
- else {
- // this is a fairly feeble attempt at validation of the format
- int nspecs = 0;
- for (const char *p = form; *p != '\0'; p++)
- if (*p == '%') {
- if (p[1] == '%')
- p++;
- else
- nspecs++;
- }
- if (nspecs > 1) {
- lex_error("bad format `%1'", form);
- return strsave(form);
- }
- }
- sprintf(sprintf_buf, form, n);
- return strsave(sprintf_buf);
-}
-
-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';
- sprintf(sprintf_buf, one_format.contents());
- }
- else {
- if (i >= nv) {
- lex_error("too few arguments to sprintf");
- result += one_format;
- result += form;
- break;
- }
- one_format += *form++;
- one_format += '\0';
- sprintf(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/pic/position.h b/contrib/groff/pic/position.h
deleted file mode 100644
index ab7d546..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/pic/tex.cc b/contrib/groff/pic/tex.cc
deleted file mode 100644
index 2a91b62..0000000
--- a/contrib/groff/pic/tex.cc
+++ /dev/null
@@ -1,412 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
- 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. */
- fputs("\\expandafter\\ifx\\csname graph\\endcsname\\relax \\csname newbox\\endcsname\\graph\\fi\n"
- "\\expandafter\\ifx\\csname graphtemp\\endcsname\\relax \\csname newdimen\\endcsname\\graphtemp\\fi\n"
- "\\setbox\\graph=\\vtop{\\vskip 0pt\\hbox{%\n",
- stdout);
- 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\\advance\\graphtemp by %.3fin\n", c.y);
- }
- else {
- printf(" \\graphtemp=\\baselineskip"
- "\\multiply\\graphtemp by %d"
- "\\divide\\graphtemp by 2\n"
- " \\advance\\graphtemp by .5ex"
- "\\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);
- 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)));
-}
-
-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);
- }
-}
-
-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/pic/text.h b/contrib/groff/pic/text.h
deleted file mode 100644
index f9d3487..0000000
--- a/contrib/groff/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/pic/troff.cc b/contrib/groff/pic/troff.cc
deleted file mode 100644
index 53761b2..0000000
--- a/contrib/groff/pic/troff.cc
+++ /dev/null
@@ -1,503 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "pic.h"
-#include "common.h"
-#include "htmlindicate.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;
- 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) {
- if (fill >= 0.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) {
- 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) {
- 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:
- case line_type::dashed:
- case line_type::solid:
- simple_ellipse(0, cent, dim);
- break;
- default:
- assert(0);
- }
-}
-
-#define FILL_MAX 1000
-
-class troff_output : public simple_output {
- const char *last_filename;
- position upper_left;
- double height;
- double scale;
- double last_line_thickness;
- double last_fill;
-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);
- 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)
-{
-}
-
-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');
- graphic_start();
- 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
- 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");
- graphic_end();
- // 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) {
- printf("\\D'f %du'\\h'%du'\n.sp -1\n", int(f*FILL_MAX), -int(f*FILL_MAX));
- last_fill = f;
- }
-}
-
-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/refer/Makefile.sub b/contrib/groff/refer/Makefile.sub
deleted file mode 100644
index 1631b5e..0000000
--- a/contrib/groff/refer/Makefile.sub
+++ /dev/null
@@ -1,23 +0,0 @@
-PROG=refer
-MAN1=refer.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- command.o \
- label.o \
- ref.o \
- refer.o \
- token.o
-CCSRCS=\
- $(srcdir)/command.cc \
- $(srcdir)/ref.cc \
- $(srcdir)/refer.cc \
- $(srcdir)/token.cc
-HDRS=\
- $(srcdir)/refer.h \
- $(srcdir)/token.h \
- $(srcdir)/command.h \
- $(srcdir)/ref.h
-GRAM=$(srcdir)/label.y
-YTABC=$(srcdir)/label.cc
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/refer/TODO b/contrib/groff/refer/TODO
deleted file mode 100644
index 5bbd9bf..0000000
--- a/contrib/groff/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/refer/command.cc b/contrib/groff/refer/command.cc
deleted file mode 100644
index 004189e..0000000
--- a/contrib/groff/refer/command.cc
+++ /dev/null
@@ -1,807 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 (illegal_input_char(c))
- error_with_file_and_line(fn, lineno,
- "illegal 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 {
- 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 (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/refer/command.h b/contrib/groff/refer/command.h
deleted file mode 100644
index c7085db..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/refer/label.y b/contrib/groff/refer/label.y
deleted file mode 100644
index 2c7c909..0000000
--- a/contrib/groff/refer/label.y
+++ /dev/null
@@ -1,1177 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
-
-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 + d - 1; // ASCII dependent
- }
- *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]) {
- unsigned 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);
- assert(as1 != 0);
- const char *ae2;
- const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
- assert(as2 != 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);
- assert(as1 != 0);
- const char *ae2;
- const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
- assert(as2 != 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/refer/ref.cc b/contrib/groff/refer/ref.cc
deleted file mode 100644
index c3517b1..0000000
--- a/contrib/groff/refer/ref.cc
+++ /dev/null
@@ -1,1160 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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) {
- 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)) {
- 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') {
- if (sf > sort_fields)
- 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 (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/refer/ref.h b/contrib/groff/refer/ref.h
deleted file mode 100644
index 13a984a..0000000
--- a/contrib/groff/refer/ref.h
+++ /dev/null
@@ -1,120 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-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/refer/refer.cc b/contrib/groff/refer/refer.cc
deleted file mode 100644
index 70c696f..0000000
--- a/contrib/groff/refer/refer.cc
+++ /dev/null
@@ -1,1228 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-#include "search.h"
-#include "command.h"
-
-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();
-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();
- }
- }
- 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();
- }
- }
- 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 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU refer version %s\n", Version_string);
- fflush(stderr);
- opt++;
- break;
- }
- case '-':
- if (opt[1] == '\0') {
- finished_options = 1;
- opt++;
- break;
- }
- // fall through
- default:
- error("unrecognized option `%1'", *opt);
- usage();
- 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()
-{
- fprintf(stderr,
-"usage: %s [-benvCPRS] [-aN] [-cXYZ] [-fN] [-iXYZ] [-kX] [-lM,N] [-p file]\n"
-" [-sXYZ] [-tN] [-BL.M] [files ...]\n",
- program_name);
- exit(1);
-}
-
-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 (illegal_input_char(c))
- error("illegal 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 (illegal_input_char(d))
- error("illegal input character code %1", d);
- else
- post += d;
- }
- break;
- }
- if (d != EOF)
- ungetc(d, fp);
- }
- if (illegal_input_char(c))
- error("illegal 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 (illegal_input_char(c))
- error("illegal 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 (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 (illegal_input_char(c)) {
- error("illegal 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/refer/refer.h b/contrib/groff/refer/refer.h
deleted file mode 100644
index f0ab3cd..0000000
--- a/contrib/groff/refer/refer.h
+++ /dev/null
@@ -1,78 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-
-#include "errarg.h"
-#include "error.h"
-#include "lib.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);
-
-struct reference;
-
-void compute_labels(reference **, int);
diff --git a/contrib/groff/refer/refer.man b/contrib/groff/refer/refer.man
deleted file mode 100644
index 13708cf..0000000
--- a/contrib/groff/refer/refer.man
+++ /dev/null
@@ -1,1302 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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
-.PP
-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 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):
-.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
-.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 \|.\|.\|.
-.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.
-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
-.I
-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 "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.
diff --git a/contrib/groff/refer/token.cc b/contrib/groff/refer/token.cc
deleted file mode 100644
index 1cf6890..0000000
--- a/contrib/groff/refer/token.cc
+++ /dev/null
@@ -1,378 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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) == 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/refer/token.h b/contrib/groff/refer/token.h
deleted file mode 100644
index 6da430d..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/soelim/Makefile.sub b/contrib/groff/soelim/Makefile.sub
deleted file mode 100644
index 77007e2..0000000
--- a/contrib/groff/soelim/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=soelim
-MAN1=soelim.n
-XLIBS=$(LIBGROFF)
-OBJS=soelim.o
-CCSRCS=$(srcdir)/soelim.cc
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/soelim/TODO b/contrib/groff/soelim/TODO
deleted file mode 100644
index f2a3924..0000000
--- a/contrib/groff/soelim/TODO
+++ /dev/null
@@ -1 +0,0 @@
-Understand .pso.
diff --git a/contrib/groff/soelim/soelim.cc b/contrib/groff/soelim/soelim.cc
deleted file mode 100644
index 257fc88..0000000
--- a/contrib/groff/soelim/soelim.cc
+++ /dev/null
@@ -1,338 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "lib.h"
-#include "errarg.h"
-#include "error.h"
-#include "stringclass.h"
-#include "nonposix.h"
-
-static int include_list_length;
-static char **include_list;
-
-int compatible_flag = 0;
-
-extern int interpret_lf_args(const char *);
-
-int do_file(const char *filename);
-
-
-static void
-include_path_append(char *path)
-{
- ++include_list_length;
- size_t nbytes = include_list_length * sizeof(char *);
- if (include_list)
- include_list = (char **)realloc((void *)include_list, nbytes);
- else
- include_list = (char **)malloc(nbytes);
- if (include_list == NULL)
- {
- fprintf(stderr, "%s: out of memory\n", program_name);
- exit(2);
- }
- include_list[include_list_length - 1] = path;
-}
-
-
-void usage()
-{
- fprintf(stderr, "usage: %s [ -vC ] [ -I file ] [ files ]\n", program_name);
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- include_path_append(".");
- int opt;
- while ((opt = getopt(argc, argv, "CI:v")) != EOF)
- switch (opt) {
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU soelim version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'C':
- compatible_flag = 1;
- break;
- case 'I':
- include_path_append(optarg);
- break;
- case '?':
- usage();
- 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()
-{
- printf(".lf %d %s\n", current_lineno, current_filename);
-}
-
-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)
-{
- FILE *fp;
- string whole_filename;
- if (strcmp(filename, "-") == 0) {
- fp = stdin;
- whole_filename = filename;
- whole_filename += '\0';
- }
- else if (IS_ABSOLUTE(filename)) {
- whole_filename = filename;
- whole_filename += '\0';
- errno = 0;
- fp = fopen(filename, "r");
- if (fp == 0) {
- error("can't open `%1': %2", filename, strerror(errno));
- return 0;
- }
- }
- else {
- size_t j;
- for (j = 0; j < include_list_length; ++j)
- {
- char *path = include_list[j];
- if (0 == strcmp(path, "."))
- whole_filename = filename;
- else
- whole_filename = string(path) + "/" + filename;
- whole_filename += '\0';
- errno = 0;
- fp = fopen(whole_filename.contents(), "r");
- if (fp != 0)
- break;
- if (errno != ENOENT) {
- error("can't open `%1': %2",
- whole_filename.contents(), strerror(errno));
- return 0;
- }
- }
- if (j >= include_list_length)
- {
- errno = ENOENT;
- error("can't open `%1': %2", filename, strerror(errno));
- 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/soelim/soelim.man b/contrib/groff/soelim/soelim.man
deleted file mode 100644
index 0d927f7..0000000
--- a/contrib/groff/soelim/soelim.man
+++ /dev/null
@@ -1,76 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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@SOELIM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@soelim \- interpret .so requests in groff input
-.SH SYNOPSIS
-.B @g@soelim
-[
-.B \-Cv
-]
-[
-.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 .
-.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
-lines).
-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 \-v
-Print the version number.
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@)
diff --git a/contrib/groff/tbl/Makefile.sub b/contrib/groff/tbl/Makefile.sub
deleted file mode 100644
index 224baff..0000000
--- a/contrib/groff/tbl/Makefile.sub
+++ /dev/null
@@ -1,12 +0,0 @@
-PROG=tbl
-MAN1=tbl.n
-XLIBS=$(LIBGROFF)
-OBJS=\
- main.o \
- table.o
-CCSRCS=\
- $(srcdir)/main.cc \
- $(srcdir)/table.cc
-HDRS=\
- $(srcdir)/table.h
-NAMEPREFIX=$(g)
diff --git a/contrib/groff/tbl/main.cc b/contrib/groff/tbl/main.cc
deleted file mode 100644
index 5ff69e8..0000000
--- a/contrib/groff/tbl/main.cc
+++ /dev/null
@@ -1,1514 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "table.h"
-
-#define MAX_POINT_SIZE 99
-#define MAX_VERTICAL_SPACING 72
-
-static int compatible_flag = 0;
-
-class table_input {
- FILE *fp;
- enum { START, MIDDLE, REREAD_T, REREAD_TE, REREAD_E, 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("illegal input character code 0");
- break;
- }
- }
- return c;
- }
- break;
- case MIDDLE:
- // handle line continuation
- if ((c = getc(fp)) == '\\') {
- c = getc(fp);
- if (c == '\n')
- c = getc(fp); // perhaps state ought to be START now
- 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("illegal 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 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');
- printf(".if '\\*(.T'html' \\X(table-start(\n");
- current_lineno++;
- {
- table_input input(fp);
- process_table(input);
- if (input.ended())
- printf(".if '\\*(.T'html' \\X(table-end(\n");
- 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 a argument");
- opt->flags |= table::CENTER;
- }
- else if (strieq(p, "expand")) {
- if (arg)
- error("`expand' option does not take a argument");
- opt->flags |= table::EXPAND;
- }
- else if (strieq(p, "box") || strieq(p, "frame")) {
- if (arg)
- error("`box' option does not take a argument");
- opt->flags |= table::BOX;
- }
- else if (strieq(p, "doublebox") || strieq(p, "doubleframe")) {
- if (arg)
- error("`doublebox' option does not take a argument");
- opt->flags |= table::DOUBLEBOX;
- }
- else if (strieq(p, "allbox")) {
- if (arg)
- error("`allbox' option does not take a argument");
- opt->flags |= table::ALLBOX;
- }
- else if (strieq(p, "nokeep")) {
- if (arg)
- error("`nokeep' option does not take a argument");
- opt->flags |= table::NOKEEP;
- }
- 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);
- }
- 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;
- 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 '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 point size");
- 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 c;
- for (c = 0; c < ncolumns; c++) {
- entry_format *e = f->entry[format_index] + c;
- if (e->type != FORMAT_HLINE
- && e->type != FORMAT_DOUBLE_HLINE
- // Unfortunately tbl treats a span as needing data.
- // && e->type != FORMAT_SPAN
- )
- break;
- }
- if (c < ncolumns)
- break;
- for (c = 0; c < ncolumns; c++)
- tbl->add_entry(current_row, c, input_entry,
- f->entry[format_index] + c, 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;
- 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 (c == '\n' || c == tab_char)
- state = END;
- else {
- input_entry += 'T';
- input_entry += '}';
- input_entry += c;
- state = c == '\n' ? START : 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] == 'f' && 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)
-{
- int c;
- 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 ((c = in.get()) != EOF)
- ;
- }
- delete opt;
- delete form;
- if (!in.ended())
- error("premature end of file");
-}
-
-static void usage()
-{
- fprintf(stderr, "usage: %s [ -vC ] [ files... ]\n", program_name);
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- static char stderr_buf[BUFSIZ];
- setbuf(stderr, stderr_buf);
- int opt;
- while ((opt = getopt(argc, argv, "vCT:")) != EOF)
- switch (opt) {
- case 'C':
- compatible_flag = 1;
- break;
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU tbl version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'T':
- // I'm sick of getting bug reports from IRIX users
- break;
- case '?':
- usage();
- 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) {
- current_lineno = -1;
- error("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/tbl/table.cc b/contrib/groff/tbl/table.cc
deleted file mode 100644
index 354c7d8..0000000
--- a/contrib/groff/tbl/table.cc
+++ /dev/null
@@ -1,2778 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 PREFIX "3"
-#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 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;
- short start_col;
- short end_col;
- horizontal_span(int, int, horizontal_span *);
-};
-
-struct single_line_entry;
-struct double_line_entry;
-struct 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;
- short start_col;
- short 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");
- set_modifier(mod);
- prints(".cp \\n(" COMPATIBLE_REG "\n");
- 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));
- }
-}
-
-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;
- short 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"
- ".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");
- 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 no 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)
- 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/tbl/table.h b/contrib/groff/tbl/table.h
deleted file mode 100644
index ca55b80..0000000
--- a/contrib/groff/tbl/table.h
+++ /dev/null
@@ -1,152 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <stdio.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"
-#include "lib.h"
-
-struct inc_number {
- short inc;
- short val;
-};
-
-struct entry_modifier {
- inc_number point_size;
- inc_number vertical_spacing;
- string font;
- 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;
-};
-
-struct 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
- };
- 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);
diff --git a/contrib/groff/tbl/tbl.man b/contrib/groff/tbl/tbl.man
deleted file mode 100644
index 6016ddf..0000000
--- a/contrib/groff/tbl/tbl.man
+++ /dev/null
@@ -1,178 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 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
-Recognize
-.B .TS
-and
-.B .TE
-even when followed by a character other than space or newline.
-.TP
-.B \-v
-Print the version number.
-.SH USAGE
-Only the differences between GNU
-.B tbl
-and Unix
-.B tbl
-are described here.
-.LP
-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.
-The
-.B nokeep
-option tells
-.B tbl
-not to try and prevent breaks in this way.
-.LP
-The
-.B decimalpoint
-option specifies the character to be recognized as the decimal
-point character in place of the default period.
-It takes an argument in parentheses, which must be a single
-character, as for the
-.B tab
-option.
-.LP
-The
-.B f
-format modifier can be followed by an arbitrary length
-font name in parentheses.
-.LP
-There is a
-.B d
-format modifier which means that a vertically spanning entry
-should be aligned at the bottom of its range.
-.LP
-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 tbl
-uses register, string, macro and diversion names beginning with
-.BR 3 .
-When using
-.B tbl
-you should avoid using any names beginning with a
-.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.
-This is correct behaviour: \ea is a
-.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 "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
diff --git a/contrib/groff/tfmtodit/Makefile.sub b/contrib/groff/tfmtodit/Makefile.sub
deleted file mode 100644
index 057bb3e..0000000
--- a/contrib/groff/tfmtodit/Makefile.sub
+++ /dev/null
@@ -1,6 +0,0 @@
-PROG=tfmtodit
-MAN1=tfmtodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=tfmtodit.o
-CCSRCS=$(srcdir)/tfmtodit.cc
diff --git a/contrib/groff/tfmtodit/tfmtodit.cc b/contrib/groff/tfmtodit/tfmtodit.cc
deleted file mode 100644
index ab3ab38..0000000
--- a/contrib/groff/tfmtodit/tfmtodit.cc
+++ /dev/null
@@ -1,863 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-#include <errno.h>
-#include "lib.h"
-#include "errarg.h"
-#include "error.h"
-#include "assert.h"
-#include "cset.h"
-#include "nonposix.h"
-
-/* 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) != 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, right_adj;
- 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) != 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 {
- 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 {
- 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();
-
-int main(int argc, char **argv)
-{
- program_name = argv[0];
- int special_flag = 0;
- int skewchar = -1;
- int opt;
- const char *gf_file = 0;
- while ((opt = getopt(argc, argv, "svg:k:")) != 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':
- {
- extern const char *Version_string;
- fprintf(stderr, "tfmtodit version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case '?':
- usage();
- break;
- case EOF:
- assert(0);
- }
- if (argc - optind != 3)
- usage();
- 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;
- 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 (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()
-{
- fprintf(stderr, "usage: %s [-sv] [-g gf_file] [-k skewchar] tfm_file map_file font\n",
- program_name);
- exit(1);
-}
diff --git a/contrib/groff/tfmtodit/tfmtodit.man b/contrib/groff/tfmtodit/tfmtodit.man
deleted file mode 100644
index 6e50aa2..0000000
--- a/contrib/groff/tfmtodit/tfmtodit.man
+++ /dev/null
@@ -1,175 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-2000 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
-The gf file created using this modified
-.B cm.base
-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@)
diff --git a/contrib/groff/tmac/groff_markup.man b/contrib/groff/tmac/groff_markup.man
deleted file mode 100644
index 46233ce..0000000
--- a/contrib/groff/tmac/groff_markup.man
+++ /dev/null
@@ -1,319 +0,0 @@
-.TH GROFF_MARKUP @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.\" Copyright (C) 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-.\"
-.\" user level guide to using the -markup macroset
-.\"
-.do mso tmac.arkup
-.LINE
-.SH NAME
-groff_markup \- groff macros for authoring web pages
-.LINE
-.SH SYNOPSIS
-.B "groff \-markup"
-[ options ]
-file ...
-.SH DESCRIPTION
-This manual page describes the GNU \-markup macros, which is part of the
-groff document formatting system.
-The manual page is very a basic guide, and the html device driver
-.RB ( grohtml )
-is still very alpha.
-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
-\fCtroffrc\fP file) if you use \fC-Thtml\fP.
-.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.
-.SH SYNPOSIS
-.ta 2iL
-\&.HTMLINDEX determine automatic link cut off
-.br
- point for sections/headers
-.br
-\&.BODYCOLOR specify colours on a web page
-.br
-\&.BACKGROUND specify background image
-.br
-\&.URL create a url using two parameters
-.br
-\&.MAILTO create a html email address
-.br
-\&.FTP create an ftp reference
-.br
-\&.IMAGE include an image file
-.br
-\&.HTML pass an html raw request to the
-.br
- device driver
-.br
-\&.TAG generate an html name tag from $1
-.br
-.\"\&.CDFTP optionally create two different links
-.\".br
-.\" depending on hostname
-.\".br
-\&.LINE create a full width horizontal rule
-.br
-.PP
-Output of the
-.IR pic ,
-.IR eqn ,
-.IR refer ,
-and
-.I tbl
-preprocessors is acceptable as input.
-.SH REQUESTS
-.TP
-.B HTMLINDEX
-determines the cut off point for automatic link generation to headings.
-By default all headings found in a troff document have links created to them
-at the top of the html web page.
-It maybe that many of the lower heading levels do not require links.
-Alternatively some web pages may not need any heading links at all, in which
-case:
-.sp
-.nf
-\fC\&.HTMLINDEX 0\fP
-.fi
-.sp
-will tell
-.B grohtml
-not to generate links.
-An \fCHTMLINDEX\fP of 2 will mean that a heading
-.sp
-.B "1.1.1 Some Title"
-.sp
-will not be included in the links either as it is said to have a heading
-level of three.
-.TP
-.B BODYCOLOR
-takes five parameters: foreground, background, active hypertext link,
-hypertext link not yet visited, and visited hypertext link colour.
-.TP
-.B BACKGROUND
-the only parameter to this macro is the background image file.
-.TP
-.B URL
-generates
-.TAG URL
-a URL using either two or three arguments.
-$1 is the name of the link, $2 is the actual URL, and $3 is optional stuff
-to be printed immediately after $2.
-Here is how to encode
-.URL "homepage for groff" http://groff.ffii.org/ :
-.sp
-.nf
-\s-2\fC\&.URL "homepage for groff" http://groff.ffii.org/ :\fP\s+2
-.fi
-.sp
-If this is processed by a device other than \fC-Thtml\fP
-it appears as:
-homepage for groff \(lahttp://groff.ffii.org\(ra.
-The URL macro can be of any type; for example we can reference
-.URL "Eric Raymond's pic guide" pic.html
-by:
-.sp
-.nf
-\s-2\fC\&.URL "Eric Raymond's pic guide" pic.html\fP\s+2
-.fi
-.sp
-.TP
-.B MAILTO
-generates 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, and
-an optional third argument is stuff printed immediately after the
-second argument.
-For example, the groff maintainers are
-.MAILTO wl@gnu.org "Werner Lemberg"
-and
-.MAILTO Ted.Harding@nessie.mcc.ac.uk "Ted Harding" .
-This is achieved by the following macros:
-.sp
-.nf
-\s-2\fC\&.MAILTO wl@gnu.org "Werner Lemberg"\fP
-.sp
-\fC\&.MAILTO Ted.Harding@nessie.mcc.ac.uk \\
-.br
-"Ted Harding" .\s+2\fP
-.fi
-.sp
-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, \fCtmac.arkup\fP inserts a zero-width character which
-expands to a harmless space (only if in HTML mode)
-.TP
-.B FTP
-indicates that data can be obtained via ftp.
-The first argument is the browser text and the second is the url.
-A third argument, similar to the macros above, is intended for stuff printed
-immediately after the second argument.
-The second and the third parameter are optional.
-As an example, here the location of the
-.FTP "current groff development distribution" \
-ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz .
-The macro example above was specified by:
-.sp
-\s-2\fC\&.FTP "current groff development distribution" \\
-.br
-ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz .\fP\s+2
-.sp
-.TP
-.B IMAGE
-allows the document to include pictures.
-The first argument is the image file.
-The next two arguments are optional:
-Argument two is the width in pixels (default is 400 pixels if absent).
-The third argument is the height in pixels (default is the width value if
-absent).
-.sp
-.TP
-.B HTML
-all text after this macro is treated as raw html.
-If the document is processed \fIwithout\fP \fC-Thtml\fP then
-the macro is ignored.
-This macro is a building block for other higher level macros.
-.sp
-For example, the \fCBACKGROUND\fP macro is defined as:
-.nf
-\fC\&.de BACKGROUND
-\&. HTML <body background=\\$1>
-\&..
-\fP
-.fi
-.TP
-.B TAG
-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 `\fC#\fP' since it is
-a local reference.
-This link was achieved via placing a TAG in the URL description above;
-the source looks like this:
-.sp
-\s-2\fC\&.TP
-.br
-\&.B URL
-.br
-generates
-.br
-\&.TAG URL
-.br
-a URL using either two or three
-.br
-arguments.
-.br
-$1 is the name of the link, $2 is the actual URL
-.br
-\fP\s+2etc.
-.sp
-.\".TP
-.\".B CDFTP
-.\"takes four arguments.
-.\"Basically it is the FTP macro with optional local reference.
-.\"It was designed to allow the same groff source to be built on two different
-.\"machines and access the ftp data differently.
-.\"For example, on a web server you might wish for the web page to reference
-.\"a web site.
-.\"However, if you were producing a CDROM of your information you might wish
-.\"for the ftp data to be also stored on your CDROM and referenced as a file.
-.\"An example to get the current groff development distribution
-.\".CDFTP merlin "click here." \
-.\"ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz \
-.\"../../groff.tar.gz
-.\"The source for this CDFTP invocation is
-.\".sp
-.\"\fC\s-2\&.CDFTP merlin "click here." \
-.\"ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz \
-.\"../../groff.tar.gz\fP\s+2
-.\".sp
-.\"which means if the html is generated on machine \fCmerlin\fP
-.\"then generate a URL to \fC../../groff.tar.gz\fP.
-.\"Otherwise construct an FTP URL to
-.\"\fCftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz\fP.
-.TP
-.B LINE
-generates a full width horizontal rule.
-Example:
-.sp
-\fC\s-2\&.LINE\fP\s+2
-.sp
-.SH
-SECTION HEADING LINKS
-.LP
-By default
-.B grohtml
-generates links to all section headings and places these at the top of the
-html document.
-.B Grohtml
-has to guess what a section heading looks like \(em remember that all
-.B grohtml
-actually sees is a device independent language telling it where to place
-text, draw lines, change font sizes and faces etc.
-It believes a section heading to be a line of bold text which starts at the
-left most margin.
-Consequently it may misinterpret.
-Users can turn off all heading and title guessing by giving invoking groff
-with \fCgroff -P-g\fP.
-.SH
-LIMITATIONS OF GROHTML
-.LP
-Although basic text can be translated in a straightforward fashion there are
-some areas where
-.B grohtml
-has to try and guess text relationship.
-In particular, whenever
-.B grohtml
-encounters text tables and indented paragraphs or two column mode it will
-try and utilize the html table construct to preserve columns.
-.B Grohtml
-also attempts to work out which lines should be automatically formatted by
-the browser.
-Ultimately in trying to make reasonable guesses most of the time it will
-make mistakes.
-Hopefully these mistakes will happen less and less as we get bug reports
-and patches :-).
-.PP
-Tbl, pic, eqn's are also generated using images which may be
-considered a limitation.
-.SH FILES
-@MACRODIR@/tmac.arkup
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
-.BR grohtml (@MAN1EXT@),
-.LP
-.SH AUTHOR
-.B Grohtml
-is written by
-.MAILTO gaius@glam.ac.uk "Gaius Mulley"
-.LINE
-.SH BUGS
-Report bugs to the
-.MAILTO 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.
-.LINE
diff --git a/contrib/groff/tmac/groff_mdoc.samples.man b/contrib/groff/tmac/groff_mdoc.samples.man
deleted file mode 100644
index cdbbc21..0000000
--- a/contrib/groff/tmac/groff_mdoc.samples.man
+++ /dev/null
@@ -1,2925 +0,0 @@
-.\" $NetBSD: mdoc.samples.7,v 1.21 1999/08/23 21:54:20 ross Exp $
-.\"
-.\" 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. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 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 tutorial sampler 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 24, 1997
-.Os
-.Dt MDOC.SAMPLES 7
-.Sh NAME
-.Nm mdoc.samples
-.Nd tutorial sampler for writing
-.Bx
-manuals with
-.Nm \-mdoc
-.Sh SYNOPSIS
-.Nm man mdoc.samples
-.Sh DESCRIPTION
-A tutorial sampler for writing
-.Bx
-manual pages with the
-.Nm \-mdoc
-macro package, a
-.Em content Ns \-based
-and
-.Em domain Ns \-based
-formatting
-package for
-.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 manual domain and the 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
-.Bx
-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.
-It is hoped 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
-Since a tutorial document is normally read when a person
-desires to use the material immediately, the assumption has
-been made that the user of this document may be impatient.
-The material presented in the remained of this document is
-outlined as follows:
-.Bl -enum -offset indent
-.It
-.Tn "TROFF IDIOSYNCRASIES"
-.Bl -tag -width flag -compact -offset indent
-.It "Macro Usage" .
-.It "Passing Space Characters in an Argument" .
-.It "Trailing Blank Space Characters (a warning)" .
-.It "Escaping Special Characters" .
-.El
-.It
-.Tn "THE ANATOMY OF A MAN PAGE"
-.Bl -tag -width flag -compact -offset indent
-.It "A manual page template" .
-.El
-.It
-.Tn "INTRODUCTION OF TITLE MACROS" .
-.It
-.Tn "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS" .
-.Bl -tag -width flag -compact -offset indent
-.It "What's in a name..." .
-.It "General Syntax" .
-.El
-.It
-.Tn "MANUAL DOMAIN"
-.Bl -tag -width flag -compact -offset indent
-.It "Addresses" .
-.It "Arguments" .
-.It "Configuration Declarations (section four only)" .
-.It "Command Modifier" .
-.It "Defined Variables" .
-.It "Errno's (Section two only)" .
-.It "Environment Variables" .
-.It "Function Argument" .
-.It "Function Declaration" .
-.It "Flags" .
-.It "Functions (library routines)" .
-.It "Function Types" .
-.\" .It "Header File (including source code)" .
-.It "Interactive Commands" .
-.It "Literals" .
-.It "Names" .
-.It "Options" .
-.It "Pathnames" .
-.It "Variables" .
-.It "Cross References" .
-.El
-.It
-.Tn "GENERAL TEXT DOMAIN"
-.Bl -tag -width flag -compact -offset indent
-.It "AT&T Macro" .
-.It "BSD Macro" .
-.It "UNIX Macro" .
-.It "Emphasis Macro" .
-.It "Enclosure/Quoting Macros"
-.Bl -tag -width flag -compact -offset indent
-.It "Angle Bracket Quote/Enclosure" .
-.It "Bracket Quotes/Enclosure" .
-.It "Double Quote macro/Enclosure" .
-.It "Parenthesis Quote/Enclosure" .
-.It "Single Quotes/Enclosure" .
-.It "Prefix Macro" .
-.El
-.It "Extended Arguments" .
-.It "No\-Op or Normal Text Macro" .
-.It "No Space Macro" .
-.It "Section Cross References" .
-.It "Symbolic Macro" .
-.It "References and Citations" .
-.It "Trade Names (Acronyms and Type Names)" .
-.El
-.It
-.Tn "PAGE STRUCTURE DOMAIN"
-.Bl -tag -width flag -compact -offset indent
-.It "Section Headers" .
-.It "Paragraphs and Line Spacing" .
-.It "Keeps" .
-.It "Displays" .
-.It "Lists and Columns" .
-.El
-.It
-.Tn "PREDEFINED STRINGS"
-.It
-.Tn "DIAGNOSTICS"
-.It
-.Tn "FORMATTING WITH GROFF, TROFF AND NROFF"
-.It
-.Tn "BUGS"
-.El
-.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 dirty details of
-.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
-.Xr troff 1 ,
-a macro is called by placing a
-.Ql \&\.
-(dot character)
-at the beginning of
-a line followed by the two character name for the macro.
-Arguments may follow the macro separated by spaces.
-It is the dot character at the beginning of the line which causes
-.Xr troff 1
-to interpret the next two characters as a macro name.
-To place a
-.Ql \&\.
-(dot character)
-at the beginning of a line in some context other than
-a macro invocation, precede the
-.Ql \&\.
-(dot) with the
-.Ql \e&
-escape sequence.
-The
-.Ql \e&
-translates literally to a zero width space, and is never displayed in the
-output.
-.Pp
-In general,
-.Xr troff 1
-macros accept up to nine arguments, any
-extra arguments are ignored.
-Most macros in
-.Nm \-mdoc
-accept nine arguments and,
-in limited cases, arguments may be continued or extended
-on the
-next line (See
-.Sx Extended Arguments ) .
-A few 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 is determined
-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).
-It is in this manner that many macros are nested; 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
-.Li \&.Op \&Fl s \&Ar bytes
-.El
-.Pp
-To prevent a two character
-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
-.Li \&.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 parsed and macros which may be called from an argument
-list are referred to as callable
-throughout this document and in the companion quick reference
-manual
-.Xr mdoc 7 .
-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.
-.Ss Passing Space Characters in an Argument
-Sometimes it is desirable to give as one argument a string
-containing one or more blank space characters.
-This may be necessary
-to defeat the nine argument limit or to specify arguments to macros
-which expect particular arrangement of items in the argument list.
-For example,
-the function macro
-.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.
-.Em Implementation note :
-Unfortunately, the most convenient way
-of passing spaces in between quotes by reassigning individual
-arguments before parsing was fairly expensive speed wise
-and space wise to implement in all the macros for
-.Tn AT&T
-.Xr troff .
-It is not expensive for
-.Xr groff
-but for the sake of portability, has been limited
-to the following macros which need
-it the most:
-.Pp
-.Bl -tag -width 4n -offset indent -compact
-.It Li \&Cd
-Configuration declaration (section 4
-.Sx SYNOPSIS )
-.It Li \&Bl
-Begin list (for the width specifier).
-.It Li \&Em
-Emphasized text.
-.It Li \&Fn
-Functions (sections two and four).
-.It Li \&It
-List items.
-.It Li \&Li
-Literal text.
-.It Li \&Sy
-Symbolic text.
-.It Li \&%B
-Book titles.
-.It Li \&%J
-Journal names.
-.It Li \&%O
-Optional notes for a reference.
-.It Li \&%R
-Report title (in a reference).
-.It Li \&%T
-Title of article in a book or journal.
-.El
-.Pp
-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.
-The method is useful for strings which are not expected
-to overlap a line boundary.
-For example:
-.Bl -tag -width "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
-or quotes
-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 <blank-space><end-of-line> character sequences.
-Should the need
-arise to force 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.
-.Sh THE ANATOMY OF A MAN PAGE
-The body of a man page is easily constructed from a basic
-template found in the file:
-.Bd -literal -offset indent
-\&.\e" /usr/share/misc/mdoc.template:
-\&.\e" The following six lines are required.
-\&.Dd Month day, year
-\&.Os OPERATING_SYSTEM [version/release]
-\&.Dt DOCUMENT_TITLE [section number] [volume]
-\&.Sh NAME
-\&.Sh SYNOPSIS
-\&.Sh DESCRIPTION
-\&.\e" The following requests should be uncommented and
-\&.\e" used where appropriate. This next request is
-\&.\e" for sections 2 and 3 function return values only.
-\&.\e" .Sh RETURN VALUES
-\&.\e" This next request is for sections 1, 6, 7 & 8 only
-\&.\e" .Sh ENVIRONMENT
-\&.\e" .Sh FILES
-\&.\e" .Sh EXAMPLES
-\&.\e" This next request is for sections 1, 6, 7 & 8 only
-\&.\e" (command return values (to shell) and
-\&.\e" fprintf/stderr type diagnostics)
-\&.\e" .Sh DIAGNOSTICS
-\&.\e" The next request is for sections 2 and 3 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 macros
-.Pq Li \&.Dd , \&.Os , \&.Dt ;
-the document date,
-the operating system the man page or subject source is developed
-or modified for,
-and the man page title
-.Pq Em in upper case
-along with the section of the manual the page
-belongs in.
-These macros identify the page,
-and are discussed below in
-.Sx TITLE MACROS .
-.Pp
-The remaining items in the template are section headers
-.Pq Li \&.Sh ;
-of which
-.Sx NAME ,
-.Sx SYNOPSIS
-and
-.Sx 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 TITLE MACROS
-The title macros are the first portion of the page structure
-domain, but are presented first and separate 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 one called once at the very beginning of the document
-and are used to construct the headers and footers only.
-.Bl -tag -width 6n
-.It Li \&.Dt DOCUMENT_TITLE section# [volume]
-The document title is the
-subject of the man page and must be in
-.Tn CAPITALS
-due to troff
-limitations.
-The section number may be 1,\ ...,\ 9,
-and if it is specified,
-the volume title may be omitted.
-A volume title may be arbitrary or one of the following:
-.\" .Cl
-.\" USD UNIX User's Supplementary Documents
-.\" .Cl
-.\" PS1 UNIX Programmer's Supplementary Documents
-.Pp
-.Bl -column SMM -offset indent -compact
-.It Li AMD NetBSD Ancestral Manual Documents
-.It Li SMM NetBSD System Manager's Manual
-.It Li URM NetBSD Reference Manual
-.It Li PRM NetBSD Programmer's Manual
-.It Li KM NetBSD Kernel Manual
-.El
-.Pp
-The default volume labeling is
-.Li URM
-for sections 1, 6, and 7;
-.Li SMM
-for section 8;
-.Li PRM
-for sections 2, 3, 4, and 5;
-.Li KM
-for section 9.
-.\" .Cl
-.\" MMI UNIX Manual Master Index
-.\" .Cl
-.\" CON UNIX Contributed Software Manual
-.\" .Cl
-.\" LOC UNIX Local Manual
-.It Li \&.Os operating_system release#
-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, e.g. 4.3, 4.3+Tahoe, V.3,
-V.4.
-Unrecognized arguments are displayed as given in the page footer.
-For instance, a typical footer might be:
-.Pp
-.Dl \&.Os BSD 4.3
-.Pp
-or for a locally produced set
-.Pp
-.Dl \&.Os CS Department
-.Pp
-The Berkeley default,
-.Ql \&.Os
-without an argument, has been defined as
-.Nx 1.4
-in the site specific file
-.Pa /usr/share/tmac/tmac.doc-common .
-Note, if the
-.Ql \&.Os
-macro is not present, the bottom left corner of the page
-will be ugly.
-.It Li \&.Dd month day, year
-The date should be written formally:
-.Pp
-.ne 5
-.Dl January 25, 1989
-.sp
-Note that the date must not be placed in quotes!
-.El
-.Sh MANUAL DOMAIN
-.Ss What's in a name...
-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 request 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
-\&.Va argument1 argument2 ... argument9
-.Ed
-.Pp
-The
-.Ql \&.Va
-is a macro command or request, and anything following it is an argument 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
-.Ar infile outfile
-.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,
-.Ar infile
-and
-.Ar outfile
-are
-called
-.Em arguments .
-The macros which formatted the above example:
-.Bd -literal -offset indent
-\&.Nm filter
-\&.Op \&Fl flag
-\&.Ar infile outfile
-.Ed
-.Pp
-In the third case, discussion of commands and command syntax
-includes both examples above, but may add more detail.
-The
-arguments
-.Ar infile
-and
-.Ar outfile
-from the example above might be referred to as
-.Em operands
-or
-.Em file arguments .
-Some command line argument lists are quite long:
-.Bl -tag -width make -offset indent
-.It Nm make
-.Op Fl eiknqrstv
-.Op Fl D Ar variable
-.Op Fl d Ar flags
-.Op Fl f Ar makefile
-.Bk -words
-.Op Fl I Ar directory
-.Ek
-.Op Fl j Ar max_jobs
-.Op Ar variable=value
-.Bk -words
-.Op Ar target ...
-.Ek
-.El
-.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=value
-\&.Bk -words
-\&.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:
-.Ql \&.Ar ,
-.Ql \&.Fl ,
-.Ql \&.Nm ,
-and
-.Ql \&.Pa
-differ only when called without arguments;
-.Ql \&.Fn
-and
-.Ql \&.Xr
-impose an order on their argument lists
-and the
-.Ql \&.Op
-and
-.Ql \&.Fn
-macros
-have nesting limitations.
-All content macros
-are capable of recognizing and properly handling punctuation,
-provided each punctuation character is separated by a leading space.
-If an request is given:
-.Pp
-.Dl \&.Li sptr, ptr),
-.Pp
-The result is:
-.Pp
-.Dl Li sptr, ptr),
-.Pp
-The punctuation is not recognized and all is output in the
-literal font. If the punctuation is separated by a leading
-white space:
-.Pp
-.Dl \&.Li "sptr , ptr ) ,"
-.Pp
-The result is:
-.Pp
-.Dl Li sptr , ptr ) ,
-.Pp
-The punctuation is now recognized and is output in the
-default font distinguishing it from the strings in literal font.
-.Pp
-To remove the special meaning from a punctuation character
-escape it with
-.Ql \e& .
-.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 .
-.Ss Address Macro
-The address macro identifies an address construct
-of the form addr1[,addr2[,addr3]].
-.Pp
-.Dl Usage: .Ad address ... \*(Pu
-.Bl -tag -width ".Ad f1 , f2 , f3 :" -compact -offset 14n
-.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
-It is an error to call
-.Li \&.Ad
-without arguments.
-.Li \&.Ad
-is callable by other macros and is parsed.
-.Ss Argument Macro
-The
-.Li \&.Ar
-argument macro may be used whenever
-a command line argument is referenced.
-.Pp
-.Dl Usage: .Ar argument ... \*(Pu
-.Bl -tag -width ".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
-If
-.Li \&.Ar
-is called without arguments
-.Ql Ar
-is assumed.
-The
-.Li \&.Ar
-macro is parsed and is callable.
-.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.
-This macro accepts quoted arguments (double quotes only).
-.Pp
-.Bl -tag -width "device le0 at scode?" -offset indent
-.It Cd "device le0 at scode?"
-produced by:
-.Ql ".Cd device le0 at scode?" .
-.El
-.Ss Command Modifier
-The command modifier is identical to the
-.Ql \&.Fl
-(flag) command with the exception
-the
-.Ql \&.Cm
-macro does not assert a dash
-in front of every argument.
-Traditionally flags are marked by the
-preceding dash, 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 .
-.Ss Defined Variables
-A variable which is defined in an include file is specified
-by the macro
-.Ql \&.Dv .
-.Pp
-.Dl Usage: .Dv defined_variable ... \*(Pu
-.Bl -tag -width ".Dv MAXHOSTNAMELEN" -compact -offset 14n
-.It Li ".Dv MAXHOSTNAMELEN"
-.Dv MAXHOSTNAMELEN
-.It Li ".Dv TIOCGPGRP )"
-.Dv TIOCGPGRP )
-.El
-.Pp
-It is an error to call
-.Ql \&.Dv
-without arguments.
-.Ql \&.Dv
-is parsed and is callable.
-.Ss Errno's (Section two only)
-The
-.Ql \&.Er
-errno macro specifies the error return value
-for section two 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 ERRNOTYPE ... \*(Pu
-.Bl -tag -width ".Bq Er ENOTDIR" -compact -offset 14n
-.It Li \&.Er ENOENT
-.Er ENOENT
-.It Li \&.Er ENOENT\ )\ ;
-.Er ENOENT ) ;
-.It Li \&.Bq \&Er ENOTDIR
-.Bq Er ENOTDIR
-.El
-.Pp
-It is an error to call
-.Ql \&.Er
-without arguments.
-The
-.Ql \&.Er
-macro is parsed and is callable.
-.Ss Environment Variables
-The
-.Ql \&.Ev
-macro specifies an environment variable.
-.Pp
-.Dl Usage: .Ev argument ... \*(Pu
-.Bl -tag -width ".Ev PRINTER ) ) ," -compact -offset 14n
-.It Li \&.Ev DISPLAY
-.Ev DISPLAY
-.It Li \&.Ev PATH\ .
-.Ev PATH .
-.It Li \&.Ev PRINTER\ )\ )\ ,
-.Ev PRINTER ) ) ,
-.El
-.Pp
-It is an error to call
-.Ql \&.Ev
-without arguments.
-The
-.Ql \&.Ev
-macro is parsed and is callable.
-.Ss Function Argument
-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 should a parameter list be too
-long for the
-.Ql \&.Fn
-macro and the enclosure macros
-.Ql \&.Fo
-and
-.Ql \&.Fc
-must be used.
-.Ql \&.Fa
-may also be used to refer to structure members.
-.Pp
-.Dl Usage: .Fa function_argument ... \*(Pu
-.Bl -tag -width ".Fa d_namlen\ )\ )\ ," -compact -offset 14n
-.It Li \&.Fa d_namlen\ )\ )\ ,
-.Fa d_namlen ) ) ,
-.It Li \&.Fa iov_len
-.Fa iov_len
-.El
-.Pp
-It is an error to call
-.Ql \&.Fa
-without arguments.
-.Ql \&.Fa
-is parsed and is callable.
-.Ss Function Declaration
-The
-.Ql \&.Fd
-macro is used in the
-.Sx SYNOPSIS
-section with section two or three
-functions.
-The
-.Ql \&.Fd
-macro does not call other macros and is not callable by other
-macros.
-.Pp
-.Dl Usage: .Fd include_file (or defined variable)
-.Pp
-In the
-.Sx SYNOPSIS
-section a
-.Ql \&.Fd
-request 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.
-.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 argument ... \*(Pu
-.Bl -tag -width ".Fl \-s \-t \-v" -compact -offset 14n
-.It Li \&.Fl
-.Fl
-.It Li \&.Fl cfv
-.Fl cfv
-.It Li \&.Fl cfv\ .
-.Fl cfv .
-.It Li \&.Fl s v t
-.Fl s v t
-.It Li \&.Fl -\ ,
-.Fl - ,
-.It Li \&.Fl xyz\ )\ ,
-.Fl xyz ) ,
-.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.
-The
-.Ql \&.Fl
-macro is parsed and is callable.
-.Ss Functions (library routines)
-The .Fn macro is modeled on ANSI C conventions.
-.Bd -literal
-Usage: .Fn [type] function [[type] parameters ... \*(Pu]
-.Ed
-.Bl -tag -width ".Fn .int align. .const * char *sptrsxx" -compact
-.It Li "\&.Fn getchar"
-.Fn getchar
-.It Li "\&.Fn strlen ) ,"
-.Fn strlen ) ,
-.It Li \&.Fn "\\*qint align\\*q" "\\*qconst * char *sptrs\\*q" ,
-.Fn "int align" "const * char *sptrs" ,
-.El
-.Pp
-It is an error to call
-.Ql \&.Fn
-without any arguments.
-The
-.Ql \&.Fn
-macro
-is parsed and is callable,
-note that any call to another macro signals the end of
-the
-.Ql \&.Fn
-call (it will close-parenthesis at that point).
-.Pp
-For functions that have more than eight parameters (and this
-is rare), the
-macros
-.Ql \&.Fo
-(function open)
-and
-.Ql \&.Fc
-(function close)
-may be used with
-.Ql \&.Fa
-(function argument)
-to get around the limitation. For example:
-.Bd -literal -offset indent
-\&.Fo "int 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 -filled -offset indent
-.Fo "int 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
-The
-.Ql \&.Fo
-and
-.Ql \&.Fc
-macros are parsed and are callable.
-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.
-At the moment,
-.Ql \&.Fn
-does not check its word boundaries
-against troff line lengths and may split across a newline
-ungracefully.
-This will be fixed in the near future.
-.Ss Function Type
-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 page break allowing the function name to appear
-on the next line).
-.Pp
-.Dl Usage: .Ft type ... \*(Pu
-.Bl -tag -width "\&.Ft struct stat" -offset 14n -compact
-.It Li \&.Ft struct stat
-.Ft struct stat
-.El
-.Pp
-The
-.Ql \&.Ft
-request is not callable by other macros.
-.Ss Interactive Commands
-The
-.Ql \&.Ic
-macro designates an interactive or internal command.
-.Pp
-.Dl Usage: .Li argument ... \*(Pu
-.Bl -tag -width ".Ic setenv , unsetenvxx" -compact -offset 14n
-.It Li \&.Ic :wq
-.Ic :wq
-.It Li \&.Ic do while {...}
-.Ic do while {...}
-.It Li \&.Ic setenv\ , unsetenv
-.Ic setenv , unsetenv
-.El
-.Pp
-It is an error to call
-.Ql \&.Ic
-without arguments.
-The
-.Ql \&.Ic
-macro is parsed and is callable.
-.Ss Literals
-The
-.Ql \&.Li
-literal macro may be used for special characters,
-variable constants, anything which should be displayed as it
-would be typed.
-.Pp
-.Dl Usage: .Li argument ... \*(Pu
-.Bl -tag -width ".Li cntrl-D ) ," -compact -offset 14n
-.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
-.Ql \&.Li
-macro is parsed and is callable.
-.Ss Name Macro
-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.
-If trailing punctuation is required with this feature,
-use
-.Qq
-as a first argument to
-.Ql \&.Nm .
-Note:
-a section two
-or three document function name is addressed with the
-.Ql \&.Nm
-in the
-.Sx 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 the
-.Ql \&.Ic
-is nearly identical
-to
-.Ql \&.Nm ,
-it can not recall the first argument it was invoked with.
-.Pp
-.Dl Usage: .Nm argument ... \*(Pu
-.Bl -tag -width ".Nm mdoc.samples" -compact -offset 14n
-.It Li \&.Nm mdoc.samples
-.Nm mdoc.samples
-.It Li \&.Nm \e-mdoc
-.Nm \-mdoc
-.It Li \&.Nm foo\ )\ )\ ,
-.Nm foo ) ) ,
-.It Li \&.Nm
-.Nm
-.It Li \&.Nm \&"\&"\ :
-.Nm "" :
-.El
-.Pp
-The
-.Ql \&.Nm
-macro is parsed and is callable.
-.Ss Options
-The
-.Ql \&.Op
-macro
-places option brackets around the any remaining arguments on the command
-line, and places any
-trailing punctuation outside the brackets.
-The macros
-.Ql \&.Oc
-and
-.Ql \&.Oo
-may be used across one or more lines.
-.Pp
-.Dl Usage: .Op options ... \*(Pu
-.Bl -tag -width ".Op Fl c Ar objfil Op Ar corfil ," -compact -offset indent
-.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
-.El
-.Pp
-The
-.Ql \&.Oc
-and
-.Ql \&.Oo
-macros:
-.Bd -literal -offset indent
-\&.Oo
-\&.Op \&Fl k \&Ar kilobytes
-\&.Op \&Fl i \&Ar interval
-\&.Op \&Fl c \&Ar count
-\&.Oc
-.Ed
-.Pp
-Produce:
-.Oo
-.Op Fl k Ar kilobytes
-.Op Fl i Ar interval
-.Op Fl c Ar count
-.Oc
-.Pp
-The macros
-.Ql \&.Op ,
-.Ql \&.Oc
-and
-.Ql \&.Oo
-are parsed and are callable.
-.Ss Pathnames
-The
-.Ql \&.Pa
-macro formats path or file names.
-.Pp
-.Dl Usage: .Pa pathname \*(Pu
-.Bl -tag -width ".Pa /tmp/fooXXXXX ) ." -compact -offset 14n
-.It Li \&.Pa /usr/share
-.Pa /usr/share
-.It Li \&.Pa /tmp/fooXXXXX\ )\ .
-.Pa /tmp/fooXXXXX ) .
-.El
-.Pp
-The
-.Ql \&.Pa
-macro is parsed and is callable.
-.Ss Variables
-Generic variable reference:
-.Pp
-.Dl Usage: .Va variable ... \*(Pu
-.Bl -tag -width ".Va char s ] ) ) ," -compact -offset 14n
-.It Li \&.Va count
-.Va count
-.It Li \&.Va settimer ,
-.Va settimer ,
-.It Li \&.Va int\ *prt\ )\ :
-.Va int\ *prt ) :
-.It Li \&.Va char\ s\ ]\ )\ )\ ,
-.Va char\ s ] ) ) ,
-.El
-.Pp
-It is an error to call
-.Ql \&.Va
-without any arguments.
-The
-.Ql \&.Va
-macro is parsed and is callable.
-.Ss Manual Page Cross References
-The
-.Ql \&.Xr
-macro expects the first argument to be
-a manual page name, and the second argument, if it exists,
-to be either a section page number or punctuation.
-Any
-remaining arguments are assumed to be punctuation.
-.Pp
-.Dl Usage: .Xr man_page [1,...,9] \*(Pu
-.Bl -tag -width ".Xr mdoc 7 ) ) ," -compact -offset 14n
-.It Li \&.Xr mdoc
-.Xr mdoc
-.It Li \&.Xr mdoc\ ,
-.Xr mdoc ,
-.It Li \&.Xr mdoc 7
-.Xr mdoc 7
-.It Li \&.Xr mdoc 7\ )\ )\ ,
-.Xr mdoc 7 ) ) ,
-.El
-.Pp
-The
-.Ql \&.Xr
-macro is parsed and is callable.
-It is an error to call
-.Ql \&.Xr
-without
-any arguments.
-.Sh GENERAL TEXT DOMAIN
-.Ss AT&T Macro
-.Bd -literal -offset indent -compact
-Usage: .At [v1 .. v7 | 32v | V.1 | V.4] ... \*(Pu
-.Ed
-.Bl -tag -width ".At v6 ) ," -compact -offset 14n
-.It Li ".At"
-.At
-.It Li ".At v6 ."
-.At v6 .
-.El
-.Pp
-The
-.Ql \&.At
-macro is
-.Em not
-parsed and
-.Em not
-callable. It accepts at most two arguments.
-.Ss BSD Macro
-.Dl Usage: .Bx [Version/release] ... \*(Pu
-.Bl -tag -width ".Bx 4.3 ) ," -compact -offset 14n
-.It Li ".Bx"
-.Bx
-.It Li ".Bx 4.3 ."
-.Bx 4.3 .
-.El
-.Pp
-The
-.Ql \&.Bx
-macro is parsed and is callable.
-.Ss NetBSD Macro
-.Dl Usage: .Nx [Version/release] ... \*(Pu
-.Bl -tag -width ".Nx 1.4 ) ," -compact -offset 14n
-.It Li ".Nx"
-.Nx
-.It Li ".Nx 1.4 ."
-.Nx 1.4 .
-.El
-.Pp
-The
-.Ql \&.Nx
-macro is parsed and is callable.
-.Ss FreeBSD Macro
-.Dl Usage: .Fx [Version/release] ... \*(Pu
-.Bl -tag -width ".Fx 2.2 ) ," -compact -offset 14n
-.It Li ".Fx"
-.Fx
-.It Li ".Fx 2.2 ."
-.Fx 2.2 .
-.El
-.Pp
-The
-.Ql \&.Fx
-macro is parsed and is callable.
-.Ss UNIX Macro
-.Dl Usage: .Ux ... \*(Pu
-.Bl -tag -width ".Ux 4.3 ) ," -compact -offset 14n
-.It Li ".Ux"
-.Ux
-.El
-.Pp
-The
-.Ql \&.Ux
-macro is parsed and is callable.
-.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 argument ... \*(Pu
-.Bl -tag -width ".Em vide infra ) ) ," -compact -offset 14n
-.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 emphasis can be forced across several lines of text by using
-.\" the
-.\" .Ql \&.Bf
-.\" macro discussed in
-.\" .Sx Modes
-.\" under
-.\" .Sx PAGE STRUCTURE DOMAIN .
-.\" .Pp
-.\" .Bf -emphasis
-.\" We are certain the reason most people desire a Harvard MBA
-.\" so they can become to be successful philanthropists. Only
-.\" mathematicians and physicists go to graduate school strictly
-.\" to acquire infinite wealthy and fame. Its that inifinity
-.\" word that does it to them. Ruins them.
-.\" .Ef
-.Pp
-The
-.Ql \&.Em
-macro is parsed and is callable.
-It is an error to call
-.Ql \&.Em
-without arguments.
-.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.
-These can be used across one or more lines of text
-and while they have nesting limitations, the one line quote macros
-can be used inside
-of them.
-.Pp
-.ne 5
-.Bd -filled -offset indent
-.Bl -column "quote " "close " "open " "Enclose Stringx(in XX) " XXstringXX
-.Em " Quote Close Open Function Result"
-\&.Aq .Ac .Ao Angle Bracket Enclosure <string>
-\&.Bq .Bc .Bo Bracket Enclosure [string]
-\&.Dq .Dc .Do Double Quote ``string''
- .Ec .Eo Enclose String (in XX) XXstringXX
-\&.Pq .Pc .Po Parenthesis Enclosure (string)
-\&.Ql Quoted Literal `st' or string
-\&.Qq .Qc .Qo Straight Double Quote "string"
-\&.Sq .Sc .So Single Quote `string'
-.El
-.Ed
-.Pp
-Except for the irregular macros noted below, all
-of the quoting macros are parsed and callable.
-All handle punctuation properly, as long as it
-is presented one character at a time and separated by spaces.
-The quoting macros examine opening and closing punctuation
-to determine whether it comes before or after the
-enclosing string. This makes some nesting possible.
-.Bl -tag -width xxx,xxxx
-.It Li \&.Ec , \&.Eo
-These macros expect the first argument to be the
-opening and closing strings respectively.
-.It Li \&.Ql
-The quoted literal macro behaves differently for
-.Xr troff
-than
-.Xr nroff .
-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.
-.It Li \&.Pf
-The prefix macro is not callable, but it is parsed:
-.Bl -tag -width "(namexx" -offset indent
-.It Li ".Pf ( Fa name2"
-becomes
-.Pf ( Fa name2 .
-.El
-.It Li \&.Ns
-The
-.Ql \&.Ns
-(no space) macro, which
-.Em is
-callable,
-performs the analogous suffix function.
-.It Li ".Ap
-The \&.Ap macro inserts an apostrophe and exits any special text modes,
-continuing in
-.Li \&.No
-mode.
-.El
-.Pp
-.ne 4
-Examples of quoting:
-.Bl -tag -width ".Aq Pa ctype.h ) ,xxxxxxxx" -compact -offset indent
-.It Li \&.Aq
-.Aq
-.It Li \&.Aq \&Ar ctype.h\ )\ ,
-.Aq Ar 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
-were also built from the same underlying routines and are a good
-example of
-.Nm \-mdoc
-macro usage at its worst.
-.Ss No\-Op or Normal Text Macro
-The macro
-.Li \&.No
-is
-a hack for words in a macro command line which should
-.Em not
-be formatted and follows the conventional syntax
-for content macros.
-.Ss No Space Macro
-The
-.Ql \&.Ns
-macro eliminates unwanted spaces in between macro requests.
-It is useful for old style argument lists where there is no space
-between the flag and argument:
-.Bl -tag -width ".Op Fl I Ns Ar directoryxx" -offset indent
-.It Li ".Op Fl I Ns Ar directory"
-produces
-.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.
-The macro
-.Ql \&.Ns
-is parsed and is callable.
-.Ss Section Cross References
-The
-.Ql \&.Sx
-macro designates a reference to a section header
-within the same document.
-It is parsed and is callable.
-.Pp
-.Bl -tag -width "Li \&.Sx FILES" -offset 14n
-.It Li \&.Sx FILES
-.Sx FILES
-.El
-.Ss Symbolic
-The symbolic emphasis macro is generally a boldface macro in
-either the symbolic sense or the traditional English usage.
-.Pp
-.Dl Usage: .Sy symbol ... \*(Pu
-.Bl -tag -width ".Sy Important Noticex" -compact -offset 14n
-.It Li \&.Sy Important Notice
-.Sy Important Notice
-.El
-.Pp
-The
-.Ql \&.Sy
-macro is parsed and is callable.
-Arguments to
-.Ql \&.Sy
-may be quoted.
-.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
-refer style references.
-.Pp
-.Bl -tag -width 6n -offset indent -compact
-.It Li ".Rs"
-Reference Start.
-Causes a line break and begins collection
-of reference information until the
-reference end macro is read.
-.It Li ".Re"
-Reference End.
-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 ".%J"
-Journal name.
-.It Li ".%N"
-Issue number.
-.It Li ".%O"
-Optional information.
-.It Li ".%P"
-Page number.
-.It Li ".%R"
-Report name.
-.It Li ".%T"
-Title of article.
-.It Li ".%V"
-Volume(s).
-.El
-.Pp
-The macros beginning with
-.Ql %
-are not callable, and are parsed only for the trade name macro which
-returns to its caller.
-(And not very predictably at the moment either.)
-The purpose is to allow trade names
-to be pretty printed in
-.Xr troff Ns / Ns Xr ditroff
-output.
-.Ss Trade Names (or Acronyms and Type Names)
-The trade name macro is generally a small caps macro for
-all upper case words longer than two characters.
-.Pp
-.Dl Usage: .Tn symbol ... \*(Pu
-.Bl -tag -width ".Tn ASCII" -compact -offset 14n
-.It Li \&.Tn DEC
-.Tn DEC
-.It Li \&.Tn ASCII
-.Tn ASCII
-.El
-.Pp
-The
-.Ql \&.Tn
-macro
-is parsed and is callable by other macros.
-.Ss Extended Arguments
-The
-.Li \&.Xo
-and
-.Li \&.Xc
-macros allow one to extend an argument list
-on a macro boundary.
-Argument lists cannot
-be extended within a macro
-which expects all of its arguments on one line such
-as
-.Ql \&.Op .
-.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 -width flag -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 -width flag -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 using enclosure macros:
-Test the value of an variable.
-.Bd -literal -offset indent
-\&.It Xo
-\&.Ic .ifndef
-\&.Oo \e&! Oc Ns Ar variable
-\&.Op Ar operator variable ...
-\&.Xc
-.Ed
-.Pp
-Produces
-.Bd -filled -offset indent
-.Bl -tag -width flag -compact
-.It Xo
-.Ic .ifndef
-.Oo \&! Oc Ns Ar variable
-.Op Ar operator variable ...
-.Xc
-.El
-.Ed
-.Pp
-All of the above examples have used the
-.Ql \&.Xo
-macro on the argument list of the
-.Ql \&.It
-(list-item)
-macro.
-The extend macros are not used very often, and when they are
-it is usually to extend the list-item argument list.
-Unfortunately, this is also where the extend macros are the
-most finicky.
-In the first two examples, spacing was turned off;
-in the third, spacing was desired in part of the output but
-not all of it.
-To make these macros work in this situation make sure
-the
-.Ql \&.Xo
-and
-.Ql \&.Xc
-macros are placed as shown in the third example.
-If the
-.Ql \&.Xo
-macro is not alone on the
-.Ql \&.It
-argument list, spacing will be unpredictable.
-The
-.Ql \&.Ns
-(no space macro)
-must not occur as the first or last macro on a line
-in this situation.
-Out of 900 manual pages (about 1500 actual pages)
-currently released with
-.Bx
-only fifteen use the
-.Ql \&.Xo
-macro.
-.Sh PAGE STRUCTURE DOMAIN
-.Ss Section Headers
-The first three
-.Ql \&.Sh
-section header macros
-list below 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 can take up to nine arguments.
-It is parsed and but is not callable.
-.Bl -tag -width ".Sh SYNOPSIS"
-.It \&.Sh NAME
-The
-.Ql \&.Sh NAME
-macro is mandatory.
-If not specified,
-the headers, footers and page layout defaults
-will not be set and things will be rather unpleasant.
-The
-.Sx 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.
-.It \&.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" ,
-.Ql ".Fn" ,
-(and possibly
-.Ql ".Fo" ,
-.Ql ".Fc" ,
-.Ql ".Fd" ,
-.Ql ".Ft"
-macros).
-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, 8.
-Section 4 manuals require a
-.Ql ".Nm" , ".Fd"
-or a
-.Ql ".Cd"
-configuration device usage macro.
-Several other macros may be necessary to produce
-the synopsis line as shown below:
-.Pp
-.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
-.Pp
-.Sy Note :
-The macros
-.Ql \&.Op ,
-.Ql \&.Fl ,
-and
-.Ql \&.Ar
-recognize the pipe bar character
-.Ql \*(Ba ,
-so a command line such as:
-.Pp
-.Dl ".Op Fl a | Fl b"
-.Pp
-will not go orbital.
-.Xr Troff
-normally interprets a \*(Ba as a special operator.
-See
-.Sx PREDEFINED STRINGS
-for a usable \*(Ba
-character in other situations.
-.It \&.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).
-.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 SYNOPSIS
-.It \&.Sh ENVIRONMENT
-The
-.Sx ENVIRONMENT
-section should reveal any related
-environment
-variables and clues to their behavior and/or usage.
-.It \&.Sh EXAMPLES
-There are several ways to create examples.
-See
-the
-.Sx EXAMPLES
-section below
-for details.
-.It \&.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 \&.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.
-At this time
-.Xr refer 1
-style references are not accommodated.
-.Pp
-It is recommended that the cross references are sorted on the section
-number, and then alphabetically on the names within a section.
-.It \&.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
-.Sx HISTORY
-section.
-.It \&.Sh HISTORY
-Any command which does not adhere to any specific standards
-should be outlined historically in this section.
-.It \&.Sh AUTHORS
-Credits, if need be, should be placed here.
-.It \&.Sh DIAGNOSTICS
-Diagnostics from a command should be placed in this section.
-.It \&.Sh ERRORS
-Specific error handling, especially from library functions
-(man page sections 2 and 3) should go here.
-The
-.Ql \&.Er
-macro is used to specify an errno.
-.It \&.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 14n
-\&.Sh PAGE LAYOUT MACROS
-.Ed
-.Ss Paragraphs and Line Spacing.
-.Bl -tag -width 6n
-.It \&.Pp
-The \&.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
-macro.
-(The
-.Ql \&.Bl
-macro asserts a vertical distance unless the -compact flag is given).
-.El
-.\" 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 \&.Bl
-accepts is
-.Fl words
-and 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.
-(Actually, the option macro used to prevent this from occurring,
-but was dropped when the decision (religious) was made to force
-right justified margins in
-.Xr troff
-as options in general look atrocious when spread across a sparse
-line.
-More work needs to be done with the keep macros, a
-.Fl line
-option needs to be added.)
-.Ss Examples and Displays
-There are six types of displays, a quickie one line indented display
-.Ql \&.D1 ,
-a quickie one line literal display
-.Ql \&.Dl ,
-and block literal, block filled, block unfilled, and block ragged which use
-the
-.Ql \&.Bd
-begin-display
-and
-.Ql \&.Ed
-end-display macros.
-.Pp
-.Bl -tag -width \&.Dlxx
-.It Li \&.D1
-(D-one) Display one line of indented text.
-This macro is parsed, but it is not callable.
-.Pp
-.Dl Fl ldghfstru
-.Pp
-The above was produced by:
-.Li \&.Dl Fl ldghfstru .
-.It Li \&.Dl
-(D-ell)
-Display one line of indented
-.Em literal
-text.
-The
-.Ql \&.Dl
-example macro has been used throughout this
-file.
-It allows
-the indent (display) of one line of text.
-Its default font is set to
-constant width (literal) however
-it is parsed and will recognized other macros.
-It is not callable however.
-.Pp
-.Dl % ls -ldg /usr/local/bin
-.Pp
-The above was produced by
-.Li \&.Dl % ls -ldg /usr/local/bin .
-.It Li \&.Bd
-Begin-display.
-The
-.Ql \&.Bd
-display must be ended with the
-.Ql \&.Ed
-macro.
-Displays may be nested within lists, but may
-.Em not
-contain other displays; this also prohibits nesting
-of .D1 and .Dl one-line displays.
-.Ql \&.Bd
-has the following syntax:
-.Pp
-.Dl ".Bd display-type [-offset offset_value] [-compact]"
-.Pp
-The display-type must be one of the following four types and
-may have an offset specifier for indentation:
-.Ql \&.Bd .
-.Pp
-.Bl -tag -width "file file_name " -compact
-.It Fl ragged
-Fill, but do not adjust the right margin.
-.It Fl unfilled
-Do not fill: display a block of text as typed, the
-right (and left) margin edges are left ragged.
-.It Fl filled
-Display a filled (formatted) block.
-The block of text is formatted (the edges are filled \-
-not left unjustified).
-.It Fl literal
-Display a literal block, useful for source code or
-simple tabbed or spaced text.
-.It Fl file Ar file_name
-The file name following the
-.Fl file
-flag is read and displayed.
-Literal mode is
-asserted and tabs are set at 8 constant width character
-intervals, however any
-.Xr troff/ Ns Nm \-mdoc
-commands in file will be processed.
-.It Fl offset Ar string
-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 "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
-Indents by one default indent value or tab.
-The default
-indent value is also used for the
-.Ql \&.D1
-display so one is guaranteed the two types of displays
-will line up.
-This indent is normally set to 6n or about two
-thirds of an inch (six constant width characters).
-.It Ar indent-two
-Indents 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 by
-.Xr troff .
-.El
-.El
-.It ".Ed"
-End-display.
-.El
-.Ss Tagged 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 other than
-.Li \-enum
-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
-.Pq Fl tag .
-For a change of pace, the list-type used to present the list-types
-is an over-hanging list
-.Pq Fl ohang .
-This type of list is quite popular with
-.Tn TeX
-users, but might look a bit funny after having read many pages of
-tagged lists.
-The following list types are accepted by
-.Ql ".Bl" :
-.Pp
-.Bl -ohang -compact
-.It Fl bullet
-.It Fl dash
-.It Fl enum
-.It Fl hyphen
-.It Fl item
-These five are the simplest types of lists.
-Once the
-.Ql ".Bl"
-macro has been given, items in the list are merely
-indicated by a line consisting solely of the
-.Ql ".It"
-macro.
-For example, the source text for a simple enumerated list
-would look like:
-.Bd -literal -offset indent-two
-\&.Bl -enum -compact
-\&.It
-\&Item one goes here.
-\&.It
-\&And item two here.
-\&.It
-\&Lastly item three goes here.
-\&.El
-.Ed
-.Pp
-The results:
-.Pp
-.Bl -enum -offset indent-two -compact
-.It
-Item one goes here.
-.It
-And item two here.
-.It
-Lastly item three goes here.
-.El
-.Pp
-A simple bullet list construction:
-.Bd -literal -offset indent-two
-\&.Bl -bullet -compact
-\&.It
-\&Bullet one goes here.
-\&.It
-\&Bullet two here.
-\&.El
-.Ed
-.Pp
-Produces:
-.Bl -bullet -offset indent-two -compact
-.It
-Bullet one goes here.
-.It
-Bullet two here.
-.El
-.Pp
-.It Fl tag
-.It Fl diag
-.It Fl hang
-.It Fl ohang
-.It Fl inset
-These list-types collect arguments specified with the
-.Ql \&.It
-macro and create a label which may be
-.Em inset
-into the forthcoming text,
-.Em hanged
-from the forthcoming text,
-.Em overhanged
-from above and not indented or
-.Em tagged .
-This
-list was constructed with the
-.Ql Fl ohang
-list-type.
-The
-.Ql \&.It
-macro is parsed only for the inset, hang
-and tag list-types and is not callable.
-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
-Here is a hanged list with just one item:
-.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 in to 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 in to the paragraph unlike
-\&tagged paragraph labels.
-\&.El
-.Ed
-.Pp
-The tagged list which follows uses a width specifier to control
-the width of the tag.
-.Pp
-.Bl -tag -width "PAGEIN" -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 process priority
-(non-positive when in non-interruptible wait)
-.El
-.Pp
-The raw text:
-.Bd -literal -offset indent
-\&.Bl -tag -width "PAGEIN" -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 process priority
-\&(non-positive when in non-interruptible wait)
-\&.El
-.Ed
-.Pp
-Acceptable width specifiers:
-.Bl -tag -width Ar -offset indent
-.It Fl width Ar "\&Fl"
-sets the width to the default width for a flag.
-All callable
-macros have a default width value.
-The
-.Ql \&.Fl ,
-value is presently
-set to ten constant width characters or about five sixth of
-an inch.
-.It Fl width Ar "24n"
-sets the width to 24 constant width characters or about two
-inches.
-The
-.Ql n
-is absolutely necessary for the scaling to work correctly.
-.It Fl width Ar "ENAMETOOLONG"
-sets width to the constant width length of the
-string given.
-.It Fl width Ar "\\*qint mkfifo\\*q"
-again, the width is set to the constant width of the string
-given.
-.El
-.Pp
-If a width is not specified for the tag list type, the first
-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
-as if the macro name had been supplied as the width.
-However,
-if another item in the list is given with a different callable
-macro name, a new and nested list is assumed. This effectively
-means that
-.Fl width
-is required for the tag list type.
-.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.
-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.
-.El
-The table:
-.Bl -column "String" "Nroff" "Troff" -offset indent
-.It Sy "String" Ta Sy "Nroff" Ta Sy "Troff"
-.It Li "<=" Ta \&<\&= Ta \*(<=
-.It Li ">=" Ta \&>\&= Ta \*(>=
-.El
-.Pp
-was produced by:
-.Bd -literal -offset indent
-\&.Bl -column "String" "Nroff" "Troff" -offset indent
-\&.It Sy "String" Ta Sy "Nroff" Ta Sy "Troff"
-\&.It Li "<=" Ta \&<\&= Ta \*(<=
-\&.It Li ">=" Ta \&>\&= Ta \*(>=
-\&.El
-.Ed
-.Sh PREDEFINED STRINGS
-The following strings are predefined as may be used by
-preceding with the troff string interpreting sequence
-.Ql \&\e*(xx
-where
-.Em xx
-is the name of the defined string or as
-.Ql \&\e*x
-where
-.Em x
-is the name of the string.
-The interpreting sequence may be used any where in the text.
-.Pp
-.Bl -column "String " "Nroff " "Troff " -offset indent
-.It Sy "String Nroff Troff"
-.It Li "<=" Ta \&<\&= Ta \*(<=
-.It Li ">=" Ta \&>\&= Ta \*(>=
-.It Li "Rq" Ta "''" Ta \*(Rq
-.It Li "Lq" Ta "``" Ta \*(Lq
-.It Li "ua" Ta ^ Ta \*(ua
-.It Li "aa" Ta ' Ta \*(aa
-.It Li "ga" Ta \` Ta \*(ga
-.\" .It Li "sL" Ta ` Ta \*(sL
-.\" .It Li "sR" Ta ' Ta \*(sR
-.It Li "q" Ta \&" Ta \*q
-.It Li "Pi" Ta pi Ta \*(Pi
-.It Li "Ne" Ta != Ta \*(Ne
-.It Li "Le" Ta <= Ta \*(Le
-.It Li "Ge" Ta >= Ta \*(Ge
-.It Li "Lt" Ta < Ta \*(Gt
-.It Li "Gt" Ta > Ta \*(Lt
-.It Li "Pm" Ta +- Ta \*(Pm
-.It Li "If" Ta infinity Ta \*(If
-.It Li "Na" Ta \fINaN\fP Ta \*(Na
-.It Li "Ba" Ta \fR\&|\fP Ta \*(Ba
-.El
-.Pp
-.Sy Note :
-The string named
-.Ql q
-should be written as
-.Ql \e*q
-since it is only one char.
-.Sh DIAGNOSTICS
-The debugging facilities for
-.Nm \-mdoc
-are limited, but can help detect subtle errors such
-as the collision of an argument name with an internal
-register or macro name.
-(A what?)
-A register is an arithmetic storage class for
-.Xr troff
-with a one or two character name.
-All registers internal to
-.Nm \-mdoc
-for
-.Xr troff
-and
-.Xr ditroff
-are two characters and
-of the form <upper_case><lower_case> such as
-.Ql \&Ar ,
-<lower_case><upper_case> as
-.Ql \&aR
-or
-<upper or lower letter><digit> as
-.Ql \&C\&1 .
-And adding to the muddle,
-.Xr troff
-has its own internal registers all of which are either
-two lower case characters or a dot plus a letter or meta-character
-character.
-In one of the introduction examples, it was shown how to
-prevent the interpretation of a macro name with the escape sequence
-.Ql \e& .
-This is sufficient for the internal register names also.
-.Pp
-.\" Every callable macro name has a corresponding register
-.\" of the same name (<upper_case><lower_case>).
-.\" There are also specific registers which have
-.\" been used for stacks and arrays and are listed in the
-.\" .Sx Appendix .
-.\" .Bd -ragged -offset 4n
-.\" [A-Z][a-z] registers corresponding to macro names (example ``Ar'')
-.\" [a-z][A-Z] registers corresponding to macro names (example ``aR'')
-.\" C[0-9] argument types (example C1)
-.\" O[0-9] offset stack (displays)
-.\" h[0-9] horizontal spacing stack (lists)
-.\" o[0-9] offset (stack) (lists)
-.\" t[0-9] tag stack (lists)
-.\" v[0-9] vertical spacing stack (lists)
-.\" w[0-9] width tag/label stack
-.\" .Ed
-.\" .Pp
-If a non-escaped register name is given in the argument list of a request
-unpredictable behavior will occur.
-In general, any time huge portions
-of text do not appear where expected in the output, or small strings
-such as list tags disappear, chances are there is a misunderstanding
-about an argument type in the argument list.
-Your mother never intended for you to remember this evil stuff - so here
-is a way to find out whether or not your arguments are valid: The
-.Ql \&.Db
-(debug)
-macro displays the interpretation of the argument list for most
-macros.
-Macros such as the
-.Ql \&.Pp
-(paragraph)
-macro do not contain debugging information.
-All of the callable macros do,
-and it is strongly advised whenever in doubt,
-turn on the
-.Ql \&.Db
-macro.
-.Pp
-.Dl Usage: \&.Db [on | off]
-.Pp
-An example of a portion of text with
-the debug macro placed above and below an
-artificially created problem (a flag argument
-.Ql \&aC
-which should be
-.Ql \e&aC
-in order to work):
-.Bd -literal -offset indent
-\&.Db on
-\&.Op Fl aC Ar file )
-\&.Db off
-.Ed
-.Pp
-The resulting output:
-.Bd -literal -offset indent
-DEBUGGING ON
-DEBUG(argv) MACRO: `.Op' Line #: 2
- Argc: 1 Argv: `Fl' Length: 2
- Space: `' Class: Executable
- Argc: 2 Argv: `aC' Length: 2
- Space: `' Class: Executable
- Argc: 3 Argv: `Ar' Length: 2
- Space: `' Class: Executable
- Argc: 4 Argv: `file' Length: 4
- Space: ` ' Class: String
- Argc: 5 Argv: `)' Length: 1
- Space: ` ' Class: Closing Punctuation or suffix
- MACRO REQUEST: .Op Fl aC Ar file )
-DEBUGGING OFF
-.Ed
-.Pp
-The first line of information tells the name of the calling
-macro, here
-.Ql \&.Op ,
-and the line number it appears on.
-If one or more files are involved
-(especially if text from another file is included) the line number
-may be bogus.
-If there is only one file, it should be accurate.
-The second line gives the argument count, the argument
-.Pq Ql \&Fl
-and its length.
-If the length of an argument is two characters, the
-argument is tested to see if it is executable (unfortunately, any
-register which contains a non-zero value appears executable).
-The third line gives the space allotted for a class, and the
-class type.
-The problem here is the argument aC should not be
-executable.
-The four types of classes are string, executable, closing
-punctuation and opening punctuation.
-The last line shows the entire
-argument list as it was read.
-In this next example, the offending
-.Ql \&aC
-is escaped:
-.Bd -literal -offset indent
-\&.Db on
-\&.Em An escaped \e&aC
-\&.Db off
-.Ed
-.Bd -literal -offset indent
-DEBUGGING ON
-DEBUG(fargv) MACRO: `.Em' Line #: 2
- Argc: 1 Argv: `An' Length: 2
- Space: ` ' Class: String
- Argc: 2 Argv: `escaped' Length: 7
- Space: ` ' Class: String
- Argc: 3 Argv: `aC' Length: 2
- Space: ` ' Class: String
- MACRO REQUEST: .Em An escaped &aC
-DEBUGGING OFF
-.Ed
-.Pp
-The argument
-.Ql \e&aC
-shows up with the same length of 2 as the
-.Ql \e&
-sequence produces a zero width, but a register
-named
-.Ql \e&aC
-was not found and the type classified as string.
-.Pp
-Other diagnostics consist of usage statements and are self explanatory.
-.Sh GROFF, TROFF AND NROFF
-The
-.Nm \-mdoc
-package does not need compatibility mode with
-.Xr groff .
-.Pp
-The package inhibits page breaks, and the headers and footers
-which normally occur at those breaks with
-.Xr nroff ,
-to make the manual more efficient for viewing on-line.
-At the moment,
-.Xr groff
-with
-.Fl T Ns Ar ascii
-does eject the imaginary remainder of the page at end of file.
-The inhibiting of the page breaks makes
-.Xr nroff Ns 'd
-files unsuitable for hardcopy.
-There is a register named
-.Ql \&cR
-which can be set to zero in the site dependent style file
-.Pa /usr/src/share/tmac/doc-nroff
-to restore the old style behavior.
-.Sh FILES
-.Bl -tag -width /usr/share/misc/mdoc.template -compact
-.It Pa /usr/share/tmac/tmac.doc
-manual macro package
-.It Pa /usr/share/misc/mdoc.template
-template for writing a man page
-.El
-.Sh SEE ALSO
-.Xr mdoc 7 ,
-.Xr man 1 ,
-.Xr troff 1
-.Sh BUGS
-Undesirable hyphenation on the dash of a flag
-argument is not yet resolved, and causes
-occasional mishaps in the
-.Sx DESCRIPTION
-section.
-(line break on the hyphen).
-.Pp
-Predefined strings are not declared in documentation.
-.Pp
-Section 3f has not been added to the header routines.
-.Pp
-.Ql \&.Nm
-font should be changed in
-.Sx 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 method used to prevent header and footer page
-breaks (other than the initial header and footer) when using
-nroff occasionally places an unsightly partially filled line (blank)
-at the would be bottom of the page.
-.Pp
-If the outer-most list definition doesn't have a
-.Fl width
-argument, the
-.Ql ".It"
-elements of inner lists may not work (producing a list where
-each successive element
-.Sq walks
-to the right).
-.Pp
-The list and display macros to 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.
diff --git a/contrib/groff/tmac/groff_msafer.man b/contrib/groff/tmac/groff_msafer.man
deleted file mode 100644
index 0e0de77..0000000
--- a/contrib/groff/tmac/groff_msafer.man
+++ /dev/null
@@ -1,59 +0,0 @@
-.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 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 GROFF_MSAFER @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_msafer \- groff -msafer macros
-.SH SYNOPSIS
-.B groff
-.B \-msafer
-[
-.IR options .\|.\|.
-]
-[
-.IR files .\|.\|.
-]
-.SH DESCRIPTION
-The -msafer macros remove the
-.BR open ,
-.BR opena ,
-.BR pso ,
-.BR sy ,
-and
-.B pi
-requests.
-These macros should be used when processing input from
-an untrustworthy source.
-For maximum safety,
-they should be the first -m option on the command-line.
-Normally they are invoked using the
-.B \-S
-option of groff, which will also pass
-.B @g@pic
-the
-.B \-S
-flag.
-This is now the default; to get the old behaviour, use the
-.B \-U
-flag.
-.SH FILES
-.B @MACRODIR@/tmac.safer
-.SH "SEE ALSO"
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@)
diff --git a/contrib/groff/tmac/mm.diff b/contrib/groff/tmac/mm.diff
deleted file mode 100644
index d6694aa..0000000
--- a/contrib/groff/tmac/mm.diff
+++ /dev/null
@@ -1,70 +0,0 @@
-*** tmac.m- Thu Aug 2 14:49:57 1990
---- tmac.m Thu Aug 2 14:55:40 1990
-***************
-*** 744,749 ****
- .fi
- .di >A
-! \!.cs 3 48
-! .if !0\\$1-\\n(:d .if !\\n(:f \\*(}y\\$4\\\\f3\\a\\\\fP\\*(}3
- .if !0\\$1-\\n(:d .if \\n(:f \\*(}y\\$4\\t\\*(}3
- .if 0\\$1-\\n(:d \\*(}y\\$4\\*(}3
---- 744,749 ----
- .fi
- .di >A
-! .cs 3 48
-! .if !0\\$1-\\n(:d .if !\\n(:f \\*(}y\\$4\?\f3\?\\a\?\fP\?\\*(}3
- .if !0\\$1-\\n(:d .if \\n(:f \\*(}y\\$4\\t\\*(}3
- .if 0\\$1-\\n(:d \\*(}y\\$4\\*(}3
-***************
-*** 750,754 ****
- .br
- \!.br
-! \!.cs 3
- .di
- .br
---- 750,754 ----
- .br
- \!.br
-! .cs 3
- .di
- .br
-***************
-*** 1397,1406 ****
- .tr ,+
- .tr |.
-- .ie \\nE \{\
-- |ds\ >8\ \f3\\\\$1+\\\\$2+\\\\$3+\\\\$4+\\\\$5+\\\\$6+\\\\$7+\\\\$8+\\\\$9\fP
-- 'br \}
-- .el \{\
- |ds\ >8\ \\\\$1+\\\\$2+\\\\$3+\\\\$4+\\\\$5+\\\\$6+\\\\$7+\\\\$8+\\\\$9
-- 'br \}
- .br
- \!.br
---- 1397,1401 ----
-***************
-*** 1407,1410 ****
---- 1402,1406 ----
- .tr ,,++||
- .di
-+ .asciify >A
- \\..
- .>7 \\*(>1
-***************
-*** 1424,1429 ****
---- 1420,1427 ----
- .tr ||++
- .di
-+ .asciify >7
- .de >A
- .de >T
-+ .if \\nE .ft 3
- .if \\\\n(.$ \\\\$1
- .if \\\\n(.$-1 \\\\$2
-***************
-*** 1435,1438 ****
---- 1433,1437 ----
- .if \\\\n(.$-7 \\\\$8
- .if \\\\n(.$-8 \\\\$9
-+ .if \\nE .ft
- \\\\..
- \\..
diff --git a/contrib/groff/tmac/tmac.X b/contrib/groff/tmac/tmac.X
deleted file mode 100644
index 4219b4a..0000000
--- a/contrib/groff/tmac/tmac.X
+++ /dev/null
@@ -1,46 +0,0 @@
-.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 ~ \v'-.55m'\\s[\\n(.s/2u]\v'.2m'\(ti\v'-.2m'\s0\v'.55m'
-.char ^ \v'-.55m'\\s[\\n(.s/2u]\v'.3m'\(ha\v'-.3m'\s0\v'.55m'
-.if !c\(va .char \(va \o'\(ua\(da'
-.if !c\(em .char \(em --
-.if !c\(en .char \(en \-
-.if !c\(fi .char \(fi fi
-.if !c\(fl .char \(fl fl
-.if !c\(ff .char \(ff ff
-.if !c\(Fi .char \(Fi ffi
-.if !c\(Fl .char \(Fl ffl
-.if !c\(ci .char \(ci \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.if !c\(sq .char \(sq \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.if !c\(ga .char \(ga \Z'\v'-.7m'\D'l .22m .18m''\h'.33m'
-.if !c\(dg .char \(dg \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0''\h'.5m'
-.if !c\(dd .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''\h'.5m'
-.if !c\(lq .char \(lq ``
-.if !c\(rq .char \(rq ''
-.if !c\(Bq .char \(Bq ,,
-.if !c\(OE .char \(OE O\h'-.25m'E
-.if !c\(oe .char \(oe o\h'-.14m'e
-.if !c\(ah .char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
-.if !c\(ao .char \(ao \v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'
-.if !c\(ho .char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.if !c\(lh .tr \(lh\(lA
-.if !c\(rh .tr \(rh\(rA
-.if !c\(bq .tr \(bq,
-.if !c\(aq .tr \(aq'
-.if '\*(.T'X100' .char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u'
-.if !\n(_C .mso tmac.pspic
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.Xps b/contrib/groff/tmac/tmac.Xps
deleted file mode 100644
index 92471ab..0000000
--- a/contrib/groff/tmac/tmac.Xps
+++ /dev/null
@@ -1,44 +0,0 @@
-.do mso tmac.ps
-.nr _C \n(.C
-.cp 0
-.de Xps-char
-.char \\$1 \Z"\X'ps: invis'\\$2\X'ps: endinvis'"\\$1
-..
-.Xps-char \(bu \fS\(bu\fP
-.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 \fS\(Fn\fP
-.Xps-char \(vS \o'\(ahS'
-.Xps-char \(vs \o'\(ahs'
-.Xps-char \(vZ \o'\(ahZ'
-.Xps-char \(vz \o'\(ahz'
-.Xps-char \(/L \o'/L'
-.Xps-char \(/l \o'/l'
-.Xps-char \(:Y \o'\(adY'
-.Xps-char \(a" \(sd
-.Xps-char \(a. \v'-.6m'.
-.Xps-char \(ga "\Z'\v'-.7m'\D'l .22m .18m''\h'.33m'"
-.Xps-char \(ab \v'-.55m'\s'\\\\n(.s*6u/10u'u\s0
-.Xps-char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
-.Xps-char \(ao "\v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'"
-.Xps-char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.Xps-char \(.i i
-.Xps-char \(fo <
-.Xps-char \(fc >
-.Xps-char \(OK \s'\\\\n(.s*6u/10u'\e\s0/
-.Xps-char \(tm \v'-.3m'\s'\\\\n(.s*6u/10u'TM\s0\v'.3m'
-.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''\h'.5m'"
-.Xps-char \(dg "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0''\h'.5m'"
-.Xps-char \(en \-
-.Xps-char \(%0 %\s'\\\\n(.s*6u/10u'\fI0\fP\s0
-.Xps-char \(lh \(->
-.Xps-char \(rh \(<-
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.a4 b/contrib/groff/tmac/tmac.a4
deleted file mode 100644
index 14a0b4c..0000000
--- a/contrib/groff/tmac/tmac.a4
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" Set up groff for A4 paper.
-.pl 29.7c
-.ll 21c-2i
diff --git a/contrib/groff/tmac/tmac.an b/contrib/groff/tmac/tmac.an
deleted file mode 100644
index 7d1224d..0000000
--- a/contrib/groff/tmac/tmac.an
+++ /dev/null
@@ -1,429 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-.\"
-.\" -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 `.am TH'.
-.\"
-.
-.if !\n(.g .ab These man macros work only with groff.
-.
-.nr _C \n(.C
-.cp 0
-.
-.if !rD .nr D 0
-.if !rC .nr C 0
-.if !rS .nr S 10
-.if rP .pn 0\nP
-.
-.de set-an-margin
-. nr an-margin \\n[IN]
-..
-.
-.\" .TH title section extra1 extra2 extra3
-.de TH
-. cp 0
-.
-. 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
-.
-.\" use sizes similar to LaTeX
-. ie (\\nS == 11) \{\
-. nr PS 10.95z
-. nr PS-SS 10.95z
-. nr PS-SH 12z
-. nr VS 13.6p
-. \}
-. el \{\
-. ie (\\nS == 12) \{\
-. nr PS 12z
-. nr PS-SS 12z
-. nr PS-SH 14.4z
-. nr VS 14.5p
-. \}
-. el \{\
-. nr PS 10z \" default point size
-. nr PS-SS 10z
-. nr PS-SH 10.95z
-. nr VS 12p
-. \}
-. \}
-.
-. ps \\n[PS]u
-. vs \\n[VS]u
-.
-. ie '\*(.T'html' .nr IN 1.2i
-. el .nr IN 7.2n
-. nr LL 6.5i
-. PD
-. 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
-.
-. wh 0 an-header
-. wh -1i an-footer
-. wh -.5i an-p-footer
-.
-. if (\\n[nl] > 0) \{\
-. ie \\nC .bp (\\n% + 1)
-. el .bp 1
-. \}
-..
-.
-.de DT
-. ta T .5i \" This sets tabs every .5 inches
-..
-.
-.de PD
-. ie \\n[.$] .nr PD (v;\\$1)
-. el .nr PD (.4v >? \n[.V])
-..
-.
-.de an-header
-. an-init
-. ev 1
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ie '\*(.T'html' \
-. tl ''''
-. el \{\
-. sp .5i
-. tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\\*[an-title](\\*[an-section])'
-. sp |1i
-. \}
-. ev
-. ns
-..
-.
-.de an-footer
-' bp
-..
-.
-.af an-page-letter a
-.
-.de an-p-footer
-. ev 1
-. ps \\n[PS]u
-. vs \\n[VS]u
-. ie '\*(.T'html' \{\
-. ds an-page-string "
-. ds an-extra1 "
-. ds an-extra2 "
-. \}
-. el \
-. ds an-page-string \\n%
-. if rX \{\
-. if (\\n% > \\nX) \{\
-. nr an-page-letter (\\n% - \\nX)
-. ds an-page-string \\nX\\n[an-page-letter]
-. \}
-. \}
-. ie '\*(.T'html' \
-. tl ''''
-. el \{\
-. ie \\nD \{\
-. 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]'
-. \}
-. ev
-..
-.
-.de 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
-. it 1 an-trap
-. nr an-no-space-flag 1
-. nr an-break-flag 1
-. ps \\n[PS-SH]u
-. ft B
-. ne (2v + 1u)
-. if \\n[.$] \&\\$*
-..
-.
-.de 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 B
-. ne (2v + 1u)
-. if \\n[.$] \&\\$*
-..
-.
-.de B
-. it 1 an-trap
-. ft B
-. if \\n[.$] \&\\$*
-..
-.
-.de I
-. it 1 an-trap
-. ft I
-. if \\n[.$] \&\\$*
-..
-.
-.de SM
-. it 1 an-trap
-. ps -1
-. if \\n[.$] \&\\$*
-..
-.
-.de SB
-. it 1 an-trap
-. ps -1
-. ft B
-. if \\n[.$] \&\\$*
-..
-.
-.de TP
-. sp \\n[PD]u
-. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
-. it 1 an-trap
-. if !\\n[an-div?] .di an-div
-. in 0
-. nr an-div? 1
-..
-.
-.de an-trap
-. 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
-. nr an-div? 0
-. br
-. di
-. ie (\\n[dl] + \\n[an-tag-sep] > \\n[an-prevailing-indent]) \{\
-. in \\n[an-margin]u
-. ne (2v + 1u)
-. an-div
-. br
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. \}
-. el \{\
-. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
-. ti -\\n[an-prevailing-indent]u
-. chop an-div
-. ne (1v + 1u)
-\\*[an-div]\\h'|\\n[an-prevailing-indent]u'\c
-. \}
-..
-.
-.de LP
-. br
-. 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
-.
-.de 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
-. \}
-..
-.
-.de 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 ( \\ )
-.
-.de RI
-. if \\n[.$] \{\
-. ds an-result \&\\$1
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \,\fI\\$1\fR\/\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \,\fI\\$1\fR
-\\*[an-result]
-. \}
-..
-.
-.de IR
-. if \\n[.$] \{\
-. ds an-result \&\fI\\$1\fR
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \/\\$1\fI\,\\$2\fR
-. shift 2
-. \}
-. if \\n[.$] .as an-result \/\\$1
-\\*[an-result]
-. \}
-..
-.
-.de IB
-. if \\n[.$] \{\
-. ds an-result \&\fI\\$1
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \/\fB\\$1\fI\,\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \/\fB\\$1
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de BI
-. if \\n[.$] \{\
-. ds an-result \&\fB\\$1
-. shift
-. while (\\n[.$] >= 2) \{\
-. as an-result \,\fI\\$1\fB\/\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \,\fI\\$1
-\\*[an-result]
-. ft R
-. \}
-..
-.
-.de RB
-. ds an-result \&
-. while (\\n[.$] >= 2) \{\
-. as an-result \fR\\$1\fB\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \fR\\$1
-\\*[an-result]
-. ft R
-..
-.
-.de BR
-. ds an-result \&
-. while (\\n[.$] >= 2) \{\
-. as an-result \fB\\$1\fR\\$2\\*[an-empty]
-. shift 2
-. \}
-. if \\n[.$] .as an-result \fB\\$1
-\\*[an-result]
-. ft R
-..
-.
-.de RS
-. br
-. 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
-..
-.
-.de RE
-. br
-. 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
-..
-.
-.ds S \s[\\n[PS]]
-.ie c\[rg] .ds R \[rg]
-.el .ds R (Reg.)
-.ie c\[tm] .ds Tm \[tm]
-.el .ds Tm (TM)
-.ds lq \(lq
-.ds rq \(rq
-.
-.hy 14
-.
-.\" Load local modifications.
-.mso man.local
-.
-.cp \n(_C
-.
-.\" end of tmac.an
diff --git a/contrib/groff/tmac/tmac.arkup b/contrib/groff/tmac/tmac.arkup
deleted file mode 100644
index ea3113d..0000000
--- a/contrib/groff/tmac/tmac.arkup
+++ /dev/null
@@ -1,161 +0,0 @@
-.\"
-.\" A simple set of macros to provide HTML documents with basic
-.\" www functionality. It will work with any macro set.
-.\"
-.de HTML
-. if '\*(.T'html' \{\
-.\" the following line makes the vertical mode leave, so to say
-\&
-\X^html:\\$*^
-. \}
-..
-.de HTMLINDEX
-. if '\*(.T'html' \X^index:\\$*^
-..
-.\"
-.\" BODYCOLOR - $1 is foreground color
-.\" $2 is background color
-.\" $3 is the color of an active hypertext link
-.\" $4 is the color of a hypertext link not yet visited
-.\" $5 is the color of a visited hypertext link
-.\"
-.de BODYCOLOR
-. HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5>
-..
-.\"
-.\" BACKGROUND - $1 is the background image file
-.\"
-.de BACKGROUND
-. HTML <body background=\\$1>
-..
-.\"
-.\" URL - $1 is the classical underlined blue text
-.\" $2 is the url
-.\" $3 is optional stuff printed immediately after $3
-.\"
-.de URL
-. ie '\*(.T'html' \{\
-. HTML <a href="\\$2">\\$1</a>\\$3
-. \}
-. el \{\
-\\$1 \(la\fC\\$2\fP\(ra\\$3
-. \}
-..
-.\"
-.\" FTP - $1 is the classical underlined blue text
-.\" $2 is the ftp url
-.\" $3 is optional stuff printed immediately after $2
-.de FTP
-. ie '\*(.T'html' \{\
-. HTML <a href=\\$2>\\$1</a>\\$3
-. \}
-. el \{\
-\\$1 \(la\fC\\$2\fP\(ra\\$3
-. \}
-..
-.\"
-.\" MAILTO - generate html email reference
-.\" $1 is the email address (without the `mailto:' prefix)
-.\" $2 is the optional name
-.\" $3 is optional stuff printed immediately after $2 (resp. $1)
-.\"
-.\" example:
-.\"
-.\" Foobar has been written by
-.\" .MAILTO fred@foo.bar "Fredrick Bloggs" .
-.\"
-.de MAILTO
-.\"
-.\" force reset after a potential heading by performing some motion..
-.\" how do we do this --fixme--
-.\" \h'\w' ''\h'-\w' '' doesn't work..
-. ie '\*(.T'html' \{\
-. ie '\\$2'' \{\
-. HTML "<a href=mailto:\\$1>\\$1</a>\\$3"
-. \}
-. el \{\
-. HTML "<a href=mailto:\\$1>\\$2</a>\\$3"
-. \}
-. \}
-. el \{\
-. ie '\\$2'' \{\
-\fC\\$1\fP\\$3
-. \}
-. el \{\
-\\$2 \(la\fC\\$1\fP\(ra\\$3
-. \}
-. \}
-..
-.\"
-.\" TAG - generate an html name $1
-.\"
-.de TAG
-. HTML <a name="\\$1"></a>
-..
-.\"
-.\" IMAGE - reference an image
-.\" $1 is the image file
-.\" $2 is the x width (default if absent 400 pixels)
-.\" $3 is the y width (default if absent is the x value)
-.\"
-.de IMAGE
-. ie '\*(.T'html' \{\
-. nr HTMLWIDTH 400
-. if '\\$2'' \{\
-. nr HTMLWIDTH \\$2
-. \}
-. nr HTMLHEIGHT \\n[HTMLWIDTH]
-. if '\\$3'' \{\
-. nr HTMLHEIGHT \\$3
-. \}
-. HTML <img src="\\$1" width=\\n[HTMLWIDTH height=\\n[HTMLHEIGHT]>
-. \}
-. el \{\
-. B1
-\(la\fC\\$1\fP\(ra
-. B2
-. \}
-..
-.\"
-.\" CDFTP - if we are processing this on machine \\$1 then we create a
-.\" FTP reference using \\$2 --> \\$3
-.\"
-.\" otherwise we create a URL from \\$2 --> \\$4
-.\"
-.\" example:
-.\"
-.\" .CDFTP "foobar" "somegnusoftware.tar.gz" \
-.\" "ftp://ftp.gnu.org/gnu/somegnusoftware.tar.gz" \
-.\" "../../../TARGZ/somegnusoftware.tar.gz"
-.\"
-.\" meaning if we are on machine foobar then generate an ftp url
-.\" to the GNU anonymous ftp server otherwise generate a file url
-.\" to a local copy (cdrom maybe)
-.\"
-.\" Useful when one machine is designated as a cdrom burner and another
-.\" designated as an appache server.
-.\" The same source for web pages can be burnt onto a CD and also
-.\" served across the network. It doesn't solve the problem of one
-.\" machine doing both though :-(
-.\"
-.\"
-.\".de CDFTP
-.\". sy /bin/rm -f /tmp/tmac.n
-.\". sy /bin/echo ".ds HOSTNAME `hostname --short`" > /tmp/tmac.n
-.\". so /tmp/tmac.n
-.\". sy /bin/rm -f /tmp/tmac.n
-.\". ie '\\*[HOSTNAME]'\\$1' \{\
-.\". FTP "\\$2" "\\$3"
-.\". \}
-.\". el \{\
-.\". URL "\\$2" "\\$4"
-.\". \}
-.\"..
-.de LINE
-. HTML <hr>
-..
-.\"
-.\" it doesn't make sense to use hyphenation with html, so we turn it off.
-.\"
-.hy 0
-.nr HY 0
diff --git a/contrib/groff/tmac/tmac.dvi b/contrib/groff/tmac/tmac.dvi
deleted file mode 100644
index 634f49f..0000000
--- a/contrib/groff/tmac/tmac.dvi
+++ /dev/null
@@ -1,145 +0,0 @@
-.nr _C \n(.C
-.cp 0
-.ftr CR CW
-.ftr C CW
-.ftr CO CWI
-.ftr CI CWI
-.ftr TT CW
-.ftr HR H
-.\" This uses the dvi-char_1 string in font CW, dvi-char_0 otherwise.
-.char _ \R'dvi-char_ \\n(.f=\f(CW\\n(.f\fP'\\*[dvi-char_\\n[dvi-char_]]
-.char \[ul] \R'dvi-char_ \w'M'=\w'i''\\*[dvi-char_\\n[dvi-char_]]
-.\" Normally use a rule.
-.\" This is designed so that \(ul, \(rn and \(br form corners.
-.ds dvi-char_0 \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.\" In font CW use a real _ character.
-.ds dvi-char_1 _
-.if !c\[radicalex] .char \[radicalex] \D'R .5m -.04m'\v'.04m'
-.if !c\[br] .char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.if !c\[ru] .char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.if !c\[rn] .char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.if !c\[co] .char \[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'
-.if !c\[rg] .char \[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'
-.if !c\[fm] .char \[fm] \v'-.35m'\s[\\n(.s*7u/10u]\[prime]\s0\v'.35m'
-.if !c\[de] .char \[de] \h'.05m'\v'-.54m'\D'c .3m'\v'.54m'\h'.05m'
-.if !c\[ct] .char \[ct] \o'c/'
-.if !c\[sq] .char \[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'
-.if !c\[!=] .char \[!=] \[slashnot]\(eq
-.if !c\[tm] .char \[tm] \v'-.3m'\s[\\n(.s/2u]TM\s0\v'.3m'
-.if !c\[aq] .char \[aq] '
-.if !c\[bq] .char \[bq] ,
-.if !c\[Bq] .char \[Bq] ,\h'\w'\(rq'u-(2u*\w"'"u)',
-.if !c\[ho] .char \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.if !c\[-D] .char \[-D] \Z'\v'-.1m'\h'.05m'-'D
-.if !c\[Sd] .char \[Sd] \Z'\v'-.3m'\h'.35m'-'\(pd
-.if !c\[TP] .char \[TP] I\h'-.25m'\v'-.33m'\s[\En[.s]*6u/10u]\v'.33m'D\
-\v'-.33m'\s0\v'.33m'
-.if !c\[Tp] .char \[Tp] \zlp
-.if !c\[nb] .char \[nb] \[slashnot]\(sb
-.cflags 8 \(an
-.if !c\[an] .char \[an] \h'-.167m'\(mi\h'-.167m'
-.\" Define some fractions.
-.de dvi-frac
-.if !c\[\\$1\\$2] .char \[\\$1\\$2] \
-\v'-.25m'\s[\\\\n(.s*7u/10u]\\$1\s0\v'.25m'\h'-.2m'\
-/\h'-.2m'\v'.25m'\s[\\\\n(.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
-.if !c\[S1] .char \[S1] \v'-.2m'\s-31\s+3\v'+.2m'
-.if !c\[S2] .char \[S2] \v'-.2m'\s-32\s+3\v'+.2m'
-.if !c\[S3] .char \[S3] \v'-.2m'\s-33\s+3\v'+.2m'
-.if !c\[Of] .char \[Of] \v'-.2m'\s'\En(.s*6u/10u'\o'_a'\s0\v'.2m'
-.if !c\[Om] .char \[Om] \v'-.2m'\s'\En(.s*6u/10u'\o'_o'\s0\v'.2m'
-.if !c\[Fo] .char \[Fo] <<
-.if !c\[Fc] .char \[Fc] >>
-.if !c\[bb] .char \[bb] |
-.if !c\[Ye] .char \[Ye] \o'-Y'
-.if !c\[Cs] .char \[Cs] \o'\[mu]o'
-.de dvi-achar
-.\" Note that character definitions are always interpreted with
-.\" compatibility mode off.
-.if !c\\$1 \{\
-.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'
-.\}
-.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 \(`E \` E e
-.dvi-achar \('E \' E e
-.dvi-achar \(^E ^ E e
-.dvi-achar \(:E \(ad E e
-.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 \(`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 \(`e \` e e
-.dvi-achar \('e \' e e
-.dvi-achar \(^e ^ e e
-.dvi-achar \(:e \(ad e e
-.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
-.if !c\(,C .char \(,C \o'\(acC'
-.hcode \(,Cc
-.if !c\(,c .char \(,c \o'\(acc'
-.hcode \(,cc
-.cp \n(_C
-.do mso tmac.latin1
diff --git a/contrib/groff/tmac/tmac.html b/contrib/groff/tmac/tmac.html
deleted file mode 100644
index 239ce0e..0000000
--- a/contrib/groff/tmac/tmac.html
+++ /dev/null
@@ -1,60 +0,0 @@
-.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 ~ \v'-.55m'\\s[\\n(.s/2u]\v'.2m'\(ti\v'-.2m'\s0\v'.55m'
-.\" .char ^ \v'-.55m'\\s[\\n(.s/2u]\v'.3m'\(ha\v'-.3m'\s0\v'.55m'
-.if !c\(va .char \(va \o'\(ua\(da'
-.if !c\(em .char \(em --
-.if !c\(en .char \(en \-
-.if !c\(fi .char \(fi fi
-.if !c\(fl .char \(fl fl
-.if !c\(ff .char \(ff ff
-.if !c\(Fi .char \(Fi ffi
-.if !c\(Fl .char \(Fl ffl
-.if !c\(ci .char \(ci \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.if !c\(sq .char \(sq \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.if !c\(ga .char \(ga \Z'\v'-.7m'\D'l .22m .18m''\h'.33m'
-.if !c\(dg .char \(dg \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0''\h'.5m'
-.if !c\(dd .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''\h'.5m'
-.if !c\(lq .char \(lq ``
-.if !c\(rq .char \(rq ''
-.if !c\(Bq .char \(bq ,,
-.if !c\(OE .char \(OE O\h'-.25m'E
-.if !c\(oe .char \(oe o\h'-.14m'e
-.if !c\(ah .char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
-.if !c\(ao .char \(ao \v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'
-.if !c\(ho .char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.if !c\(lh .char \(lh <-
-.if !c\(rh .char \(rh ->
-.if !c\(bq .tr \(bq,
-.if !c\(aq .tr \(aq'
-.if '\*(.T'html' .char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u'
-.if !\n(_C .mso tmac.pspic
-.cp \n(_C
-.\" now 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 '''
-.\" it doesn't make sense to use hyphenation with html, so we turn it off.
-.hy 0
-.nr HY 0
-.\" avoid line breaks after hyphen-like characters.
-.cflags 0 -\(hy\(em\(en\[shc]
diff --git a/contrib/groff/tmac/tmac.latin1 b/contrib/groff/tmac/tmac.latin1
deleted file mode 100644
index b9c7473..0000000
--- a/contrib/groff/tmac/tmac.latin1
+++ /dev/null
@@ -1,101 +0,0 @@
-.nr _C \n(.C
-.cp 0
-.de latin1-tr
-.if c\\$2 .if !c\\$1 .tr \\$1\\$2
-..
-.latin1-tr \[char161] \(r!
-.latin1-tr \[char162] \(ct
-.latin1-tr \[char163] \(Po
-.latin1-tr \[char164] \(Cs
-.latin1-tr \[char165] \(Ye
-.latin1-tr \[char166] \(bb
-.latin1-tr \[char167] \(sc
-.latin1-tr \[char168] \(ad
-.latin1-tr \[char169] \(co
-.latin1-tr \[char170] \(Of
-.latin1-tr \[char171] \(Fo
-.latin1-tr \[char172] \(no
-.latin1-tr \[char173] \[shc]
-.latin1-tr \[char174] \(rg
-.latin1-tr \[char175] \(a-
-.latin1-tr \[char176] \(de
-.latin1-tr \[char177] \(+-
-.latin1-tr \[char178] \(S2
-.latin1-tr \[char179] \(S3
-.latin1-tr \[char180] \(aa
-.latin1-tr \[char181] \(*m
-.latin1-tr \[char182] \(ps
-.latin1-tr \[char183] \(pc
-.latin1-tr \[char184] \(ac
-.latin1-tr \[char185] \(S1
-.latin1-tr \[char186] \(Om
-.latin1-tr \[char187] \(Fc
-.latin1-tr \[char188] \(14
-.latin1-tr \[char189] \(12
-.latin1-tr \[char190] \(34
-.latin1-tr \[char191] \(r?
-.latin1-tr \[char192] \(`A
-.latin1-tr \[char193] \('A
-.latin1-tr \[char194] \(^A
-.latin1-tr \[char195] \(~A
-.latin1-tr \[char196] \(:A
-.latin1-tr \[char197] \(oA
-.latin1-tr \[char198] \(AE
-.latin1-tr \[char199] \(,C
-.latin1-tr \[char200] \(`E
-.latin1-tr \[char201] \('E
-.latin1-tr \[char202] \(^E
-.latin1-tr \[char203] \(:E
-.latin1-tr \[char204] \(`I
-.latin1-tr \[char205] \('I
-.latin1-tr \[char206] \(^I
-.latin1-tr \[char207] \(:I
-.latin1-tr \[char208] \(-D
-.latin1-tr \[char209] \(~N
-.latin1-tr \[char210] \(`O
-.latin1-tr \[char211] \('O
-.latin1-tr \[char212] \(^O
-.latin1-tr \[char213] \(~O
-.latin1-tr \[char214] \(:O
-.latin1-tr \[char215] \(mu
-.latin1-tr \[char216] \(/O
-.latin1-tr \[char217] \(`U
-.latin1-tr \[char218] \('U
-.latin1-tr \[char219] \(^U
-.latin1-tr \[char220] \(:U
-.latin1-tr \[char221] \('Y
-.latin1-tr \[char222] \(TP
-.latin1-tr \[char223] \(ss
-.latin1-tr \[char224] \(`a
-.latin1-tr \[char225] \('a
-.latin1-tr \[char226] \(^a
-.latin1-tr \[char227] \(~a
-.latin1-tr \[char228] \(:a
-.latin1-tr \[char229] \(oa
-.latin1-tr \[char230] \(ae
-.latin1-tr \[char231] \(,c
-.latin1-tr \[char232] \(`e
-.latin1-tr \[char233] \('e
-.latin1-tr \[char234] \(^e
-.latin1-tr \[char235] \(:e
-.latin1-tr \[char236] \(`i
-.latin1-tr \[char237] \('i
-.latin1-tr \[char238] \(^i
-.latin1-tr \[char239] \(:i
-.latin1-tr \[char240] \(Sd
-.latin1-tr \[char241] \(~n
-.latin1-tr \[char242] \(`o
-.latin1-tr \[char243] \('o
-.latin1-tr \[char244] \(^o
-.latin1-tr \[char245] \(~o
-.latin1-tr \[char246] \(:o
-.latin1-tr \[char247] \(di
-.latin1-tr \[char248] \(/o
-.latin1-tr \[char249] \(`u
-.latin1-tr \[char250] \('u
-.latin1-tr \[char251] \(^u
-.latin1-tr \[char252] \(:u
-.latin1-tr \[char253] \('y
-.latin1-tr \[char254] \(Tp
-.latin1-tr \[char255] \(:y
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.lbp b/contrib/groff/tmac/tmac.lbp
deleted file mode 100644
index 3cba12c..0000000
--- a/contrib/groff/tmac/tmac.lbp
+++ /dev/null
@@ -1,13 +0,0 @@
-.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
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.lj4 b/contrib/groff/tmac/tmac.lj4
deleted file mode 100644
index 658b9a7..0000000
--- a/contrib/groff/tmac/tmac.lj4
+++ /dev/null
@@ -1,18 +0,0 @@
-.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
-.\" This is designed so that \(ul, \(rn and \(br form corners.
-.if !c\[br] .char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.if !c\[ru] .char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.if !c\[rn] .char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.if !c\[ul] .char \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.man b/contrib/groff/tmac/tmac.man
deleted file mode 100644
index 70abd5b..0000000
--- a/contrib/groff/tmac/tmac.man
+++ /dev/null
@@ -1 +0,0 @@
-.do mso tmac.@TMAC_AN_PREFIX@an
diff --git a/contrib/groff/tmac/tmac.mandoc b/contrib/groff/tmac/tmac.mandoc
deleted file mode 100644
index 9318ad9..0000000
--- a/contrib/groff/tmac/tmac.mandoc
+++ /dev/null
@@ -1 +0,0 @@
-.do mso tmac.andoc
diff --git a/contrib/groff/tmac/tmac.markup b/contrib/groff/tmac/tmac.markup
deleted file mode 100644
index 3395eca..0000000
--- a/contrib/groff/tmac/tmac.markup
+++ /dev/null
@@ -1 +0,0 @@
-.do mso tmac.arkup
diff --git a/contrib/groff/tmac/tmac.mdoc b/contrib/groff/tmac/tmac.mdoc
deleted file mode 100644
index d814358..0000000
--- a/contrib/groff/tmac/tmac.mdoc
+++ /dev/null
@@ -1 +0,0 @@
-.do mso tmac.doc
diff --git a/contrib/groff/tmac/tmac.me b/contrib/groff/tmac/tmac.me
deleted file mode 100644
index 49738b5..0000000
--- a/contrib/groff/tmac/tmac.me
+++ /dev/null
@@ -1 +0,0 @@
-.do mso tmac.e
diff --git a/contrib/groff/tmac/tmac.ms b/contrib/groff/tmac/tmac.ms
deleted file mode 100644
index 05f6fe4..0000000
--- a/contrib/groff/tmac/tmac.ms
+++ /dev/null
@@ -1 +0,0 @@
-.do mso tmac.@TMAC_S_PREFIX@s
diff --git a/contrib/groff/tmac/tmac.pic b/contrib/groff/tmac/tmac.pic
deleted file mode 100644
index 1177fc0..0000000
--- a/contrib/groff/tmac/tmac.pic
+++ /dev/null
@@ -1,10 +0,0 @@
-.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/tmac.ps b/contrib/groff/tmac/tmac.ps
deleted file mode 100644
index 4d954f4..0000000
--- a/contrib/groff/tmac/tmac.ps
+++ /dev/null
@@ -1,53 +0,0 @@
-.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'
-.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'
-.if !c\[va] .char \[va] \o'\[ua]\[da]'
-.if !c\[ci] \
-.char \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.if !c\[sq] \
-.char \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.if !c\[ru] .char \[ru] \D'l .5m 0'
-.if !c\[ul] .char \[ul] \v'.25m'\D'l .5m 0'\v'-.25m'
-.if !c\[br] .char \[br] \Z'\v'.25m'\D'l 0 -1m''
-.if !c\[rn] .char \[rn] \v'-.75m'\D'l .5m 0'\v'.75m'
-.if !c\[or] .char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.if !c\[Fi] .char \[Fi] ffi
-.if !c\[Fl] .char \[Fl] ffl
-.if !c\[ff] .char \[ff] ff
-.if !c\[ij] .char \[ij] ij
-.if !c\[IJ] .char \[IJ] IJ
-.if !c\[tm] .char \[tm] \s-3\v'-.3m'TM\v'+.3m'\s+3
-.\" pic tests this register to see whether it should use \X'ps:...'
-.nr 0p 1
-.cp \n(_C
-.if !\n(.C .mso tmac.pspic
-.do mso tmac.psold
diff --git a/contrib/groff/tmac/tmac.psatk b/contrib/groff/tmac/tmac.psatk
deleted file mode 100644
index b59d23a..0000000
--- a/contrib/groff/tmac/tmac.psatk
+++ /dev/null
@@ -1,61 +0,0 @@
-.\" Implementation of the ATK PB and PE macros for use with groff and grops.
-.\" Load this after tmac.atk.
-.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/tmac.psfig b/contrib/groff/tmac/tmac.psfig
deleted file mode 100644
index 5f4111c..0000000
--- a/contrib/groff/tmac/tmac.psfig
+++ /dev/null
@@ -1,87 +0,0 @@
-.\" 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/tmac.psnew b/contrib/groff/tmac/tmac.psnew
deleted file mode 100644
index e13bdb8..0000000
--- a/contrib/groff/tmac/tmac.psnew
+++ /dev/null
@@ -1,26 +0,0 @@
-.\" Undo the effect of tmac.psold. This gives access to the additional
-.\" characters that are present in the text fonts of newer PostScript
-.\" printers. It is a bad idea to use this if you are going to
-.\" distribute the resulting PostScript output to others.
-.nr _C \n(.C
-.cp 0
-.rchar \('y\('Y\(12\(14\(34\(S1\(S2\(S3\(bb\(de\(Tp\(TP\(-D\(Sd
-.tr \[char166]\[char166]
-.tr \[char176]\[char176]
-.tr \[char177]\[char177]
-.tr \[char178]\[char178]
-.tr \[char179]\[char179]
-.tr \[char181]\[char181]
-.tr \[char185]\[char185]
-.tr \[char188]\[char188]
-.tr \[char189]\[char189]
-.tr \[char190]\[char190]
-.tr \[char208]\[char208]
-.tr \[char215]\[char215]
-.tr \[char221]\[char221]
-.tr \[char222]\[char222]
-.tr \[char240]\[char240]
-.tr \[char247]\[char247]
-.tr \[char253]\[char253]
-.tr \[char254]\[char254]
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.psold b/contrib/groff/tmac/tmac.psold
deleted file mode 100644
index 04a5f6d..0000000
--- a/contrib/groff/tmac/tmac.psold
+++ /dev/null
@@ -1,60 +0,0 @@
-.\" In the newer PostScript printers, the 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 both
-.\" old and new printers. The effect of this file can be undone by
-.\" tmac.psnew.
-.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]\[*m]
-.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/tmac.pspic b/contrib/groff/tmac/tmac.pspic
deleted file mode 100644
index 55e51b3..0000000
--- a/contrib/groff/tmac/tmac.pspic
+++ /dev/null
@@ -1,50 +0,0 @@
-.\" Define the PSPIC macro.
-.\" When used other than with -Tps, it will draw a box around where
-.\" the picture would go.
-.de PSPIC
-.nr ps-offset-mode 0
-.if '\\$1'-L' \{\
-. nr ps-offset-mode 1
-. shift
-.\}
-.if '\\$1'-R' \{\
-. nr ps-offset-mode 2
-. shift
-.\}
-.if '\\$1'-I' \{\
-. nr ps-offset-mode 3
-. nr ps-offset (m;\\$2)
-. shift 2
-.\}
-.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 0-\\n[ps-wid]
-. if \\n[ps-ht]<0 .nr ps-ht 0-\\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 \\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
-.\}
-..
diff --git a/contrib/groff/tmac/tmac.s b/contrib/groff/tmac/tmac.s
deleted file mode 100644
index 6770b0d..0000000
--- a/contrib/groff/tmac/tmac.s
+++ /dev/null
@@ -1,1869 +0,0 @@
-.\" -*- nroff -*-
-.ig
-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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. You can delete this if you want.
-.warn
-.\" See if already loaded.
-.if r GS .nx
-.nr GS 1
-.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
-.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
-..
-.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
-.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
-..
-.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
-.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
-. 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
-.di cov*ab-div
-.par@ab-indent
-.par@reset
-.if !'\\$1'no' \{\
-. ft I
-. ce 1
-\\*[ABSTRACT]
-. sp
-. ft R
-.\}
-.ns
-.@PP
-..
-.de AE
-.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
-. \}
-. br
-.\}
-..
-.de cov*rp-print
-.nr cov*page-length \\n[.p]
-.pl 1000i
-.cov*tl-au-print
-.sp 3
-.if d cov*ab-div \{\
-. 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
-.\" 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
-.cov*tl-div
-.nr cov*i 1
-.nr cov*sp 1v
-.while \\n[cov*i]<=\\n[cov*n-au] \{\
-. 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
-.\}
-.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
-.nr pg*saved-po \\n[PO]
-.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[pg*saved-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[pg*saved-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)
-. 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)
-. 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
-.ps \\n[PS]
-.\" don't set VS so that it can be defaulted from PS
-.ie rVS .par*vs \\n[VS]
-.el .par*vs \\n[PS]+2
-.if dFAM .fam \\*[FAM]
-.if !rHY .nr HY 14
-.hy \\n[HY]
-.TA
-..
-.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 .nr VS \\n[PS]+2
-.if !rDI .nr DI .5i
-.if !rFPS .nr FPS \\n[PS]-2
-.if !rFVS .nr FVS \\n[FPS]+2
-.\" don't change environment 0
-.ev h
-.ps \\n[PS]
-.if !rQI .nr QI 5n
-.if !rPI .nr PI 5n
-.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
-.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]
-.ps \\n[\\n[.ev]:PS]
-.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
-..
-.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 1v+\\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]
-.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] \\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c
-. el \{\
-\\*[par*label]
-. 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
-.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
-..
-.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
-..
-.de @SH
-.par@finish
-.\" Keep together the heading and the first two lines of the next paragraph.
-.ne 3v+\\n[\\n[.ev]:PD]u+\\n(.Vu
-.sp 1
-.ft B
-..
-.\" 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
-..
-.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
-.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
-.nr nh*i 0
-.while \\n[nh*i]<\\n[nh*hl] \{\
-. nr nh*i +1
-. as SN \\n[H\\n[nh*i]].
-.\}
-.SH
-\\*[SN]
-..
-.\" ****************************
-.\" ******** 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 XS without XE
-..
-.de toc*end-entry
-\\a\\t\\*[toc*num]
-.br
-.rm toc*num
-..
-.de PX
-.1C
-.if !'\\$1'no' \{\
-. ce 1
-. 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
-.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
-. if \\n[dl]:\\n[eqn*have-num] \{\
-. sp \\n[DD]u
-. par@reset
-. ds eqn*tabs \\n[.tabs]
-. nf
-. ie \\n[dl] \{\
-. 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]
-. \}
-. sp \\n[DD]u
-. ta \\*[eqn*tabs]
-. \}
-. fi
-.\}
-..
-.\" ****************************
-.\" ******** 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
-..
-.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
-. sp \\n[DD]u
-.\}
-.\" 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)
-.\}
-..
-.de PE
-.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-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 !
-..
-.par@load-init
-.\" Make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/tmac.safer b/contrib/groff/tmac/tmac.safer
deleted file mode 100644
index caabb5b..0000000
--- a/contrib/groff/tmac/tmac.safer
+++ /dev/null
@@ -1,13 +0,0 @@
-.\" remove unsafe requests
-.nr _C \n(.C
-.cp 0
-.rm open opena pso sy pi
-.de unsafe
-.tm \\n(.F:\\n(.c: unsafe to execute request `\\$1'
-..
-.als open unsafe
-.als opena unsafe
-.als pso unsafe
-.als sy unsafe
-.als pi unsafe
-.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.trace b/contrib/groff/tmac/tmac.trace
deleted file mode 100644
index 2691c46..0000000
--- a/contrib/groff/tmac/tmac.trace
+++ /dev/null
@@ -1,10 +0,0 @@
-.\" Load this before a macro package that you want to trace.
-.rn de !!de
-.!!de de
-.!!de \\$1
-.tm *** trace enter \\$1: \\\\$0 \\\\$@
-\\\\*[!!\\$1]\\\\
-.tm *** trace exit \\$1: \\\\$0 \\\\$@
-\\..
-.!!de !!\\$1 \\$2
-..
diff --git a/contrib/groff/troff/Makefile.sub b/contrib/groff/troff/Makefile.sub
deleted file mode 100644
index 342ad59..0000000
--- a/contrib/groff/troff/Makefile.sub
+++ /dev/null
@@ -1,57 +0,0 @@
-PROG=troff
-MAN1=troff.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
- env.o \
- node.o \
- input.o \
- div.o \
- symbol.o \
- dictionary.o \
- reg.o \
- number.o \
- majorminor.o
-CCSRCS=\
- $(srcdir)/env.cc \
- $(srcdir)/node.cc \
- $(srcdir)/input.cc \
- $(srcdir)/div.cc \
- $(srcdir)/symbol.cc \
- $(srcdir)/dictionary.cc \
- $(srcdir)/reg.cc \
- $(srcdir)/number.cc \
- majorminor.cc
-HDRS=\
- $(srcdir)/charinfo.h \
- $(srcdir)/dictionary.h \
- $(srcdir)/div.h \
- $(srcdir)/env.h \
- $(srcdir)/hvunits.h \
- $(srcdir)/node.h \
- $(srcdir)/reg.h \
- $(srcdir)/request.h \
- $(srcdir)/symbol.h \
- $(srcdir)/token.h \
- $(srcdir)/troff.h
-GENSRCS=majorminor.cc
-NAMEPREFIX=$(g)
-
-majorminor.cc: $(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`\"\; >>$@
-
-install_data: hyphen.us
- -test -d $(datadir) || $(mkinstalldirs) $(datadir)
- -test -d $(datasubdir) || $(mkinstalldirs) $(datasubdir)
- -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
- -rm -f $(tmacdir)/hyphen.us
- $(INSTALL_DATA) $(srcdir)/hyphen.us $(tmacdir)/hyphen.us
-
-uninstall_sub:
- -rm -f $(tmacdir)/hyphen.us
diff --git a/contrib/groff/troff/TODO b/contrib/groff/troff/TODO
deleted file mode 100644
index 3e6480b..0000000
--- a/contrib/groff/troff/TODO
+++ /dev/null
@@ -1,137 +0,0 @@
-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. \B'...'...'...' 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.
-
-Variant of tm which doesn't write a newline.
-
-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).
-
-Variant of `.it' for which a line interrupted with \c counts as one
-input line.
-
-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.
-
-Have a blank line macro like the end macro. When a blank line macro
-has been set, then a blank line causes the blank line macro to be
-called rather than doing the equivalent of .sp.
-
-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.
-
-Make it possible to tr characters onto \~.
-
-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.
-
-Request to return from a macro (ie ignore the rest of the current
-input level).
diff --git a/contrib/groff/troff/charinfo.h b/contrib/groff/troff/charinfo.h
deleted file mode 100644
index a4ecd57..0000000
--- a/contrib/groff/troff/charinfo.h
+++ /dev/null
@@ -1,171 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
- char not_found;
- char transparent_translate; // non-zero means translation applies to
- // to transparent throughput
-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();
- void set_hyphenation_code(unsigned char);
- void set_ascii_code(unsigned char);
- charinfo *get_translation(int = 0);
- void set_translation(charinfo *, int);
- void set_flags(unsigned char);
- void set_special_translation(int, int);
- int get_special_translation(int = 0);
- macro *set_macro(macro *);
- macro *get_macro();
- int first_time_not_found();
- void set_number(int);
- int get_number();
- int numbered();
- 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 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 void charinfo::set_flags(unsigned char c)
-{
- flags = c;
-}
-
-inline int charinfo::get_index()
-{
- return index;
-}
-
-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/troff/column.cc b/contrib/groff/troff/column.cc
deleted file mode 100644
index 096f381..0000000
--- a/contrib/groff/troff/column.cc
+++ /dev/null
@@ -1,732 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
-}
-
-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/troff/dictionary.cc b/contrib/groff/troff/dictionary.cc
deleted file mode 100644
index 169536c..0000000
--- a/contrib/groff/troff/dictionary.cc
+++ /dev/null
@@ -1,212 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-#include "troff.h"
-#include "symbol.h"
-#include "dictionary.h"
-
-// is `p' a good size for a hash table
-
-static int is_good_size(int p)
-{
- const int SMALL = 10;
- unsigned 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/troff/dictionary.h b/contrib/groff/troff/dictionary.h
deleted file mode 100644
index 4f319be..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/troff/div.cc b/contrib/groff/troff/div.cc
deleted file mode 100644
index 013ea66..0000000
--- a/contrib/groff/troff/div.cc
+++ /dev/null
@@ -1,1127 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-// diversions
-
-#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"
-
-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), 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)
-{
- tok.skip();
- symbol nm = get_name();
- if (nm.is_null()) {
- if (curdiv->prev) {
- 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;
- }
- skip_line();
-}
-
-void divert()
-{
- do_divert(0);
-}
-
-void divert_append()
-{
- do_divert(1);
-}
-
-void diversion::need(vunits n)
-{
- vunits d = distance_to_next_trap();
- if (d < n) {
- space(d, 1);
- truncated_space = -d;
- needed_space = n;
- }
-}
-
-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;
- 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)
-{
- 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), no_space_mode(0)
-{
-}
-
-// 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);
- 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 transparent() 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) {
- if (begin_page()) {
- // This happens if there's a top of page trap, and the first-page
- // transition is caused by `'sp'.
- truncated_space = n > V0 ? n : V0;
- return;
- }
- }
- vunits next_trap_pos;
- trap *next_trap = find_next_trap(&next_trap_pos);
- vunits y = vertical_position + n;
- 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();
- 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 nm, 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 = nm;
- return;
- }
- }
- if (first_free_slot) {
- first_free_slot->nm = nm;
- first_free_slot->position = pos;
- }
- else
- *p = new trap(nm, pos, 0);
-}
-
-void top_level_diversion::remove_trap(symbol nm)
-{
- for (trap *p = page_trap_list; p; p = p->next)
- if (p->nm == nm) {
- 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 nm, vunits pos)
-{
- for (trap *p = page_trap_list; p; p = p->next)
- if (p->nm == nm) {
- 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;
- }
- exit(exit_code);
-}
-
-// returns non-zero if it sprung a top of page trap
-
-int top_level_diversion::begin_page()
-{
- 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 = V0;
- 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;
- 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;
- 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()
-{
- if (curdiv == topdiv)
- topdiv->no_space_mode = 1;
- skip_line();
-}
-
-void restore_spacing()
-{
- if (curdiv == topdiv)
- topdiv->no_space_mode = 0;
- skip_line();
-}
-
-/* It is necessary to generate a break before 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->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->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;
- 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 (get_vunits(&x, 'v')) {
- 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;
-}
-
-void init_div_requests()
-{
- init_request("wh", when_request);
- init_request("ch", change_trap);
- init_request("pl", page_length);
- init_request("po", page_offset);
- init_request("rs", restore_spacing);
- init_request("ns", no_space);
- init_request("sp", space_request);
- init_request("di", divert);
- init_request("da", divert_append);
- init_request("bp", begin_page);
- init_request("ne", need_space);
- init_request("pn", page_number);
- init_request("dt", diversion_trap);
- init_request("rt", return_request);
- init_request("mk", mark);
- init_request("sv", save_vertical_space);
- init_request("os", output_saved_vertical_space);
- init_request("fl", flush_output);
- init_request("vpt", vertical_position_traps);
- init_request("ptr", print_traps);
- number_reg_dictionary.define(".a",
- new constant_int_reg(&last_post_line_extra_space));
- number_reg_dictionary.define(".z", new diversion_name_reg);
- number_reg_dictionary.define(".o", new page_offset_reg);
- number_reg_dictionary.define(".p", new page_length_reg);
- number_reg_dictionary.define(".d", new vertical_position_reg);
- number_reg_dictionary.define(".h", new high_water_mark_reg);
- number_reg_dictionary.define(".t", new distance_to_next_trap_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(".vpt",
- new constant_int_reg(&vertical_position_traps_flag));
- number_reg_dictionary.define("%", new page_number_reg);
- number_reg_dictionary.define(".pn", new next_page_number_reg);
- number_reg_dictionary.define(".trunc",
- new constant_vunits_reg(&truncated_space));
- number_reg_dictionary.define(".ne",
- new constant_vunits_reg(&needed_space));
- number_reg_dictionary.define(".pe", new page_ejecting_reg);
-}
diff --git a/contrib/groff/troff/div.h b/contrib/groff/troff/div.h
deleted file mode 100644
index e97e0a7..0000000
--- a/contrib/groff/troff/div.h
+++ /dev/null
@@ -1,150 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-class diversion {
- friend void do_divert(int append);
- friend void end_diversions();
- diversion *prev;
-protected:
- symbol nm;
- vunits vertical_position;
- vunits high_water_mark;
-public:
- 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;
-};
-
-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);
-};
-
-struct trap {
- trap *next;
- vunits position;
- symbol nm;
- trap(symbol, vunits, trap *);
-};
-
-struct 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;
- int no_space_mode;
- 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();
- 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; }
-};
-
-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();
-
-extern void cleanup_and_exit(int);
diff --git a/contrib/groff/troff/env.cc b/contrib/groff/troff/env.cc
deleted file mode 100644
index fbea78e..0000000
--- a/contrib/groff/troff/env.cc
+++ /dev/null
@@ -1,3215 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#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 "charinfo.h"
-#include "searchpath.h"
-#include "macropath.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;
-
-charinfo *field_delimiter_char;
-charinfo *padding_indicator_char;
-
-int translate_space_to_dummy = 0;
-
-class pending_output_line {
- node *nd;
- int no_fill;
- 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,
- 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);
-#endif /* WIDOW_CONTROL */
-};
-
-pending_output_line::pending_output_line(node *n, int nf, vunits v, vunits pv,
- hunits w, pending_output_line *p)
-: nd(n), no_fill(nf), 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
- curdiv->output(nd, no_fill, vs, post_vs, width);
- nd = 0;
- return 1;
-}
-
-void environment::output(node *nd, int no_fill, vunits vs, vunits post_vs,
- hunits width)
-{
-#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)
-#endif /* WIDOW_CONTROL */
- )
- curdiv->output(nd, no_fill, 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, vs, post_vs, width);
- }
-}
-
-// a line from .tl goes at the head of the queue
-
-void environment::output_title(node *nd, int no_fill, vunits vs,
- vunits post_vs, hunits width)
-{
- if (!trap_sprung_flag)
- curdiv->output(nd, no_fill, vs, post_vs, width);
- else
- pending_lines = new pending_output_line(nd, no_fill, vs, post_vs, width,
- 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;
- for (pending_output_line *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)
-{
- 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);
- else
- tab_contents = tab_contents->add_discretionary_hyphen();
- }
- else {
- if (line == 0)
- start_line();
- if (ci != hyphen_indicator_char)
- line = line->add_char(ci, this, &width_total);
- else
- line = line->add_discretionary_hyphen();
- }
-}
-
-node *environment::make_char_node(charinfo *ci)
-{
- return make_node(ci, this);
-}
-
-void environment::add_node(node *n)
-{
- assert(n != 0);
- 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;
- }
-}
-
-
-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;
- if (!translate_space_to_dummy) {
- x = env_space_width(this);
- if (node_list_ends_sentence(line) == 1)
- x += env_sentence_space_width(this);
- }
- if (line != 0 && line->merge_space(x)) {
- width_total += x;
- return;
- }
- add_node(new word_space_node(x));
- possibly_break_line(spread_flag);
- spread_flag = 0;
-}
-
-void environment::space()
-{
- if (interrupted)
- return;
- if (current_field && padding_indicator_char == 0) {
- add_padding();
- return;
- }
- hunits x = translate_space_to_dummy ? H0 : env_space_width(this);
- 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 : env_sentence_space_width(this);
- if (p->merge_space(xx)) {
- *tp += xx;
- return;
- }
- }
- if (p && p->merge_space(x)) {
- *tp += x;
- return;
- }
- add_node(new word_space_node(x));
- possibly_break_line(spread_flag);
- spread_flag = 0;
-}
-
-void environment::set_font(symbol nm)
-{
- if (interrupted)
- return;
- if (nm == symbol("P")) {
- 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;
- }
-}
-
-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 (fam.is_null()) {
- 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;
-}
-
-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),
- input_trap_count(0),
- line(0),
- prev_text_length(0),
- width_total(0),
- space_total(0),
- input_line_start(0),
- tabs(units_per_inch/2, TAB_LEFT),
- 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 */
- 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),
- input_trap_count(0),
- line(0),
- prev_text_length(e->prev_text_length),
- width_total(0),
- space_total(0),
- input_line_start(0),
- tabs(e->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 */
- 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;
- input_trap_count = 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;
- 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;
-}
-
-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 {
- curenv = env_stack->env;
- 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();
-}
-
-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(1);
- if (!s.is_null())
- 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 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;
- 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;
- 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;
- 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;
- 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 be greater than 0");
- 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;
- 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;
- }
- tok.next();
-}
-
-void underline()
-{
- 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;
- }
- curenv->underline_lines = 0;
- }
- else {
- curenv->underline_lines = n;
- curenv->pre_underline_fontno = curenv->fontno;
- curenv->fontno = get_underline_fontno();
- }
- skip_line();
-}
-
-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()
-{
- if (underline_lines > 0) {
- if (--underline_lines == 0) {
- prev_fontno = fontno;
- fontno = pre_underline_fontno;
- }
- }
- 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;
- 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) {
- output_line(to_be_output, to_be_output_width);
- hyphen_line_count = 0;
- }
- if (input_trap_count > 0) {
- if (--input_trap_count == 0)
- spring_trap(input_trap);
- }
-}
-
-void environment::output_line(node *n, hunits width)
-{
- 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, 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, 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, nn);
- else {
- hunits x = w;
- nn = new hmotion_node(number_text_separation*line_number_digit_width,
- 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, nn);
- }
- width += w;
- ++next_line_number;
- }
- output(nn, !fill, vertical_spacing, total_post_vertical_spacing(), width);
-}
-
-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;
- 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)
- warning(WARN_BREAK, "can't break line");
- return best_bp;
- }
- return 0;
-}
-
-void environment::hyphenate_line()
-{
- if (line == 0)
- return;
- hyphenation_type prev_type = line->get_hyphenation_type();
- node **startp;
- 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;
- int i = 0;
- do {
- ++i;
- 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;
- while (tem != end) {
- sl = tem->get_hyphen_list(sl);
- 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);
- 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 forced)
-{
- 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();
- 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;
- break;
- case ADJUST_CENTER:
- saved_indent += (target_text_length - bp->width)/2;
- 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);
- 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();
-}
-
-void environment::do_break()
-{
- if (curdiv == topdiv && topdiv->before_first_page) {
- topdiv->begin_page();
- return;
- }
- if (current_tab)
- wrap_up_tab();
- if (line) {
- line = new space_node(H0, line); // this is so that hyphenation works
- space_total++;
- possibly_break_line();
- }
- 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;
- break;
- case ADJUST_RIGHT:
- saved_indent += target_text_length - width_total;
- break;
- }
- }
- node *tem = line;
- line = 0;
- output_line(tem, width_total);
- hyphen_line_count = 0;
- }
- prev_line_interrupted = 0;
-#ifdef WIDOW_CONTROL
- mark_last_line();
- output_pending_lines();
-#endif /* WIDOW_CONTROL */
-}
-
-int environment::is_empty()
-{
- return !current_tab && line == 0 && pending_lines == 0;
-}
-
-void break_request()
-{
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (break_flag)
- curenv->do_break();
- tok.next();
-}
-
-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;
- node *n = 0;
- node *p = part[2];
- while (p != 0) {
- node *tem = p;
- p = p->next;
- tem->next = n;
- n = tem;
- }
- hunits title_length(curenv->title_length);
- hunits f = title_length - part_width[1];
- hunits f2 = f/2;
- n = new hmotion_node(f2 - part_width[2], 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], 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(), title_length);
- 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 input_trap()
-{
- curenv->input_trap_count = 0;
- 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();
-}
-
-/* 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 lastpos = 0;
- tab *tem;
- for (tem = initial_list; tem && tem->pos <= curpos; tem = tem->next)
- lastpos = tem->pos;
- if (tem) {
- *distance = tem->pos - curpos;
- 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;
- 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;
- skip_line();
-}
-
-const char *environment::get_tabs()
-{
- return tabs.to_string();
-}
-
-#if 0
-tab_stops saved_tabs;
-
-void tabs_save()
-{
- saved_tabs = curenv->tabs;
- skip_line();
-}
-
-void tabs_restore()
-{
- curenv->tabs = saved_tabs;
- skip_line();
-}
-#endif
-
-tab_type environment::distance_to_next_tab(hunits *distance)
-{
- return curenv->tabs.distance_to_next_tab(get_input_line_position(), distance);
-}
-
-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 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, next);
- node *n = new hline_node(d, leader_node, next);
- leader_node = 0;
- return n;
-}
-
-void environment::handle_tab(int is_leader)
-{
- hunits d;
- 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);
- switch (t) {
- case TAB_NONE:
- return;
- case TAB_LEFT:
- add_node(make_tab_node(d));
- return;
- case TAB_RIGHT:
- case TAB_CENTER:
- tab_width = 0;
- tab_distance = d;
- tab_contents = 0;
- current_tab = t;
- tab_field_spaces = 0;
- return;
- default:
- assert(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, tab_contents);
- tab_field_spaces++;
- }
- else {
- if (line == 0)
- start_line();
- line = new space_node(H0, 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_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("it", input_trap);
- init_request("ad", adjust);
- init_request("na", no_adjust);
- init_request("ev", environment_switch);
- init_request("evc", environment_copy);
- init_request("lt", title_length);
- init_request("ps", point_size);
- init_request("ft", font_change);
- init_request("fam", family_change);
- init_request("ss", space_size);
- init_request("fi", fill);
- init_request("nf", no_fill);
- init_request("ce", center);
- init_request("rj", right_justify);
- init_request("vs", vertical_spacing);
- init_request("ls", line_spacing);
- init_request("ll", line_length);
- init_request("in", indent);
- init_request("ti", temporary_indent);
- init_request("ul", underline);
- init_request("cu", underline);
- init_request("cc", control_char);
- init_request("c2", no_break_control_char);
- init_request("br", break_request);
- init_request("tl", title);
- init_request("ta", set_tabs);
- init_request("fc", field_characters);
- init_request("mc", margin_character);
- init_request("nn", no_number);
- init_request("nm", number_lines);
- init_request("tc", tab_character);
- init_request("lc", leader_character);
- init_request("hy", hyphenate_request);
- init_request("hc", hyphen_char);
- init_request("nh", no_hyphenate);
- init_request("hlm", hyphen_line_max_request);
-#ifdef WIDOW_CONTROL
- init_request("wdc", widow_control_request);
-#endif /* WIDOW_CONTROL */
-#if 0
- init_request("tas", tabs_save);
- init_request("tar", tabs_restore);
-#endif
- init_request("hys", hyphenation_space_request);
- init_request("hym", hyphenation_margin_request);
- init_request("pvs", post_vertical_spacing);
- init_int_env_reg(".f", get_font);
- init_int_env_reg(".b", get_bold);
- init_hunits_env_reg(".i", get_indent);
- init_hunits_env_reg(".in", get_saved_indent);
- init_int_env_reg(".j", get_adjust_mode);
- init_hunits_env_reg(".k", get_text_length);
- init_hunits_env_reg(".l", get_line_length);
- init_hunits_env_reg(".ll", get_saved_line_length);
- init_int_env_reg(".L", get_line_spacing);
- init_hunits_env_reg(".n", get_prev_text_length);
- init_string_env_reg(".s", get_point_size_string);
- init_string_env_reg(".sr", get_requested_point_size_string);
- init_int_env_reg(".ps", get_point_size);
- init_int_env_reg(".psr", get_requested_point_size);
- init_int_env_reg(".u", get_fill);
- init_vunits_env_reg(".v", get_vertical_spacing);
- init_vunits_env_reg(".pvs", get_post_vertical_spacing);
- init_hunits_env_reg(".w", get_prev_char_width);
- init_int_env_reg(".ss", get_space_size);
- init_int_env_reg(".sss", get_sentence_space_size);
- init_string_env_reg(".fam", get_font_family_string);
- init_string_env_reg(".ev", get_name_string);
- init_int_env_reg(".hy", get_hyphenation_flags);
- init_int_env_reg(".hlm", get_hyphen_line_max);
- init_int_env_reg(".hlc", get_hyphen_line_count);
- init_hunits_env_reg(".lt", get_title_length);
- init_string_env_reg(".tabs", get_tabs);
- init_hunits_env_reg(".csk", get_prev_char_skew);
- init_vunits_env_reg(".cht", get_prev_char_height);
- init_vunits_env_reg(".cdp", get_prev_char_depth);
- init_int_env_reg(".ce", get_center_lines);
- init_int_env_reg(".rj", get_right_justify_lines);
- init_hunits_env_reg(".hys", get_hyphenation_space);
- init_hunits_env_reg(".hym", get_hyphenation_margin);
- number_reg_dictionary.define("ln", new variable_reg(&next_line_number));
- number_reg_dictionary.define("ct", new variable_reg(&ct_reg_contents));
- number_reg_dictionary.define("sb", new variable_reg(&sb_reg_contents));
- number_reg_dictionary.define("st", new variable_reg(&st_reg_contents));
- 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("ssc", new variable_reg(&ssc_reg_contents));
- number_reg_dictionary.define("skw", new variable_reg(&skw_reg_contents));
- number_reg_dictionary.define("hp", new horizontal_place_reg);
-}
-
-// 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);
-public:
- hyphen_trie() {}
- ~hyphen_trie() {}
- void hyphenate(const char *word, int len, int *hyphens);
- void read_patterns_file(const char *name);
-};
-
-
-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 = 1024;
-
-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 {
- int 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::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;
- }
-}
-
-void hyphen_trie::read_patterns_file(const char *name)
-{
- clear();
- char buf[WORD_MAX];
- int num[WORD_MAX+1];
- errno = 0;
- char *path = 0;
- FILE *fp = macro_path.open_file(name, &path);
- if (fp == 0) {
- error("can't find hyphenation patterns file `%1'", name);
- return;
- }
- int c = getc(fp);
- for (;;) {
- for (;;) {
- if (c == '%') {
- do {
- c = getc(fp);
- } while (c != EOF && c != '\n');
- }
- if (c == EOF || !csspace(c))
- break;
- c = getc(fp);
- }
- if (c == EOF)
- break;
- int i = 0;
- num[0] = 0;
- do {
- if (csdigit(c))
- num[i] = c - '0';
- else {
- buf[i++] = c;
- num[i] = 0;
- }
- c = getc(fp);
- } while (i < WORD_MAX && c != EOF && !csspace(c) && c != '%');
- insert_pattern(buf, i, num);
- }
- 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 hyphenation_patterns_file()
-{
- 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());
- }
- skip_line();
-}
-
-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);
- number_reg_dictionary.define(".hla", new hyphenation_language_reg);
-}
diff --git a/contrib/groff/troff/env.h b/contrib/groff/troff/env.h
deleted file mode 100644
index 1db463d..0000000
--- a/contrib/groff/troff/env.h
+++ /dev/null
@@ -1,334 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-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;
-}
-
-struct 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);
- 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;
-
-struct charinfo;
-struct node;
-struct breakpoint;
-struct font_family;
-struct pending_output_line;
-
-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;
- symbol input_trap;
- int input_trap_count;
- node *line; // in reverse order
- hunits prev_text_length;
- hunits width_total;
- int space_total;
- hunits input_line_start;
- tab_stops tabs;
- node *tab_contents;
- hunits tab_width;
- hunits tab_distance;
- 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 */
-
- tab_type distance_to_next_tab(hunits *);
- void start_line();
- void output_line(node *, hunits);
- void output(node *nd, int retain_size, vunits vs, vunits post_vs,
- hunits width);
- 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 */
- void possibly_break_line(int forced = 0);
- breakpoint *choose_breakpoint();
- void hyphenate_line();
- void start_field();
- void wrap_up_field();
- void add_padding();
- node *make_tab_node(hunits d, node *next = 0);
- node *get_prev_char();
-public:
- 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();
- 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_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; }
- 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 do_break(); // .br
- void final_break();
- 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_newline();
- const char *get_font_family_string();
- const char *get_name_string();
- const char *get_point_size_string();
- const char *get_requested_point_size_string();
- void output_pending_lines();
-
- 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 underline();
- friend void input_trap();
- 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 title();
-#ifdef WIDOW_CONTROL
- friend void widow_control_request();
-#endif /* WIDOW_CONTROL */
-};
-
-extern environment *curenv;
-extern void pop_env();
-extern void push_env(int);
-
-void init_environments();
-void read_hyphen_file(const char *name);
-
-extern int break_flag;
-extern symbol default_family;
-extern int translate_space_to_dummy;
diff --git a/contrib/groff/troff/hvunits.h b/contrib/groff/troff/hvunits.h
deleted file mode 100644
index 8efb5ab..0000000
--- a/contrib/groff/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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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/troff/hyphen.us b/contrib/groff/troff/hyphen.us
deleted file mode 100644
index d86c3d5..0000000
--- a/contrib/groff/troff/hyphen.us
+++ /dev/null
@@ -1,4449 +0,0 @@
-% Hyphenation patterns for US English.
-% These are the standard Plain TeX hyphenation patterns (in hyphen.tex).
-.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
diff --git a/contrib/groff/troff/input.cc b/contrib/groff/troff/input.cc
deleted file mode 100644
index 529a70f..0000000
--- a/contrib/groff/troff/input.cc
+++ /dev/null
@@ -1,6406 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "troff.h"
-#include "symbol.h"
-#include "dictionary.h"
-#include "hvunits.h"
-#include "env.h"
-#include "request.h"
-#include "node.h"
-#include "reg.h"
-#include "token.h"
-#include "div.h"
-#include "charinfo.h"
-#include "font.h"
-#include "searchpath.h"
-#include "macropath.h"
-#include "defs.h"
-
-// Needed for getpid().
-#include "posix.h"
-
-#include "nonposix.h"
-
-#ifdef ISATTY_MISSING
-#undef isatty
-#define isatty(n) (1)
-#else /* not ISATTY_MISSING */
-#ifndef isatty
-extern "C" {
- int isatty(int);
-}
-#endif /* not isatty */
-#endif /* not ISATTY_MISSING */
-
-#define USAGE_EXIT_CODE 1
-#define MACRO_PREFIX "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
-
-#ifdef COLUMN
-void init_column_requests();
-#endif /* COLUMN */
-
-static node *read_draw_node();
-void handle_first_page_transition();
-static void push_token(const token &);
-void copy_file();
-#ifdef COLUMN
-void vjustify();
-#endif /* COLUMN */
-void transparent();
-void transparent_file();
-
-const char *program_name = 0;
-token tok;
-int break_flag = 0;
-static int backtrace_flag = 0;
-#ifndef POPEN_MISSING
-char *pipe_command = 0;
-#endif
-charinfo *charset_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 tcommand_flag = 0;
-
-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);
-
-static symbol read_escape_name();
-static void interpolate_string(symbol);
-static void interpolate_macro(symbol);
-static void interpolate_number_format(symbol);
-static void interpolate_environment_variable(symbol);
-
-static void interpolate_arg(symbol);
-static request_or_macro *lookup_request(symbol);
-static int get_delim_number(units *, int);
-static int get_delim_number(units *, int, units);
-static int get_line_arg(units *res, int si, charinfo **cp);
-static int read_size(int *);
-static symbol get_delim_name();
-static void init_registers();
-static void trapping_blank_line();
-
-struct input_iterator;
-input_iterator *make_temp_iterator(const char *);
-const char *input_char_description(int);
-
-#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;
-
-#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;
-
-#endif /* IS_EBCDIC_HOST */
-
-
-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();
-}
-
-class input_iterator {
-public:
- input_iterator();
- virtual ~input_iterator();
- int get(node **);
- friend class input_stack;
-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 NULL; }
- 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();
- virtual int internal_level() { return 0; }
- virtual int is_file() { return 0; }
-};
-
-input_iterator::input_iterator()
-: ptr(0), eptr(0)
-{
-}
-
-input_iterator::~input_iterator()
-{
-}
-
-int input_iterator::fill(node **)
-{
- return EOF;
-}
-
-int input_iterator::peek()
-{
- return EOF;
-}
-
-int input_iterator::is_boundary()
-{
- return 0;
-}
-
-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 file_iterator : public input_iterator {
- FILE *fp;
- int lineno;
- const char *filename;
- int popened;
- int newline_flag;
- 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)
-{
- 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;
- 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 (illegal_input_char(c))
- warning(WARN_INPUT, "illegal input character code %1", int(c));
- else {
- *p++ = c;
- if (c == '\n') {
- newline_flag = 1;
- break;
- }
- }
- }
- if (p > buf) {
- eptr = p;
- return *ptr++;
- }
- else {
- eptr = p;
- return EOF;
- }
-}
-
-int file_iterator::peek()
-{
- int c = getc(fp);
- while (illegal_input_char(c)) {
- warning(WARN_INPUT, "illegal 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 remove_boundary();
- static int get_level();
- static void clear();
-
- static int limit;
-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;
-
-inline int input_stack::get_level()
-{
- return level + top->internal_level();
-}
-
-inline int input_stack::get(node **np)
-{
- return (top->ptr < top->eptr) ? *top->ptr++ : finish_get(np);
-}
-
-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;
- 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();
-}
-
-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;
- 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::remove_boundary()
-{
- assert(top->is_boundary());
- input_iterator *temp = top->next;
- 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;
-}
-
-input_iterator *input_stack::get_arg(int i)
-{
- input_iterator *p;
- for (p = top; p != NULL; 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;
- *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;
- top = top->next;
- level--;
- delete tem;
- }
- // Keep while_request happy.
- for (; nboundaries > 0; --nboundaries)
- add_boundary();
-}
-
-void backtrace_request()
-{
- input_stack::backtrace_all();
- fflush(stderr);
- skip_line();
-}
-
-void next_file()
-{
- symbol nm = get_long_name(0);
- while (!tok.newline() && !tok.eof())
- tok.next();
- if (nm.is_null())
- input_stack::end_file();
- else {
- errno = 0;
- FILE *fp = fopen(nm.contents(), "r");
- 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 int get_char_for_escape_name()
-{
- int c = get_copy(NULL);
- switch (c) {
- case EOF:
- copy_mode_error("end of input in escape name");
- return '\0';
- default:
- if (!illegal_input_char(c))
- break;
- // fall through
- case '\n':
- if (c == '\n')
- input_stack::push(make_temp_iterator("\n"));
- case ' ':
- 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()
-{
- int start_level = input_stack::get_level();
- char abuf[ABUF_SIZE];
- char *buf = abuf;
- int buf_size = ABUF_SIZE;
- int i = 0;
- for (;;) {
- int c = get_char_for_escape_name();
- if (c == 0) {
- if (buf != abuf)
- a_delete buf;
- return NULL_SYMBOL;
- }
- 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 (buf == abuf) {
- if (i == 0) {
- copy_mode_error("empty escape name");
- return NULL_SYMBOL;
- }
- return symbol(abuf);
- }
- else {
- symbol s(buf);
- a_delete buf;
- return s;
- }
-}
-
-static symbol read_escape_name()
-{
- int 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();
- char buf[2];
- buf[0] = c;
- buf[1] = '\0';
- return symbol(buf);
-}
-
-static symbol read_increment_and_escape_name(int *incp)
-{
- int 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 == 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(NULL);
- while ((c = input_stack::get(NULL)) != '\n' && c != EOF)
- ;
- return c;
- case '#': // Like \" but newline is ignored.
- (void)input_stack::get(NULL);
- while ((c = input_stack::get(NULL)) != '\n')
- if (c == EOF)
- return EOF;
- break;
- case '$':
- {
- (void)input_stack::get(NULL);
- symbol s = read_escape_name();
- if (!s.is_null())
- interpolate_arg(s);
- break;
- }
- case '*':
- {
- (void)input_stack::get(NULL);
- symbol s = read_escape_name();
- if (!s.is_null())
- interpolate_string(s);
- break;
- }
- case 'a':
- (void)input_stack::get(NULL);
- return '\001';
- case 'e':
- (void)input_stack::get(NULL);
- return ESCAPE_e;
- case 'E':
- (void)input_stack::get(NULL);
- return ESCAPE_E;
- case 'n':
- {
- (void)input_stack::get(NULL);
- int inc;
- symbol s = read_increment_and_escape_name(&inc);
- if (!s.is_null())
- interpolate_number_reg(s, inc);
- break;
- }
- case 'g':
- {
- (void)input_stack::get(NULL);
- symbol s = read_escape_name();
- if (!s.is_null())
- interpolate_number_format(s);
- break;
- }
- case 't':
- (void)input_stack::get(NULL);
- return '\t';
- case 'V':
- {
- (void)input_stack::get(NULL);
- symbol s = read_escape_name();
- if (!s.is_null())
- interpolate_environment_variable(s);
- break;
- }
- case '\n':
- (void)input_stack::get(NULL);
- if (defining)
- return ESCAPE_NEWLINE;
- break;
- case ' ':
- (void)input_stack::get(NULL);
- return ESCAPE_SPACE;
- case '|':
- (void)input_stack::get(NULL);
- return ESCAPE_BAR;
- case '^':
- (void)input_stack::get(NULL);
- return ESCAPE_CIRCUMFLEX;
- case '{':
- (void)input_stack::get(NULL);
- return ESCAPE_LEFT_BRACE;
- case '}':
- (void)input_stack::get(NULL);
- return ESCAPE_RIGHT_BRACE;
- case '`':
- (void)input_stack::get(NULL);
- return ESCAPE_LEFT_QUOTE;
- case '\'':
- (void)input_stack::get(NULL);
- return ESCAPE_RIGHT_QUOTE;
- case '-':
- (void)input_stack::get(NULL);
- return ESCAPE_HYPHEN;
- case '_':
- (void)input_stack::get(NULL);
- return ESCAPE_UNDERSCORE;
- case 'c':
- (void)input_stack::get(NULL);
- return ESCAPE_c;
- case '!':
- (void)input_stack::get(NULL);
- return ESCAPE_BANG;
- case '?':
- (void)input_stack::get(NULL);
- return ESCAPE_QUESTION;
- case '&':
- (void)input_stack::get(NULL);
- return ESCAPE_AMPERSAND;
- case ')':
- (void)input_stack::get(NULL);
- return ESCAPE_RIGHT_PARENTHESIS;
- case '.':
- (void)input_stack::get(NULL);
- return c;
- case '%':
- (void)input_stack::get(NULL);
- return ESCAPE_PERCENT;
- default:
- if (c == escape_char) {
- (void)input_stack::get(NULL);
- 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 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";
-}
-
-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 void do_register();
-
-static node *do_overstrike()
-{
- token start;
- overstrike_node *on = new overstrike_node;
- start.next();
- tok.next();
- while (tok != start) {
- if (tok.newline() || tok.eof()) {
- warning(WARN_DELIM, "missing closing delimiter");
- break;
- }
- charinfo *ci = tok.get_char(1);
- if (ci) {
- node *n = curenv->make_char_node(ci);
- if (n)
- on->overstrike(n);
- }
- tok.next();
- }
- return on;
-}
-
-static node *do_bracket()
-{
- token start;
- bracket_node *bn = new bracket_node;
- start.next();
- tok.next();
- while (tok != start) {
- 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;
- }
- charinfo *ci = tok.get_char(1);
- if (ci) {
- node *n = curenv->make_char_node(ci);
- if (n)
- bn->bracket(n);
- }
- tok.next();
- }
- 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");
- 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;
-}
-
-#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");
- break;
- }
- if (tok == start
- && (compatible_flag || input_stack::get_level() == start_level))
- break;
- if (!tok.add_to_node_list(&rev))
- error("illegal 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();
-};
-
-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";
-}
-
-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;
- int cc = input_stack::get(&n);
- if (cc != escape_char || escape_char == 0) {
- handle_normal_char:
- switch(cc) {
- 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_NODE;
- nd = new space_char_hmotion_node(curenv->get_space_width());
- 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());
- return;
- case ESCAPE_CIRCUMFLEX:
- ESCAPE_CIRCUMFLEX:
- type = TOKEN_NODE;
- nd = new hmotion_node(curenv->get_half_narrow_space_width());
- return;
- case ESCAPE_NEWLINE:
- 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_NODE;
- nd = new transparent_dummy_node;
- 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(NULL);
- 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());
- 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 '~':
- nd = new unbreakable_space_node(curenv->get_space_width());
- type = TOKEN_NODE;
- return;
- case '"':
- while ((cc = input_stack::get(NULL)) != '\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(NULL)) != '\n')
- if (cc == EOF) {
- type = TOKEN_EOF;
- return;
- }
- break;
- case '$':
- {
- symbol nm = read_escape_name();
- if (!nm.is_null())
- interpolate_arg(nm);
- break;
- }
- case '*':
- {
- symbol nm = read_escape_name();
- if (!nm.is_null())
- interpolate_string(nm);
- 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 '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);
- 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();
- if (s.is_null())
- break;
- const char *p;
- for (p = s.contents(); *p != '\0'; p++)
- if (!csdigit(*p))
- break;
- if (*p)
- curenv->set_font(s);
- else
- curenv->set_font(atoi(s.contents()));
- break;
- }
- case 'g':
- {
- symbol s = read_escape_name();
- if (!s.is_null())
- interpolate_number_format(s);
- break;
- }
- case 'h':
- if (!get_delim_number(&x, 'm'))
- break;
- type = TOKEN_NODE;
- nd = new hmotion_node(x);
- return;
- case 'H':
- if (get_delim_number(&x, 'z', curenv->get_requested_point_size()))
- curenv->set_char_height(x);
- break;
- case 'k':
- nm = read_escape_name();
- if (nm.is_null())
- 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 *n = curenv->make_char_node(s);
- if (cc == 'l')
- nd = new hline_node(x, n);
- else
- nd = new vline_node(x, n);
- return;
- }
- case 'n':
- {
- int inc;
- symbol nm = read_increment_and_escape_name(&inc);
- if (!nm.is_null())
- interpolate_number_reg(nm, 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 'p':
- type = TOKEN_SPREAD;
- return;
- case 'r':
- type = TOKEN_NODE;
- nd = new vmotion_node(-curenv->get_size());
- return;
- case 'R':
- do_register();
- break;
- case 's':
- if (read_size(&x))
- curenv->set_size(x);
- break;
- case 'S':
- if (get_delim_number(&x, 0))
- curenv->set_char_slant(x);
- 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);
- return;
- case 'v':
- if (!get_delim_number(&x, 'v'))
- break;
- type = TOKEN_NODE;
- nd = new vmotion_node(x);
- return;
- case 'V':
- {
- symbol nm = read_escape_name();
- if (!nm.is_null())
- interpolate_environment_variable(nm);
- 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())
- 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) {
- nm = read_long_escape_name();
- if (nm.is_null())
- break;
- 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_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_TAB:
- return "a tab character";
- case TOKEN_TRANSPARENT:
- 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)
-{
- while (tok.space())
- tok.next();
- 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;
- }
- }
- if ((buf[i] = tok.ch()) == 0)
- break;
- i++;
- tok.next();
- }
- if (i == 0) {
- empty_name_warning(required);
- return NULL_SYMBOL;
- }
- 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();
- 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 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 saved_compatible_flag = compatible_flag;
- compatible_flag = 0;
- symbol nm = get_name();
- if (nm.is_null())
- skip_line();
- else
- interpolate_macro(nm);
- compatible_flag = saved_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 (!illegal_input_char(cc)) {
- charinfo *ci = charset_table[cc];
- switch (ci->get_special_translation(1)) {
- case charinfo::TRANSLATE_SPACE:
- return ' ';
- 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 diverted_space_node::reread(int *bolp)
-{
- if (curenv->get_fill())
- trapping_blank_line();
- else
- curdiv->space(n);
- *bolp = 1;
- return 1;
-}
-
-int diverted_copy_file_node::reread(int *bolp)
-{
- curdiv->copy_file(filename.contents());
- *bolp = 1;
- return 1;
-}
-
-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 &&
- (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 (nm.is_null())
- skip_line();
- else
- interpolate_macro(nm);
- suppress_next = 1;
- }
- else {
- if (possibly_handle_first_page_transition())
- ;
- else {
- for (;;) {
- 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 && !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;
- 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(curenv->get_space_width()*nspaces));
- 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;
- }
- 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;
- break;
- }
- case token::TOKEN_END_TRAP:
- {
- if (trap_bol_stack.is_empty())
- error("spurious end trap token detected!");
- else
- bol = trap_bol_stack.pop();
-
- /* 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);
- 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++;
-}
-
-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);
-}
-
-struct 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()
-{
- if (!input_stack::get_location(1, &filename, &lineno)) {
- filename = 0;
- lineno = 0;
- }
- length = 0;
- p = 0;
-}
-
-macro::macro(const macro &m)
-: p(m.p), filename(m.filename), lineno(m.lineno), length(m.length)
-{
- if (p != 0)
- p->count++;
-}
-
-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;
- length = m.length;
- return *this;
-}
-
-void macro::append(unsigned char c)
-{
- assert(c != 0);
- if (p == 0)
- p = new macro_header;
- if (p->cl.length() != length) {
- macro_header *tem = p->copy(length);
- if (--(p->count) <= 0)
- delete p;
- p = tem;
- }
- p->cl.append(c);
- ++length;
-}
-
-void macro::append(node *n)
-{
- assert(n != 0);
- if (p == 0)
- p = new macro_header;
- if (p->cl.length() != length) {
- macro_header *tem = p->copy(length);
- if (--(p->count) <= 0)
- delete p;
- p = tem;
- }
- p->cl.append(0);
- p->nl.append(n);
- ++length;
-}
-
-void macro::print_size()
-{
- errprint("%1", length);
-}
-
-// 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;
- }
- int 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;
-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();
-};
-
-string_iterator::string_iterator(const macro &m, const char *p, symbol s)
-: mac(m), how_invoked(p), newline_flag(0), lineno(1), nm(s)
-{
- count = mac.length;
- 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::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();
- 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 (count <= 0)
- return EOF;
- 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 are interpolated using the .macro_name notation
-
-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);
-};
-
-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.length != m2.length)
- return 0;
- string_iterator iter1(m1);
- string_iterator iter2(m2);
- int n = m1.length;
- 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,
- "`%1' not defined (probable missing space after `%2')",
- nm.contents(), buf);
- }
- }
- if (!warned) {
- warning(WARN_MAC, "`%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);
- }
- 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);
- }
- }
- 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 length == 0;
-}
-
-macro_iterator::macro_iterator(symbol s, macro &m, const char *how_invoked)
-: string_iterator(m, how_invoked, 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;
- }
-}
-
-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(NULL);
- while (c == ' ')
- c = get_copy(NULL);
- while (c != EOF && c != '\n' && c != ' ') {
- if (!illegal_input_char(c)) {
- if (reading_from_terminal)
- fputc(c, stderr);
- had_prompt = 1;
- }
- c = get_copy(NULL);
- }
- 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 (illegal_input_char(c))
- warning(WARN_INPUT, "illegal 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();
-}
-
-void do_define_string(int append)
-{
- symbol nm;
- node *n;
- 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 (append && mm)
- mac = *mm;
- 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);
- }
- *mm = mac;
- tok.next();
-}
-
-void define_string()
-{
- do_define_string(0);
-}
-
-void append_string()
-{
- do_define_string(1);
-}
-
-void define_character()
-{
- node *n;
- int c;
- tok.skip();
- charinfo *ci = tok.get_char(1);
- if (ci == 0) {
- skip_line();
- return;
- }
- 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->set_macro(m);
- if (m)
- delete m;
- tok.next();
-}
-
-
-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 using \\*");
- else {
- string_iterator *si = new string_iterator(*m, "string", nm);
- input_stack::push(si);
- }
-}
-
-/* This class is used for the implementation of \$@. It is used for
-each of the closing double quotes. It artificially increases the
-input level by 2, so that the closing double quote will appear to have
-the same input level as the opening quote. */
-
-class end_quote_iterator : public input_iterator {
- unsigned char buf[1];
-public:
- end_quote_iterator();
- ~end_quote_iterator() { }
- int internal_level() { return 2; }
-};
-
-end_quote_iterator::end_quote_iterator()
-{
- buf[0] = '"';
- ptr = buf;
- eptr = buf + 1;
-}
-
-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') {
- for (int i = input_stack::nargs(); i > 0; i--) {
- input_stack::push(input_stack::get_arg(i));
- if (i != 1)
- input_stack::push(make_temp_iterator(" "));
- }
- }
- else if (s[0] == '@' && s[1] == '\0') {
- for (int i = input_stack::nargs(); i > 0; i--) {
- input_stack::push(new end_quote_iterator);
- input_stack::push(input_stack::get_arg(i));
- input_stack::push(make_temp_iterator(i == 1 ? "\"" : " \""));
- }
- }
- 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(".");
-
-enum define_mode { DEFINE_NORMAL, DEFINE_APPEND, DEFINE_IGNORE };
-
-void do_define_macro(define_mode mode)
-{
- symbol nm;
- if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) {
- nm = get_name(1);
- if (nm.is_null()) {
- skip_line();
- return;
- }
- }
- symbol 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;
- 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;
- // see if it matches term
- int i;
- for (i = 0; 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);
- }
- *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);
-}
-
-void append_macro()
-{
- do_define_macro(DEFINE_APPEND);
-}
-
-void ignore()
-{
- ignoring = 1;
- do_define_macro(DEFINE_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, "`%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->length == 0)
- error("cannot chop empty macro");
- else
- m->length -= 1;
- }
- skip_line();
-}
-
-void substring_macro()
-{
- int start;
- 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 substring request");
- else {
- if (start <= 0)
- start += m->length;
- else
- start--;
- int end = 0;
- if (!has_arg() || get_integer(&end)) {
- if (end <= 0)
- end += m->length;
- else
- end--;
- if (start > end) {
- int tem = start;
- start = end;
- end = tem;
- }
- if (start >= m->length || start == end) {
- m->length = 0;
- if (m->p) {
- if (--(m->p->count) <= 0)
- delete m->p;
- m->p = 0;
- }
- }
- else if (start == 0)
- m->length = end;
- else {
- string_iterator iter(*m);
- int i;
- for (i = 0; i < start; i++)
- if (iter.get(0) == EOF)
- break;
- macro mac;
- for (; i < end; i++) {
- node *nd;
- int c = iter.get(&nd);
- if (c == EOF)
- break;
- if (c == 0)
- mac.append(nd);
- else
- mac.append((unsigned char)c);
- }
- *m = mac;
- }
- }
- }
- }
- skip_line();
-}
-
-void length_macro()
-{
- 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);
- }
- tok.next();
- reg *r = (reg*)number_reg_dictionary.lookup(ret);
- if (r)
- r->set_value(len);
- else
- set_number_reg(ret, len);
-}
-
-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;
- int c = iter.get(&nd);
- if (c == EOF)
- break;
- if (c != 0)
- am.append(c);
- else
- nd->asciify(&am);
- }
- *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, int 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, int 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, int si, charinfo **cp)
-{
- token start;
- start.next();
- if (start.delimiter(1)) {
- tok.next();
- if (get_number(n, si)) {
- if (tok.dummy())
- tok.next();
- if (start != tok) {
- *cp = tok.get_char(1);
- tok.next();
- }
- if (start != tok)
- 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;
- 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:
- *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);
- }
- 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;
-}
-
-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 same(node *);
- const char *type();
-};
-
-non_interpreted_node::non_interpreted_node(const macro &m) : mac(m)
-{
-}
-
-int non_interpreted_node::same(node *nd)
-{
- return mac == ((non_interpreted_node *)nd)->mac;
-}
-
-const char *non_interpreted_node::type()
-{
- return "non_interpreted_node";
-}
-
-node *non_interpreted_node::copy()
-{
- return new non_interpreted_node(mac);
-}
-
-int non_interpreted_node::interpret(macro *m)
-{
- string_iterator si(mac);
- node *n;
- 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 {
- error("%1 is illegal 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 special_node::tprint(troff_output_file *out)
-{
- tprint_start(out);
- string_iterator iter(mac);
- for (;;) {
- int c = iter.get(NULL);
- 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(NULL);
- 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(NULL)) {
- case '{':
- ++level;
- break;
- case '}':
- --level;
- break;
- case '"':
- while ((c = input_stack::get(NULL)) != '\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();
-}
-
-
-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 == '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 (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;
- 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;
- 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;
- 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(NULL) != EOF)
- ;
- break;
- }
- process_input_stack();
- if (while_break_flag) {
- 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(NULL) != EOF)
- ;
- tok.next();
- }
-}
-
-void while_continue_request()
-{
- if (!while_depth) {
- error("no while loop");
- skip_line();
- }
- else {
- while (input_stack::get(NULL) != 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 = fopen(nm.contents(), "r");
- 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()
-{
-#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(NULL)) == ' ' || c == '\t')
- ;
- int buf_size = 24;
- char *buf = new char[buf_size];
- int buf_used = 0;
- for (; c != '\n' && c != EOF; c = get_copy(NULL)) {
- 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.cc
-
-#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("illegal 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;
-}
-
-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)
- goto assign_registers;
- 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)
- goto assign_registers;
- }
- }
- error("%%%%BoundingBox comment not found in `%1'", filename);
- return;
-
-assign_registers:
- llx_reg_contents = bb.llx;
- lly_reg_contents = bb.lly;
- urx_reg_contents = bb.urx;
- ury_reg_contents = bb.ury;
-}
-
-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 = fopen(nm.contents(), 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_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;
- default:
- if (illegal_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 (illegal_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;
-}
-
-// .tm
-
-void terminal()
-{
- if (!tok.newline() && !tok.eof()) {
- int c;
- while ((c = get_copy(NULL)) == ' ' || c == '\t')
- ;
- for (; c != '\n' && c != EOF; c = get_copy(NULL))
- fputs(asciify(c), stderr);
- }
- fputc('\n', stderr);
- fflush(stderr);
- tok.next();
-}
-
-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()
-{
- do_open(0);
-}
-
-void opena_request()
-{
- 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();
-}
-
-void write_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;
- }
- int c;
- while ((c = get_copy(NULL)) == ' ')
- ;
- if (c == '"')
- c = get_copy(NULL);
- for (; c != '\n' && c != EOF; c = get_copy(NULL))
- fputs(asciify(c), fp);
- fputc('\n', fp);
- fflush(fp);
- tok.next();
-}
-
-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();
-}
-
-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("ru"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY);
- get_charinfo(symbol("br"))->set_flags(charinfo::OVERLAPS_VERTICALLY);
- page_character = charset_table['%'];
-}
-
-static
-void do_translate(int translate_transparent)
-{
- 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.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);
- else
- ci1->set_translation(ci2, translate_transparent);
- }
- tok.next();
- }
- skip_line();
-}
-
-void translate()
-{
- do_translate(1);
-}
-
-void translate_no_transparent()
-{
- do_translate(0);
-}
-
-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);
- tok.next();
- tok.skip();
- }
- 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());
-}
-
-int token::add_to_node_list(node **pp)
-{
- hunits w;
- node *n = 0;
- switch (type) {
- case TOKEN_CHAR:
- *pp = (*pp)->add_char(charset_table[c], curenv, &w);
- 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);
- 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);
- break;
- case TOKEN_RIGHT_BRACE:
- break;
- case TOKEN_SPACE:
- n = new hmotion_node(curenv->get_space_width());
- break;
- case TOKEN_SPECIAL:
- *pp = (*pp)->add_char(get_charinfo(nm), curenv, &w);
- 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()));
- break;
- case TOKEN_CHAR:
- curenv->add_char(charset_table[c]);
- break;
- case TOKEN_DUMMY:
- curenv->add_node(new dummy_node);
- break;
- case TOKEN_EOF:
- assert(0);
- break;
- case TOKEN_EMPTY:
- 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_TAB:
- curenv->handle_tab(0);
- break;
- case TOKEN_TRANSPARENT:
- 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(NULL))
- 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 (!illegal_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()
-{
-#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 {
- if ((pipe_command = read_string()) == 0)
- error("can't pipe to empty command");
- }
-#endif /* not POPEN_MISSING */
-}
-
-static int system_status;
-
-void system_request()
-{
- 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 = fopen(filename.contents(), "r");
- 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 (illegal_input_char(c))
- warning(WARN_INPUT, "illegal 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)
-{
- char *s = new char[strlen(mac)+strlen(MACRO_PREFIX)+1];
- strcpy(s, MACRO_PREFIX);
- strcat(s, mac);
- FILE *fp = macro_path.open_file(s, path);
- a_delete s;
- 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(char *filename)
-{
- char *path;
- FILE *fp = macro_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();
- }
-}
-
-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 = macro_path.open_file(nm.contents(), &path);
- 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 = fopen(name, "r");
- 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(NULL) != 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 (!illegal_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) {}
-};
-
-static void prepend_string(const char *s, string_list **p)
-{
- string_list *l = new string_list(s);
- l->next = *p;
- *p = l;
-}
-
-static void add_string(const char *s, string_list **p)
-{
- while (*p)
- p = &((*p)->next);
- *p = new string_list(s);
-}
-
-void usage(const char *prog)
-{
- errprint(
-"usage: %1 -abivzCERU -wname -Wname -dcs -ffam -mname -nnum -olist\n"
-" -rcn -Tname -Fdir -Mdir [files...]\n",
- prog);
- exit(USAGE_EXIT_CODE);
-}
-
-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 safer_flag = 1; // safer by default
- int no_rc = 0; // don't process troffrc and troffrc-end
- int next_page_number;
- opterr = 0;
- hresolution = vresolution = 1;
- while ((c = getopt(argc, argv, "abivw:W:zCEf:m:n:o:r:d:F:M:T:tqs:RU"))
- != EOF)
- switch(c) {
- case 'v':
- {
- extern const char *Version_string;
- fprintf(stderr, "GNU troff version %s\n", Version_string);
- fflush(stderr);
- break;
- }
- case 'T':
- device = optarg;
- tflag = 1;
- break;
- case 'C':
- compatible_flag = 1;
- break;
- case 'M':
- 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;
- case '?':
- usage(argv[0]);
- default:
- assert(0);
- }
- set_string(".T", device);
- init_charset_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;
- 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);
- if (safer_flag)
- prepend_string("safer", &macros);
- 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("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"));
-}
-
-void init_input_requests()
-{
- init_request("ds", define_string);
- init_request("as", append_string);
- init_request("de", define_macro);
- init_request("am", append_macro);
- init_request("ig", ignore);
- init_request("rm", remove_macro);
- init_request("rn", rename_macro);
- init_request("if", if_request);
- init_request("ie", if_else_request);
- init_request("el", else_request);
- init_request("so", source);
- init_request("nx", next_file);
- init_request("pm", print_macros);
- init_request("eo", escape_off);
- init_request("ec", set_escape_char);
- init_request("pc", set_page_character);
- init_request("tm", terminal);
- init_request("ex", exit_request);
- init_request("em", end_macro);
- init_request("blm", blank_line_macro);
- init_request("tr", translate);
- init_request("trnt", translate_no_transparent);
- init_request("ab", abort_request);
- init_request("pi", pipe_output);
- init_request("cf", copy_file);
- init_request("sy", system_request);
- init_request("lf", line_file);
- init_request("cflags", char_flags);
- init_request("shift", shift);
- init_request("rd", read_request);
- init_request("cp", compatible);
- init_request("char", define_character);
- init_request("rchar", remove_character);
- init_request("hcode", hyphenation_code);
- init_request("while", while_request);
- init_request("break", while_break_request);
- init_request("continue", while_continue_request);
- init_request("als", alias_macro);
- init_request("backtrace", backtrace_request);
- init_request("chop", chop_macro);
- init_request("substring", substring_macro);
- init_request("length", length_macro);
- init_request("asciify", asciify_macro);
- init_request("warn", warn_request);
- init_request("open", open_request);
- init_request("opena", opena_request);
- init_request("close", close_request);
- init_request("write", write_request);
- init_request("writem", write_macro_request);
- init_request("trf", transparent_file);
-#ifdef WIDOW_CONTROL
- init_request("fpl", flush_pending_lines);
-#endif /* WIDOW_CONTROL */
- init_request("nroff", nroff_request);
- init_request("troff", troff_request);
-#ifdef COLUMN
- init_request("vj", vjustify);
-#endif /* COLUMN */
- init_request("mso", macro_source);
- init_request("do", do_request);
-#ifndef POPEN_MISSING
- init_request("pso", pipe_source);
-#endif /* not POPEN_MISSING */
- init_request("psbb", ps_bbox_request);
- number_reg_dictionary.define("systat", new variable_reg(&system_status));
- number_reg_dictionary.define("slimit",
- new variable_reg(&input_stack::limit));
- number_reg_dictionary.define(".$", new nargs_reg);
- number_reg_dictionary.define(".c", new lineno_reg);
- number_reg_dictionary.define("c.", new writable_lineno_reg);
- number_reg_dictionary.define(".F", new filename_reg);
- number_reg_dictionary.define(".C", new constant_int_reg(&compatible_flag));
- number_reg_dictionary.define(".H", new constant_int_reg(&hresolution));
- number_reg_dictionary.define(".V", new constant_int_reg(&vresolution));
- number_reg_dictionary.define(".R", new constant_reg("10000"));
- extern const char *major_version;
- number_reg_dictionary.define(".x", new constant_reg(major_version));
- extern const char *minor_version;
- number_reg_dictionary.define(".y", new constant_reg(minor_version));
- extern const char *revision;
- number_reg_dictionary.define(".Y", new constant_reg(revision));
- number_reg_dictionary.define(".g", new constant_reg("1"));
- number_reg_dictionary.define(".warn", new constant_int_reg(&warning_mask));
- 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("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, "`%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;
- 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();
- 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;
- default:
- // silently pass it through
- break;
- }
- draw_node *dn = new draw_node(type, point, npoints,
- curenv->get_font_size());
- a_delete point;
- return dn;
- }
- else {
- a_delete point;
- }
- }
- }
- return 0;
-}
-
-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 },
- { "all", WARN_TOTAL & ~(WARN_DI | WARN_MAC | WARN_REG) },
- { "w", WARN_TOTAL },
- { "default", DEFAULT_WARNING_MASK },
-};
-
-static int lookup_warning(const char *name)
-{
- for (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, 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;
- }
- 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;
-}
-
-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), not_found(0),
- transparent_translate(1), nm(s)
-{
- index = next_index++;
-}
-
-void charinfo::set_hyphenation_code(unsigned char c)
-{
- hyphenation_code = c;
-}
-
-void charinfo::set_translation(charinfo *ci, int tt)
-{
- translation = ci;
- 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;
-}
-
-macro *charinfo::set_macro(macro *m)
-{
- macro *tem = mac;
- mac = m;
- 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);
- 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/troff/node.cc b/contrib/groff/troff/node.cc
deleted file mode 100644
index d53bf33..0000000
--- a/contrib/groff/troff/node.cc
+++ /dev/null
@@ -1,4920 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#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 "charinfo.h"
-#include "font.h"
-#include "reg.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 */
-
-#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);
-};
-
-struct tfont;
-
-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 nm, int n, symbol enm, font *f);
- 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();
-};
-
-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 nm, int pos, 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;
-}
-
-// 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;
-}
-
-hunits font_info::get_space_width(font_size fs, int space_size)
-{
- if (is_constant_spaced == CONSTANT_SPACE_NONE)
- return scale(hunits(fm->get_space_width(fs.to_scaled_points())),
- space_size, 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 *make_tfont(tfont_spec &spec)
-{
- for (tfont *p = tfont::tfont_list; p; p = p->next)
- if (*p == spec)
- return p;
- return new tfont(spec);
-}
-
-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;
- virtual void really_transparent_char(unsigned char) = 0;
- virtual void really_print_line(hunits x, vunits y, node *n,
- vunits before, vunits after) = 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);
-protected:
- FILE *fp;
-public:
- 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);
- void begin_page(int pageno, vunits page_length);
- void put_filename(const char *filename);
- 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);
- 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);
- 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;
- 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;
- void do_motion();
- void put(char c);
- void put(unsigned char c);
- void put(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 *ci, tfont *tf);
- void put_char_width(charinfo *ci, tfont *tf, hunits w, hunits k);
- void right(hunits);
- void down(vunits);
- void moveto(hunits, vunits);
- 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);
- 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 draw(char, hvpair *, int, font_size);
- int get_hpos() { return hpos; }
- int get_vpos() { return vpos; }
-};
-
-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);
-}
-
-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)
-{
- moveto(x, y);
- while (n != 0) {
- 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();
- 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 (tbuf_len == 0)
- return;
- if (tbuf_kern == 0)
- put('t');
- else {
- put('u');
- put(tbuf_kern);
- put(' ');
- }
- for (int i = 0; i < tbuf_len; i++)
- put(tbuf[i]);
- put('\n');
- tbuf_len = 0;
-}
-
-void troff_output_file::put_char_width(charinfo *ci, tfont *tf, hunits w,
- hunits k)
-{
- if (tf != current_tfont) {
- flush_tbuf();
- set_font(tf);
- }
- char c = ci->get_ascii_code();
- int kk = k.to_units();
- if (c == '\0') {
- 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');
- hpos += w.to_units() + kk;
- }
- else if (tcommand_flag) {
- if (tbuf_len > 0 && hpos == output_hpos && vpos == output_vpos
- && kk == tbuf_kern
- && tbuf_len < TBUF_SIZE) {
- tbuf[tbuf_len++] = c;
- output_hpos += w.to_units() + kk;
- hpos = output_hpos;
- return;
- }
- flush_tbuf();
- do_motion();
- tbuf[tbuf_len++] = c;
- output_hpos += w.to_units() + kk;
- tbuf_kern = kk;
- hpos = output_hpos;
- }
- else {
- // flush_tbuf();
- int n = hpos - output_hpos;
- if (vpos == output_vpos && n > 0 && n < 100 && !force_motion) {
- put(char(n/10 + '0'));
- put(char(n%10 + '0'));
- put(c);
- output_hpos = hpos;
- }
- else {
- do_motion();
- put('c');
- put(c);
- }
- hpos += w.to_units() + kk;
- }
-}
-
-void troff_output_file::put_char(charinfo *ci, tfont *tf)
-{
- flush_tbuf();
- if (tf != current_tfont)
- set_font(tf);
- char c = ci->get_ascii_code();
- if (c == '\0') {
- 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 && n > 0 && n < 100) {
- put(char(n/10 + '0'));
- put(char(n%10 + '0'));
- put(c);
- output_hpos = hpos;
- }
- else {
- do_motion();
- put('c');
- put(c);
- }
- }
-}
-
-void troff_output_file::set_font(tfont *tf)
-{
- if (current_tfont == tf)
- return;
- 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;
-}
-
-void troff_output_file::draw(char code, hvpair *point, int npoints,
- font_size fsize)
-{
- flush_tbuf();
- do_motion();
- 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);
- int i;
- 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());
- }
- 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;
- }
- put('\n');
-}
-
-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 = fopen(filename, "r");
- 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), nfont_positions(10), tbuf_len(0),
- begun_page(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 *filename)
-{
-}
-
-real_output_file::real_output_file()
-: printing(0)
-{
-#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)
- really_copy_file(x, y, filename);
-}
-
-void real_output_file::transparent_char(unsigned char c)
-{
- if (printing)
- really_transparent_char(c);
-}
-
-void real_output_file::print_line(hunits x, vunits y, node *n,
- vunits before, vunits after)
-{
- if (printing)
- really_print_line(x, y, n, before, after);
- 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 *filename)
-{
-}
-
-/* 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)
-{
- 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)
-{
-}
-
-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 *, node * = 0);
- int ends_sentence();
- int overlaps_vertically();
- int overlaps_horizontally();
-};
-
-charinfo_node::charinfo_node(charinfo *c, node *x)
-: node(x), 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;
-#ifdef STORE_WIDTH
- hunits wid;
- glyph_node(charinfo *, tfont *, hunits, node * = 0);
-#endif
-public:
- void *operator new(size_t);
- void operator delete(void *);
- glyph_node(charinfo *, tfont *, 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();
- void tprint(troff_output_file *);
- void zero_width_tprint(troff_output_file *);
- hyphen_list *get_hyphen_list(hyphen_list *ss = 0);
- node *add_self(node *, hyphen_list **);
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int character_type();
- int same(node *);
- const char *type();
-};
-
-glyph_node *glyph_node::free_list = 0;
-
-class ligature_node : public glyph_node {
- node *n1;
- node *n2;
-#ifdef STORE_WIDTH
- ligature_node(charinfo *, tfont *, hunits, node *gn1, node *gn2, node *x = 0);
-#endif
-public:
- void *operator new(size_t);
- void operator delete(void *);
- ligature_node(charinfo *, tfont *, node *gn1, node *gn2, node *x = 0);
- ~ligature_node();
- node *copy();
- node *add_self(node *, hyphen_list **);
- hyphen_list *get_hyphen_list(hyphen_list *ss = 0);
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int same(node *);
- const char *type();
-};
-
-class kern_pair_node : public node {
- hunits amount;
- node *n1;
- node *n2;
-public:
- kern_pair_node(hunits n, node *first, node *second, node *x = 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 *ss = 0);
- 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();
- void vertical_extent(vunits *, vunits *);
-};
-
-class dbreak_node : public node {
- node *none;
- node *pre;
- node *post;
-public:
- dbreak_node(node *n, node *p, node *x = 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();
-};
-
-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, node *x)
-: charinfo_node(c, x), tf(t)
-{
-#ifdef STORE_WIDTH
- wid = tf->get_width(ci);
-#endif
-}
-
-#ifdef STORE_WIDTH
-glyph_node::glyph_node(charinfo *c, tfont *t, hunits w, node *x)
-: charinfo_node(c, x), tf(t), wid(w)
-{
-}
-#endif
-
-node *glyph_node::copy()
-{
-#ifdef STORE_WIDTH
- return new glyph_node(ci, tf, wid);
-#else
- return new glyph_node(ci, tf);
-#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)
-{
- return new hyphen_list(ci->get_hyphenation_code(), tail);
-}
-
-
-tfont *node::get_tfont()
-{
- return 0;
-}
-
-tfont *glyph_node::get_tfont()
-{
- return tf;
-}
-
-node *node::merge_glyph_node(glyph_node * /*gn*/)
-{
- return 0;
-}
-
-node *glyph_node::merge_glyph_node(glyph_node *gn)
-{
- if (tf == gn->tf) {
- charinfo *lig;
- if ((lig = tf->get_lig(ci, gn->ci)) != 0) {
- node *next1 = next;
- next = 0;
- return new ligature_node(lig, tf, this, gn, next1);
- }
- hunits kern;
- if (tf->get_kern(ci, gn->ci, &kern)) {
- node *next1 = next;
- next = 0;
- return new kern_pair_node(kern, this, gn, 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());
-}
-
-ligature_node::ligature_node(charinfo *c, tfont *t,
- node *gn1, node *gn2, node *x)
- : glyph_node(c, t, x), n1(gn1), n2(gn2)
-{
-}
-
-#ifdef STORE_WIDTH
-ligature_node::ligature_node(charinfo *c, tfont *t, hunits w,
- node *gn1, node *gn2, node *x)
- : glyph_node(c, t, w, 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, wid, n1->copy(), n2->copy());
-#else
- return new ligature_node(ci, tf, n1->copy(), n2->copy());
-#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)
-{
- return n1->get_hyphen_list(n2->get_hyphen_list(tail));
-}
-
-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, node *x)
- : node(x), amount(n), n1(first), n2(second)
-{
-}
-
-dbreak_node::dbreak_node(node *n, node *p, node *x)
- : node(x), 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)) {
- node *next1 = next;
- next = 0;
- node *n = copy();
- glyph_node *gn = new glyph_node(soft_hyphen_char, tf);
- node *nn = n->merge_glyph_node(gn);
- if (nn == 0) {
- gn->next = n;
- nn = gn;
- }
- return new dbreak_node(this, nn, 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());
-}
-
-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));
- p->post = copy_node_list(post);
- return p;
-}
-
-hyphen_list *node::get_hyphen_list(hyphen_list *tail)
-{
- return tail;
-}
-
-
-hyphen_list *kern_pair_node::get_hyphen_list(hyphen_list *tail)
-{
- return n1->get_hyphen_list(n2->get_hyphen_list(tail));
-}
-
-class hyphen_inhibitor_node : public node {
-public:
- hyphen_inhibitor_node(node *nd = 0);
- node *copy();
- int same(node *);
- const char *type();
- 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";
-}
-
-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)) {
- node *next1 = next;
- next = 0;
- node *n = copy();
- glyph_node *gn = new glyph_node(soft_hyphen_char, tf);
- node *n1 = n->merge_glyph_node(gn);
- if (n1 == 0) {
- gn->next = n;
- n1 = gn;
- }
- return new dbreak_node(this, n1, 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;
-}
-
-hunits hmotion_node::width()
-{
- return n;
-}
-
-units node::size()
-{
- return points_to_units(10);
-}
-
-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 = n->last_char_node();
- if (last)
- return last;
- }
- 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, node * = 0);
- ~italic_corrected_node();
- node *copy();
- void ascii_print(ascii_output_file *);
- void asciify(macro *m);
- 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 *ss = 0);
- int character_type();
- void tprint(troff_output_file *);
- hunits subscript_correction();
- hunits skew();
- node *add_self(node *, hyphen_list **);
- const char *type();
-};
-
-node *node::add_italic_correction(hunits *width)
-{
- hunits ic = italic_correction();
- if (ic.is_zero())
- return this;
- else {
- node *next1 = next;
- next = 0;
- *width += ic;
- return new italic_corrected_node(this, ic, next1);
- }
-}
-
-italic_corrected_node::italic_corrected_node(node *nn, hunits xx, node *p)
-: node(p), 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);
-}
-
-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)
-{
- return n->get_hyphen_list(tail);
-}
-
-int italic_corrected_node::character_type()
-{
- return n->character_type();
-}
-
-class break_char_node : public node {
- node *ch;
- char break_code;
-public:
- break_char_node(node *, 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 *s = 0);
- void tprint(troff_output_file *);
- void zero_width_tprint(troff_output_file *);
- void ascii_print(ascii_output_file *);
- void asciify(macro *m);
- hyphenation_type get_hyphenation_type();
- int overlaps_vertically();
- int overlaps_horizontally();
- units size();
- tfont *get_tfont();
- int same(node *);
- const char *type();
-};
-
-break_char_node::break_char_node(node *n, int c, node *x)
-: node(x), ch(n), break_code(c)
-{
-}
-
-break_char_node::~break_char_node()
-{
- delete ch;
-}
-
-node *break_char_node::copy()
-{
- return new break_char_node(ch->copy(), break_code);
-}
-
-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, n);
- n->freeze_space();
- }
- next = n;
- n = this;
- if ((*p)->breakable && (break_code & 2)) {
- n = new space_node(H0, 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)
-{
- 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);
-}
-
-node *vertical_size_node::copy()
-{
- return new vertical_size_node(n);
-}
-
-node *hmotion_node::copy()
-{
- return new hmotion_node(n);
-}
-
-node *space_char_hmotion_node::copy()
-{
- return new space_char_hmotion_node(n);
-}
-
-node *vmotion_node::copy()
-{
- return new vmotion_node(n);
-}
-
-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;
-}
-
-node *hline_node::copy()
-{
- return new hline_node(x, n ? n->copy() : 0);
-}
-
-hunits hline_node::width()
-{
- return x < H0 ? H0 : x;
-}
-
-
-vline_node::~vline_node()
-{
- if (n)
- delete n;
-}
-
-node *vline_node::copy()
-{
- return new vline_node(x, n ? n->copy() : 0);
-}
-
-hunits vline_node::width()
-{
- return n == 0 ? H0 : n->width();
-}
-
-
-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));
-}
-
-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()
-{
- delete_node_list(list);
-}
-
-node *overstrike_node::copy()
-{
- overstrike_node *on = new overstrike_node;
- 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()
-{
- delete_node_list(list);
-}
-
-node *bracket_node::copy()
-{
- bracket_node *on = new bracket_node;
- node *last = 0;
- node *tem;
- for (tem = list; tem; tem = tem->next) {
- if (tem->next)
- tem->next->last = tem;
- last = tem;
- }
- for (tem = last; 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)
-{
- 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, node *p) : node(p), n(nn), set(0)
-{
-}
-
-space_node::space_node(hunits nn, int s, node *p) : node(p), n(nn), set(s)
-{
-}
-
-#if 0
-space_node::~space_node()
-{
-}
-#endif
-
-node *space_node::copy()
-{
- return new space_node(n, set);
-}
-
-int space_node::nspaces()
-{
- return set ? 0 : 1;
-}
-
-int space_node::merge_space(hunits h)
-{
- n += h;
- return 1;
-}
-
-hunits space_node::width()
-{
- return n;
-}
-
-void node::spread_space(int*, hunits*)
-{
-}
-
-void space_node::spread_space(int *nspaces, hunits *desired_space)
-{
- if (!set) {
- assert(*nspaces > 0);
- if (*nspaces == 1) {
- n += *desired_space;
- *desired_space = H0;
- }
- else {
- hunits extra = *desired_space / *nspaces;
- *desired_space -= extra;
- n += extra;
- }
- *nspaces -= 1;
- set = 1;
- }
-}
-
-void node::freeze_space()
-{
-}
-
-void space_node::freeze_space()
-{
- set = 1;
-}
-
-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);
-}
-
-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);
-}
-
-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::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_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;
-}
-
-space_char_hmotion_node::space_char_hmotion_node(hunits i, node *next)
-: hmotion_node(i, next)
-{
-}
-
-void space_char_hmotion_node::asciify(macro *m)
-{
- m->append(' ');
- 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 width, int ns, breakpoint *rest,
- int is_inner)
-{
- if (next->discardable())
- return rest;
- breakpoint *bp = new breakpoint;
- bp->next = rest;
- bp->width = width;
- 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->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 width, int ns,
- breakpoint *rest, int is_inner)
-{
- breakpoint *bp = new breakpoint;
- bp->next = rest;
- bp->width = width;
- 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, &width, 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;
-}
-
-int node::interpret(macro *)
-{
- return 0;
-}
-
-special_node::special_node(const macro &m)
-: mac(m)
-{
-}
-
-int special_node::same(node *n)
-{
- return mac == ((special_node *)n)->mac;
-}
-
-const char *special_node::type()
-{
- return "special_node";
-}
-
-node *special_node::copy()
-{
- return new special_node(mac);
-}
-
-void special_node::tprint_start(troff_output_file *out)
-{
- out->start_special();
-}
-
-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();
-}
-
-/* composite_node */
-
-class composite_node : public charinfo_node {
- node *n;
- tfont *tf;
-public:
- composite_node(node *, charinfo *, tfont *, 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 *tail);
- node *add_self(node *, hyphen_list **);
- tfont *get_tfont();
- int same(node *);
- const char *type();
- void vertical_extent(vunits *, vunits *);
- vunits vertical_width();
-};
-
-composite_node::composite_node(node *p, charinfo *c, tfont *t, node *x)
-: charinfo_node(c, 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);
-}
-
-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_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)
-{
- 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 *min, vunits *max)
-{
- n = reverse_node_list(n);
- node_list_vertical_extent(n, min, max);
- n = reverse_node_list(n);
-}
-
-word_space_node::word_space_node(hunits d, node *x) : space_node(d, x)
-{
-}
-
-word_space_node::word_space_node(hunits d, int s, node *x)
-: space_node(d, s, x)
-{
-}
-
-node *word_space_node::copy()
-{
- return new word_space_node(n, set);
-}
-
-void word_space_node::tprint(troff_output_file *out)
-{
- out->word_marker();
- space_node::tprint(out);
-}
-
-unbreakable_space_node::unbreakable_space_node(hunits d, node *x)
-: word_space_node(d, x)
-{
-}
-
-unbreakable_space_node::unbreakable_space_node(hunits d, int s, node *x)
-: word_space_node(d, s, x)
-{
-}
-
-node *unbreakable_space_node::copy()
-{
- return new unbreakable_space_node(n, set);
-}
-
-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)
-{
- return 0;
-}
-
-hvpair::hvpair()
-{
-}
-
-draw_node::draw_node(char c, hvpair *p, int np, font_size s)
- : npoints(np), sz(s), 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)
- 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";
-}
-
-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);
-}
-
-void draw_node::tprint(troff_output_file *out)
-{
- out->draw(code, point, npoints, sz);
-}
-
-/* tprint methods */
-
-void glyph_node::tprint(troff_output_file *out)
-{
- tfont *ptf = tf->get_plain();
- if (ptf == tf)
- out->put_char_width(ci, ptf, 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);
- out->right(offset);
- }
- out->put_char_width(ci, ptf, 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);
- if (bold) {
- out->right(offset);
- out->put_char(ci, ptf);
- 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);
- n->tprint(out);
- out->right(xx - xx2);
- }
- else {
- hunits rem = x - w*i;
- if (rem > H0)
- if (n->overlaps_horizontally()) {
- n->tprint(out);
- out->right(rem - w);
- }
- else
- out->right(rem);
- while (--i >= 0)
- 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);
- n->tprint(out);
- out->down(-h);
- }
- else {
- 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);
- }
- 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->right(n);
-}
-
-void hmotion_node::tprint(troff_output_file *out)
-{
- out->right(n);
-}
-
-void vmotion_node::tprint(troff_output_file *out)
-{
- 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);
-}
-
-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) {
- 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) {
- 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 0
- && global_special_fonts == 0 && font_table[fontno]->sf == 0
-#endif
- ) {
- 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
- 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();
- return new glyph_node(s, tf);
-}
-
-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());
- 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)
- 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)
-{
- node *res;
- switch (ci->get_special_translation()) {
- case charinfo::TRANSLATE_SPACE:
- res = new space_char_hmotion_node(env->get_space_width(), this);
- *widthp += res->width();
- 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) {
- res = make_composite_node(ci, env);
- if (res) {
- res->next = this;
- *widthp += res->width();
- }
- else
- 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;
- }
- }
- }
- 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, 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 vertical_size_node::same(node *nd)
-{
- return n == ((vertical_size_node *)nd)->n;
-}
-
-const char *vertical_size_node::type()
-{
- return "vertical_size_node";
-}
-
-int hmotion_node::same(node *nd)
-{
- return n == ((hmotion_node *)nd)->n;
-}
-
-const char *hmotion_node::type()
-{
- return "hmotion_node";
-}
-
-int space_char_hmotion_node::same(node *nd)
-{
- return n == ((space_char_hmotion_node *)nd)->n;
-}
-
-const char *space_char_hmotion_node::type()
-{
- return "space_char_hmotion_node";
-}
-
-int vmotion_node::same(node *nd)
-{
- return n == ((vmotion_node *)nd)->n;
-}
-
-const char *vmotion_node::type()
-{
- return "vmotion_node";
-}
-
-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 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 dummy_node::same(node * /*nd*/)
-{
- return 1;
-}
-
-const char *dummy_node::type()
-{
- return "dummy_node";
-}
-
-int transparent_dummy_node::same(node * /*nd*/)
-{
- return 1;
-}
-
-const char *transparent_dummy_node::type()
-{
- return "transparent_dummy_node";
-}
-
-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 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";
-}
-
-
-left_italic_corrected_node::left_italic_corrected_node(node *x)
-: node(x), 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;
- 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::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 *min, vunits *max)
-{
- if (n)
- n->vertical_extent(min, max);
- else
- node::vertical_extent(min, max);
-}
-
-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)
-{
- return n ? n->get_hyphen_list(tail) : tail;
-}
-
-node *left_italic_corrected_node::add_self(node *nd, hyphen_list **p)
-{
- if (n) {
- nd = new left_italic_corrected_node(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 bracket_node::same(node *nd)
-{
- return same_node_list(list, ((bracket_node *)nd)->list);
-}
-
-const char *bracket_node::type()
-{
- return "bracket_node";
-}
-
-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 glyph_node::same(node *nd)
-{
- return ci == ((glyph_node *)nd)->ci && tf == ((glyph_node *)nd)->tf;
-}
-
-const char *glyph_node::type()
-{
- return "glyph_node";
-}
-
-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 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 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 break_char_node::same(node *nd)
-{
- return (break_code == ((break_char_node *)nd)->break_code
- && same_node(ch, ((break_char_node *)nd)->ch));
-}
-
-const char *break_char_node::type()
-{
- return "break_char_node";
-}
-
-int line_start_node::same(node * /*nd*/)
-{
- return 1;
-}
-
-const char *line_start_node::type()
-{
- return "line_start_node";
-}
-
-int space_node::same(node *nd)
-{
- return n == ((space_node *)nd)->n && set == ((space_node *)nd)->set;
-}
-
-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);
-}
-
-const char *word_space_node::type()
-{
- return "word_space_node";
-}
-
-int unbreakable_space_node::same(node *nd)
-{
- return (n == ((unbreakable_space_node *)nd)->n
- && set == ((unbreakable_space_node *)nd)->set);
-}
-
-const char *unbreakable_space_node::type()
-{
- return "unbreakable_space_node";
-}
-
-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_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";
-}
-
-// 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)
-{
- 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);
- if (!fm) {
- if (not_found)
- warning(WARN_FONT, "can't find font `%1'", external_name.contents());
- font_dictionary.lookup(external_name, &a_char);
- return 0;
- }
- 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 (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);
-}
-
-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
- 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(0);
- 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 nm;
- font_family *fam;
- while (iter.get(&nm, (void **)&fam)) {
- int map_size = fam->map_size;
- if (n < map_size)
- fam->map[n] = -1;
- for (int i = 0; i < map_size; 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;
-}
-
-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] != NULL;
-}
-
-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("fp", font_position);
- init_request("sty", style);
- init_request("cs", constant_space);
- init_request("bd", bold_font);
- init_request("uf", underline_font);
- init_request("lg", ligature);
- init_request("kern", kern_request);
- init_request("tkf", track_kern);
- init_request("special", special_request);
- init_request("fspecial", font_special_request);
- init_request("ftr", font_translate);
- init_request("shc", set_soft_hyphen_char);
- 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/troff/node.h b/contrib/groff/troff/node.h
deleted file mode 100644
index b509557..0000000
--- a/contrib/groff/troff/node.h
+++ /dev/null
@@ -1,495 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
-struct 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;
- node();
- node(node *n);
- node *add_char(charinfo *c, environment *, hunits *widthp);
-
- virtual ~node();
- virtual node *copy() = 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);
- virtual vunits vertical_width();
- virtual node *last_char_node();
- virtual void vertical_extent(vunits *min, vunits *max);
- 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 *s = 0);
- 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 breakpoint *get_breakpoints(hunits width, int nspaces,
- breakpoint *rest = 0,
- int is_inner = 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 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;
-};
-
-inline node::node() : next(0)
-{
-}
-
-inline node::node(node *n) : next(n)
-{
-}
-
-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 *);
- 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;
- space_node(hunits, int, node * = 0);
-public:
- space_node(hunits d, node *p = 0);
-#if 0
- ~space_node();
- void *operator new(size_t);
-#endif
- node *copy();
- int nspaces();
- hunits width();
- int discardable();
- int merge_space(hunits);
- void freeze_space();
- void spread_space(int*, hunits*);
- void tprint(troff_output_file *);
- breakpoint *get_breakpoints(hunits width, int nspaces, breakpoint *rest = 0,
- int is_inner = 0);
- int nbreaks();
- void split(int, node **, node **);
- void ascii_print(ascii_output_file *);
- int same(node *);
- const char *type();
-};
-
-class word_space_node : public space_node {
-protected:
- word_space_node(hunits, int, node * = 0);
-public:
- word_space_node(hunits, node * = 0);
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
-};
-
-class unbreakable_space_node : public word_space_node {
- unbreakable_space_node(hunits, int, node * = 0);
-public:
- unbreakable_space_node(hunits, node * = 0);
- node *copy();
- int same(node *);
- const char *type();
- breakpoint *get_breakpoints(hunits width, int nspaces, breakpoint *rest = 0,
- int is_inner = 0);
- int nbreaks();
- void split(int, node **, node **);
- int merge_space(hunits);
-};
-
-class diverted_space_node : public node {
-public:
- vunits n;
- diverted_space_node(vunits d, node *p = 0);
- node *copy();
- int reread(int *);
- int same(node *);
- const char *type();
-};
-
-class diverted_copy_file_node : public node {
- symbol filename;
-public:
- vunits n;
- diverted_copy_file_node(symbol s, node *p = 0);
- node *copy();
- int reread(int *);
- int same(node *);
- const char *type();
-};
-
-class extra_size_node : public node {
- vunits n;
- public:
- extra_size_node(vunits i) : n(i) {}
- void set_vertical_size(vertical_size *);
- node *copy();
- int same(node *);
- const char *type();
-};
-
-class vertical_size_node : public node {
- vunits n;
- public:
- vertical_size_node(vunits i) : n(i) {}
- void set_vertical_size(vertical_size *);
- void asciify(macro *);
- node *copy();
- int same(node *);
- const char *type();
-};
-
-class hmotion_node : public node {
-protected:
- hunits n;
-public:
- hmotion_node(hunits i, node *next = 0) : node(next), n(i) {}
- node *copy();
- void tprint(troff_output_file *);
- hunits width();
- void ascii_print(ascii_output_file *);
- int same(node *);
- const char *type();
-};
-
-class space_char_hmotion_node : public hmotion_node {
-public:
- space_char_hmotion_node(hunits i, node *next = 0);
- node *copy();
- void ascii_print(ascii_output_file *);
- void asciify(macro *);
- int same(node *);
- const char *type();
-};
-
-class vmotion_node : public node {
- vunits n;
- public:
- vmotion_node(vunits i) : n(i) {}
- void tprint(troff_output_file *);
- node *copy();
- vunits vertical_width();
- int same(node *);
- const char *type();
-};
-
-
-class hline_node : public node {
- hunits x;
- node *n;
- public:
- hline_node(hunits i, node *c, node *next = 0) : node(next), x(i), n(c) {}
- ~hline_node();
- node *copy();
- hunits width();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
-};
-
-class vline_node : public node {
- vunits x;
- node *n;
- public:
- vline_node(vunits i, node *c, node *next= 0) : node(next), x(i), n(c) {}
- ~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();
-};
-
-
-class dummy_node : public node {
- public:
- dummy_node(node *nd = 0) : node(nd) {}
- node *copy();
- int same(node *);
- const char *type();
- hyphenation_type get_hyphenation_type();
-};
-
-class transparent_dummy_node : public node {
-public:
- transparent_dummy_node() {}
- node *copy();
- int same(node *);
- const char *type();
- int ends_sentence();
- hyphenation_type get_hyphenation_type();
-};
-
-class zero_width_node : public node {
- node *n;
- public:
- zero_width_node(node *gn);
- ~zero_width_node();
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
- void append(node *);
- int character_type();
- void vertical_extent(vunits *min, vunits *max);
-};
-
-class left_italic_corrected_node : public node {
- node *n;
- hunits x;
-public:
- left_italic_corrected_node(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();
- 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 *ss = 0);
- 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();
- node *copy();
- void tprint(troff_output_file *);
- void overstrike(node *); // add another node to be overstruck
- hunits width();
- int same(node *);
- const char *type();
-};
-
-class bracket_node : public node {
- node *list;
- hunits max_width;
-public:
- bracket_node();
- ~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();
-};
-
-class special_node : public node {
- macro mac;
- 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 &);
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
-};
-
-
-struct hvpair {
- hunits h;
- vunits v;
-
- hvpair();
-};
-
-class draw_node : public node {
- int npoints;
- font_size sz;
- char code;
- hvpair *point;
-public:
- draw_node(char, hvpair *, int, font_size);
- ~draw_node();
- hunits width();
- vunits vertical_width();
- node *copy();
- void tprint(troff_output_file *);
- int same(node *);
- const char *type();
-};
-
-class charinfo;
-node *make_node(charinfo *ci, environment *);
-int character_exists(charinfo *, environment *);
-
-int same_node_list(node *n1, node *n2);
-node *reverse_node_list(node *n);
-void delete_node_list(node *);
-node *copy_node_list(node *);
-
-int get_bold_fontno(int f);
-
-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 n, symbol, symbol = NULL_SYMBOL);
-extern void mount_style(int n, symbol);
-extern int is_good_fontno(int n);
-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 page_length);
- 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) = 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 *filename);
-#ifdef COLUMN
- virtual void vjustify(vunits, symbol);
-#endif /* COLUMN */
-};
-
-#ifndef POPEN_MISSING
-extern char *pipe_command;
-#endif
-
-extern output_file *the_output;
-extern void init_output();
-int in_output_page_list(int n);
-
-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);
diff --git a/contrib/groff/troff/number.cc b/contrib/groff/troff/number.cc
deleted file mode 100644
index b4e3d1d..0000000
--- a/contrib/groff/troff/number.cc
+++ /dev/null
@@ -1,669 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-#include "troff.h"
-#include "symbol.h"
-#include "hvunits.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);
-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;
-}
-
-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 "icPmnpuvMsz"
-
-static int parse_term(units *v, int scale_indicator, int parenthesised);
-
-static int parse_expr(units *v, int scale_indicator, int parenthesised)
-{
- int result = parse_term(v, scale_indicator, parenthesised);
- 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))
- 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;
- 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 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))
- 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 == ')') {
- 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))
- return 0;
- tok.skip();
- if (tok.ch() != ')') {
- 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 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 '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/troff/reg.cc b/contrib/groff/troff/reg.cc
deleted file mode 100644
index 79e7806..0000000
--- a/contrib/groff/troff/reg.cc
+++ /dev/null
@@ -1,473 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "troff.h"
-#include "symbol.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 > 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/troff/reg.h b/contrib/groff/troff/reg.h
deleted file mode 100644
index 51d5b9a..0000000
--- a/contrib/groff/troff/reg.h
+++ /dev/null
@@ -1,73 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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);
-
-reg *lookup_number_reg(symbol);
-#if 0
-void inline_define_reg();
-#endif
diff --git a/contrib/groff/troff/request.h b/contrib/groff/troff/request.h
deleted file mode 100644
index 5703175..0000000
--- a/contrib/groff/troff/request.h
+++ /dev/null
@@ -1,79 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
-
-struct macro_header;
-struct node;
-
-class macro : public request_or_macro {
- macro_header *p;
- const char *filename; // where was it defined?
- int lineno;
- int length;
-public:
- macro();
- ~macro();
- macro(const macro &);
- macro &operator=(const macro &);
- void append(unsigned char);
- void append(node *);
- void invoke(symbol);
- macro *to_macro();
- void print_size();
- int empty();
- friend class string_iterator;
- friend void chop_macro();
- friend void substring_macro();
- friend int operator==(const macro &, const macro &);
-};
-
-extern void init_input_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/troff/symbol.cc b/contrib/groff/troff/symbol.cc
deleted file mode 100644
index ce09e39..0000000
--- a/contrib/groff/troff/symbol.cc
+++ /dev/null
@@ -1,150 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-#include "troff.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;
-
-#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
-// I think it unlikely that we'll need more than a million symbols
-static const unsigned int table_sizes[] = {
-101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, 80021, 160001, 500009, 1000003, 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 || *p == 0) {
- s = 0;
- 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;
-}
-
diff --git a/contrib/groff/troff/symbol.h b/contrib/groff/troff/symbol.h
deleted file mode 100644
index 88e0fff..0000000
--- a/contrib/groff/troff/symbol.h
+++ /dev/null
@@ -1,73 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
-};
-
-
-extern const symbol NULL_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;
-}
-
-symbol concat(symbol, symbol);
diff --git a/contrib/groff/troff/token.h b/contrib/groff/troff/token.h
deleted file mode 100644
index f6707f2..0000000
--- a/contrib/groff/troff/token.h
+++ /dev/null
@@ -1,201 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-struct charinfo;
-struct node;
-struct 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
- TOKEN_SPREAD, // \p -- break and spread output line
- TOKEN_TAB, // tab
- TOKEN_TRANSPARENT, // \!
- 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 it a space or double 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();
- int left_brace();
- int right_brace();
- int page_ejector();
- int hyphen_indicator();
- 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 void check_missing_character();
-extern void skip_line();
-extern void handle_initial_title();
-
-struct hunits;
-extern void read_title_parts(node **part, hunits *part_width);
-
-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::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::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;
-}
-
-int has_arg();
diff --git a/contrib/groff/troff/troff.h b/contrib/groff/troff/troff.h
deleted file mode 100644
index c558501..0000000
--- a/contrib/groff/troff/troff.h
+++ /dev/null
@@ -1,83 +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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <time.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "lib.h"
-#include "assert.h"
-#include "device.h"
-
-void cleanup_and_exit(int n);
-
-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 tcommand_flag;
-extern int vresolution;
-extern int hresolution;
-extern int sizescale;
-
-#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
- // change WARN_TOTAL if you add more warning types
-};
-
-const int WARN_TOTAL = 01777777;
-
-int warning(warning_type, const char *,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg,
- const errarg & = empty_errarg);
diff --git a/contrib/groff/xditview/ChangeLog b/contrib/groff/xditview/ChangeLog
deleted file mode 100644
index 88235e6..0000000
--- a/contrib/groff/xditview/ChangeLog
+++ /dev/null
@@ -1,378 +0,0 @@
-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-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 arrary 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/xditview/DESC b/contrib/groff/xditview/DESC
deleted file mode 100644
index 172170c..0000000
--- a/contrib/groff/xditview/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/xditview/Dvi.c b/contrib/groff/xditview/Dvi.c
deleted file mode 100644
index 08eb810..0000000
--- a/contrib/groff/xditview/Dvi.c
+++ /dev/null
@@ -1,573 +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[] = "\
-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\
-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\
-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[] = {
- {XtNfontMap, XtCFontMap, XtRString, sizeof (char *),
- offset(dvi.font_map_string), XtRString, default_font_map},
- {XtNforeground, XtCForeground, XtRPixel, sizeof (unsigned long),
- offset(dvi.foreground), XtRString, "XtDefaultForeground"},
- {XtNbackground, XtCBackground, XtRPixel, sizeof (unsigned long),
- offset(dvi.background), XtRString, "XtDefaultBackground"},
- {XtNpageNumber, XtCPageNumber, XtRInt, sizeof (int),
- offset(dvi.requested_page), XtRString, "1"},
- {XtNlastPageNumber, XtCLastPageNumber, XtRInt, sizeof (int),
- offset (dvi.last_page), XtRString, "0"},
- {XtNfile, XtCFile, XtRFile, sizeof (FILE *),
- offset (dvi.file), XtRFile, (char *) 0},
- {XtNseek, XtCSeek, XtRBoolean, sizeof (Boolean),
- offset(dvi.seek), XtRString, "false"},
- {XtNfont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),
- offset(dvi.default_font), XtRString, "xtdefaultfont"},
- {XtNbackingStore, XtCBackingStore, XtRBackingStore, sizeof (int),
- offset(dvi.backing_store), XtRString, "default"},
- {XtNnoPolyText, XtCNoPolyText, XtRBoolean, sizeof (Boolean),
- offset(dvi.noPolyText), XtRString, "false"},
- {XtNresolution, XtCResolution, XtRInt, sizeof(int),
- offset(dvi.default_resolution), XtRString, "75"},
-};
-
-#undef offset
-
-static void ClassInitialize ();
-static void ClassPartInitialize();
-static void Initialize(), Realize (), Destroy (), Redisplay ();
-static Boolean SetValues (), SetValuesHook ();
-static XtGeometryResult QueryGeometry ();
-static void ShowDvi ();
-static void CloseFile (), OpenFile ();
-static void FindPage ();
-
-static void SaveToFile ();
-
-DviClassRec dviClassRec = {
-{
- &widgetClassRec, /* superclass */
- "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 ()
-{
- XtAddConverter( XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
- NULL, 0 );
-}
-
-/****************************************************************
- *
- * Private Procedures
- *
- ****************************************************************/
-
-/* ARGSUSED */
-static void Initialize(request, new)
- Widget request, new;
-{
- DviWidget dw = (DviWidget) new;
-
- 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;
-}
-
-#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 (w, valueMask, attrs)
- 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(w)
- 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(w, event, region)
- 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);
-}
-
-/*
- * Set specified arguments into widget
- */
-/* ARGSUSED */
-static Boolean
-SetValues (current, request, new)
- DviWidget current, request, new;
-{
- Boolean redisplay = FALSE;
- char *new_map;
- int cur, req;
-
- 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->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);
- }
- }
-
- 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->dvi.requested_page = req;
- if (current->dvi.last_page == 0 && req > cur)
- FindPage (new);
- }
-
- return redisplay;
-}
-
-/*
- * use the set_values_hook entry to check when
- * the file is set
- */
-
-static Boolean
-SetValuesHook (dw, args, num_argsp)
- DviWidget dw;
- ArgList args;
- Cardinal *num_argsp;
-{
- Cardinal i;
-
- for (i = 0; i < *num_argsp; i++) {
- if (!strcmp (args[i].name, XtNfile)) {
- CloseFile (dw);
- OpenFile (dw);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static void CloseFile (dw)
- DviWidget dw;
-{
- if (dw->dvi.tmpFile)
- fclose (dw->dvi.tmpFile);
- ForgetPagePositions (dw);
-}
-
-static void OpenFile (dw)
- 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 (w, request, geometry_return)
- Widget w;
- XtWidgetGeometry *request, *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;
-}
-
-SetDevice (dw, name)
- DviWidget dw;
- 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 (dw)
- 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 (dw)
- 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(w, fp)
- Widget w;
- FILE *fp;
-{
- XtCheckSubclass(w, dviWidgetClass, NULL);
- (*((DviWidgetClass) XtClass(w))->command_class.save)(w, fp);
-}
-
-static
-void SaveToFile(w, fp)
- 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(widget_class)
- 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/xditview/Dvi.h b/contrib/groff/xditview/Dvi.h
deleted file mode 100644
index 5aab7d8..0000000
--- a/contrib/groff/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 "fontMap"
-#define XtNpageNumber "pageNumber"
-#define XtNlastPageNumber "lastPageNumber"
-#define XtNnoPolyText "noPolyText"
-#define XtNseek "seek"
-#define XtNresolution "resolution"
-
-#define XtCFontMap "FontMap"
-#define XtCPageNumber "PageNumber"
-#define XtCLastPageNumber "LastPageNumber"
-#define XtCNoPolyText "NoPolyText"
-#define XtCSeek "Seek"
-#define XtCResolution "Resolution"
-
-typedef struct _DviRec *DviWidget; /* completely defined in DviPrivate.h */
-typedef struct _DviClassRec *DviWidgetClass; /* completely defined in DviPrivate.h */
-
-extern WidgetClass dviWidgetClass;
-
-extern void DviSaveToFile();
-
-#endif /* _XtDvi_h */
-/* DON'T ADD STUFF AFTER THIS #endif */
diff --git a/contrib/groff/xditview/DviChar.c b/contrib/groff/xditview/DviChar.c
deleted file mode 100644
index 2aaba45..0000000
--- a/contrib/groff/xditview/DviChar.c
+++ /dev/null
@@ -1,664 +0,0 @@
-/*
- * DviChar.c
- *
- * Map DVI (ditroff output) character names to
- * font indexes and back
- */
-
-#include "DviChar.h"
-
-extern char *xmalloc();
-
-#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 ();
-static int hash_name ();
-static dispose_hash(), compute_hash();
-
-DviCharNameMap *
-DviFindMap (encoding)
- 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 (map)
- 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
-dispose_hash (map)
- 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 (name)
- char *name;
-{
- int i = 0;
-
- while (*name)
- i = (i << 1) ^ *name++;
- if (i < 0)
- i = -i;
- return i;
-}
-
-static
-compute_hash (map)
- 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 (map, name)
- DviCharNameMap *map;
- 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 */},
-{ "=","eq", /* 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 */},
-{ "|","or","ba" /* 124 */},
-{ "}","rC", /* 125 */},
-{ "~","a~","ap","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!", "\241", /* 161 */},
-{ "ct", "\242", /* 162 */},
-{ "Po", "\243", /* 163 */},
-{ "Cs", "\244", /* 164 */},
-{ "Ye", "\245", /* 165 */},
-{ "bb", "\246", /* 166 */},
-{ "sc", "\247", /* 167 */},
-{ "ad", "\250", /* 168 */},
-{ "co", "\251", /* 169 */},
-{ "Of", "\252", /* 170 */},
-{ "Fo", "\253", /* 171 */},
-{ "no", "\254", /* 172 */},
-{ "-", "hy", "\255" /* 173 */},
-{ "rg", "\256", /* 174 */},
-{ "a-", "\257", /* 175 */},
-{ "de", "\260", /* 176 */},
-{ "+-", "\261", /* 177 */},
-{ "S2", "\262", /* 178 */},
-{ "S3", "\263", /* 179 */},
-{ "aa", "\264", /* 180 */},
-/* Omit *m here; we want *m to match the other greek letters in the
- symbol font. */
-{ "\265", /* 181 */},
-{ "ps", "\266", /* 182 */},
-{ "pc", "\267", /* 183 */},
-{ "ac", "\270", /* 184 */},
-{ "S1", "\271", /* 185 */},
-{ "Om", "\272", /* 186 */},
-{ "Fc", "\273", /* 187 */},
-{ "14", "\274", /* 188 */},
-{ "12", "\275", /* 189 */},
-{ "34", "\276", /* 190 */},
-{ "r?", "\277", /* 191 */},
-{ "`A", "\300", /* 192 */},
-{ "'A", "\301", /* 193 */},
-{ "^A", "\302", /* 194 */},
-{ "~A", "\303", /* 195 */},
-{ ":A", "\304", /* 196 */},
-{ "oA", "\305", /* 197 */},
-{ "AE", "\306", /* 198 */},
-{ ",C", "\307", /* 199 */},
-{ "`E", "\310", /* 200 */},
-{ "'E", "\311", /* 201 */},
-{ "^E", "\312", /* 202 */},
-{ ":E", "\313", /* 203 */},
-{ "`I", "\314", /* 204 */},
-{ "'I", "\315", /* 205 */},
-{ "^I", "\316", /* 206 */},
-{ ":I", "\317", /* 207 */},
-{ "-D", "\320", /* 208 */},
-{ "~N", "\321", /* 209 */},
-{ "`O", "\322", /* 210 */},
-{ "'O", "\323", /* 211 */},
-{ "^O", "\324", /* 212 */},
-{ "~O", "\325", /* 213 */},
-{ ":O", "\326", /* 214 */},
-{ "mu", "\327", /* 215 */},
-{ "/O", "\330", /* 216 */},
-{ "`U", "\331", /* 217 */},
-{ "'U", "\332", /* 218 */},
-{ "^U", "\333", /* 219 */},
-{ ":U", "\334", /* 220 */},
-{ "'Y", "\335", /* 221 */},
-{ "TP", "\336", /* 222 */},
-{ "ss", "\337", /* 223 */},
-{ "`a", "\340", /* 224 */},
-{ "'a", "\341", /* 225 */},
-{ "^a", "\342", /* 226 */},
-{ "~a", "\343", /* 227 */},
-{ ":a", "\344", /* 228 */},
-{ "oa", "\345", /* 229 */},
-{ "ae", "\346", /* 230 */},
-{ ",c", "\347", /* 231 */},
-{ "`e", "\350", /* 232 */},
-{ "'e", "\351", /* 233 */},
-{ "^e", "\352", /* 234 */},
-{ ":e", "\353", /* 235 */},
-{ "`i", "\354", /* 236 */},
-{ "'i", "\355", /* 237 */},
-{ "^i", "\356", /* 238 */},
-{ ":i", "\357", /* 239 */},
-{ "Sd", "\360", /* 240 */},
-{ "~n", "\361", /* 241 */},
-{ "`o", "\362", /* 242 */},
-{ "'o", "\363", /* 243 */},
-{ "^o", "\364", /* 244 */},
-{ "~o", "\365", /* 245 */},
-{ ":o", "\366", /* 246 */},
-{ "di", "\367", /* 247 */},
-{ "/o", "\370", /* 248 */},
-{ "`u", "\371", /* 249 */},
-{ "'u", "\372", /* 250 */},
-{ "^u", "\373", /* 251 */},
-{ ":u", "\374", /* 252 */},
-{ "'y", "\375", /* 253 */},
-{ "Tp", "\376", /* 254 */},
-{ ":y", "\377", /* 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", "\265", /* 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", "or", "|", /* 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", "\260", /* 176 */},
-{ "+-", "\261", /* 177 */},
-{ "sd", /* 178 */},
-{ ">=", /* 179 */},
-{ "mu", "\327", /* 180 */},
-{ "pt", /* 181 */},
-{ "pd", /* 182 */},
-{ "bu", /* 183 */},
-{ "di", "\367", /* 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", /* 214 */},
-{ "md", /* 215 */},
-{ "no", "\254", /* 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", "bv", /* 239 */},
-{ 0, /* 240 */},
-{ "ra", /* 241 */},
-{ "is", /* 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 ()
-{
- standard_maps_loaded = 1;
- DviRegisterMap (&ISO8859_1_map);
- DviRegisterMap (&Adobe_Symbol_map);
-}
diff --git a/contrib/groff/xditview/DviChar.h b/contrib/groff/xditview/DviChar.h
deleted file mode 100644
index b075240..0000000
--- a/contrib/groff/xditview/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;
- char *name;
- int position;
-} DviCharNameHash;
-
-typedef struct _dviCharNameMap {
- char *encoding;
- int special;
- char *dvi_names[DVI_MAP_SIZE][DVI_MAX_SYNONYMS];
- DviCharNameHash *buckets[DVI_HASH_SIZE];
-} DviCharNameMap;
-
-extern DviCharNameMap *DviFindMap ( /* char *encoding */ );
-extern void DviRegisterMap ( /* DviCharNameMap *map */ );
-#ifdef NOTDEF
-extern char *DviCharName ( /* DviCharNameMap *map, int index, int synonym */ );
-#else
-#define DviCharName(map,index,synonym) ((map)->dvi_names[index][synonym])
-#endif
-extern int DviCharIndex ( /* DviCharNameMap *map, char *name */ );
diff --git a/contrib/groff/xditview/DviP.h b/contrib/groff/xditview/DviP.h
deleted file mode 100644
index 851fdfe..0000000
--- a/contrib/groff/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)();
-
-/*
- * 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;
-
-#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)
-
-extern XFontStruct *QueryFont ();
-
-extern DviCharNameMap *QueryFontMap ();
-
-extern DeviceFont *QueryDeviceFont ();
-
-extern char *GetWord(), *GetLine();
-#endif /* _XtDviP_h */
-
-
diff --git a/contrib/groff/xditview/FontMap b/contrib/groff/xditview/FontMap
deleted file mode 100644
index 90911f0..0000000
--- a/contrib/groff/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/xditview/GXditview-ad.h b/contrib/groff/xditview/GXditview-ad.h
deleted file mode 100644
index d9be3da..0000000
--- a/contrib/groff/xditview/GXditview-ad.h
+++ /dev/null
@@ -1,52 +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/xditview/GXditview.ad b/contrib/groff/xditview/GXditview.ad
deleted file mode 100644
index e99ff5e..0000000
--- a/contrib/groff/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/xditview/INSTALL b/contrib/groff/xditview/INSTALL
deleted file mode 100644
index 144118f..0000000
--- a/contrib/groff/xditview/INSTALL
+++ /dev/null
@@ -1,20 +0,0 @@
-This version of gxditview uses imake.
-
-Here are the steps needed to install gxditview:
-
-- edit the Imakefile if necessary
-
-- xmkmf
-
-- make depend
-
-- make
-
-- make install
-
-- make install.man (installs the man page)
-
-The gxditview binary will be installed in the usual place for X
-binaries (eg /usr/bin/X11). Previous versions of gxditview were
-installed along with the other groff binaries (eg in /usr/local/bin);
-you will need to remove these by hand.
diff --git a/contrib/groff/xditview/Imakefile.in b/contrib/groff/xditview/Imakefile.in
deleted file mode 100644
index a720205..0000000
--- a/contrib/groff/xditview/Imakefile.in
+++ /dev/null
@@ -1,99 +0,0 @@
-srcdir=@srcdir@
-top_srcdir=@top_srcdir@
-VPATH=@srcdir@
-top_builddir=@top_builddir@
-
-GROFF_PREFIX = @prefix@
-GROFF_DATADIR = $(GROFF_PREFIX)/share
-GROFF_LIBDIR = $(GROFF_DATADIR)/groff
-GROFF_FONTDIR = $(GROFF_LIBDIR)/font
-GROFF_FONTPATH = .:$(GROFF_FONTDIR):/usr/local/lib/font:/usr/lib/font
-DPIS = 75 100
-
-PROGRAMS = \
- gxditview \
- xtotroff
-DEPLIBS = XawClientDepLibs
-LOCAL_LIBRARIES = XawClientLibs
-SRCS1 = \
- $(srcdir)/xditview.c \
- $(srcdir)/Dvi.c \
- $(srcdir)/draw.c \
- $(srcdir)/font.c \
- $(srcdir)/lex.c \
- $(srcdir)/page.c \
- $(srcdir)/parse.c \
- $(srcdir)/XFontName.c \
- $(srcdir)/DviChar.c \
- $(srcdir)/device.c
-OBJS1 = \
- xditview.o \
- Dvi.o \
- draw.o \
- font.o \
- lex.o \
- page.o \
- parse.o \
- XFontName.o \
- DviChar.o \
- device.o
-SRCS2 = \
- $(srcdir)/xtotroff.c \
- $(srcdir)/XFontName.c \
- $(srcdir)/DviChar.c
-OBJS2 = \
- xtotroff.o \
- XFontName.o \
- DviChar.o
-INCLUDES = \
- -I$(TOOLKITSRC) \
- -I$(TOP)
-MATHLIB = -lm
-DEFINES = \
- $(SIGNAL_DEFINES) \
- -DFONTPATH=\"$(GROFF_FONTPATH)\" # -DX_NOT_STDC_ENV
-
-DEVDIR = $(top_builddir)/font
-MKINSTALLDIRS = $(top_srcdir)/mkinstalldirs
-
-ComplexProgramTarget_1(gxditview,$(LOCAL_LIBRARIES),$(MATHLIB))
-NormalProgramTarget(xtotroff,$(OBJS2),$(DEPXLIB),$(XLIB), /**/)
-
-InstallAppDefaults(GXditview)
-
-fonts: xtotroff $(srcdir)/DESC $(srcdir)/FontMap
- @dir=`pwd`; \
- fonts=`sed -e 's/[ ].*//' $(srcdir)/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/" $(srcdir)/DESC \
- >$(DEVDIR)/devX$$dpi/DESC; \
- (cd $(DEVDIR)/devX$$dpi; \
- rm -f Makefile.sub; \
- echo DEV=X$$dpi >Makefile.sub; \
- echo DEVFILES=DESC $$fonts >>Makefile.sub; \
- $$dir/xtotroff -g -r $$dpi -s 10 $(srcdir)/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/' $(srcdir)/DESC \
- >$(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; \
- $$dir/xtotroff -g -r $$dpi -s 12 $(srcdir)/FontMap); \
- done
-
-GXditview-ad.h: $(srcdir)/GXditview.ad
- /bin/sh $(srcdir)/ad2c $(srcdir)/GXditview.ad >GXditview-ad.h
-
-extraclean: clean
- -rm -f junk tmp grot old Makefile Imakefile
-
-FORCE:
diff --git a/contrib/groff/xditview/Menu.h b/contrib/groff/xditview/Menu.h
deleted file mode 100644
index c306b27..0000000
--- a/contrib/groff/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/xditview/README b/contrib/groff/xditview/README
deleted file mode 100644
index b18f64a..0000000
--- a/contrib/groff/xditview/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This is gxditview, a 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.)
-
-See the file INSTALL in this directory for installation instructions.
-
-xditview is copyrighted by MIT under the usual X terms (see
-gxditview.man); my changes to it are in the public domain.
-
-Please report bugs to bug-groff@gnu.org.
-
-James Clark
-jjc@jclark.com
diff --git a/contrib/groff/xditview/TODO b/contrib/groff/xditview/TODO
deleted file mode 100644
index 161a7cf..0000000
--- a/contrib/groff/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/xditview/XFontName.c b/contrib/groff/xditview/XFontName.c
deleted file mode 100644
index 5ca9bb8..0000000
--- a/contrib/groff/xditview/XFontName.c
+++ /dev/null
@@ -1,256 +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 (name, buffer, size, attrp, bit)
- 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 (name, result, attrp, bit)
- 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 (fontNameString, fontName, fontNameAttributes)
- 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 (u, s, size)
- 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 (fontName, fontNameAttributes, fontNameString)
- XFontName *fontName;
- unsigned int fontNameAttributes;
- XFontNameString fontNameString;
-{
- XFontNameString tmp;
- char *name = tmp, *f;
- int left = sizeof (tmp) - 1;
- char number[32];
-
-#define PutString(field, bit)\
- f = (fontNameAttributes & bit) ? \
- fontName->field \
- : "*"; \
- 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)) \
- : "*"; \
- 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 (name1, name2, fontNameAttributes)
- XFontName *name1, *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;
-}
-
-XCopyFontName (name1, name2, fontNameAttributes)
- XFontName *name1, *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/xditview/XFontName.h b/contrib/groff/xditview/XFontName.h
deleted file mode 100644
index efe9eb1..0000000
--- a/contrib/groff/xditview/XFontName.h
+++ /dev/null
@@ -1,45 +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[256];
diff --git a/contrib/groff/xditview/ad2c b/contrib/groff/xditview/ad2c
deleted file mode 100644
index 651ab8c..0000000
--- a/contrib/groff/xditview/ad2c
+++ /dev/null
@@ -1,62 +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.
-#
-# 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
-# : 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/^/"/
-: 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/xditview/device.c b/contrib/groff/xditview/device.c
deleted file mode 100644
index f1e51de..0000000
--- a/contrib/groff/xditview/device.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/* device.c */
-
-#include <stdio.h>
-#include <ctype.h>
-
-#include <X11/Xos.h>
-#include <X11/Intrinsic.h>
-
-#include "device.h"
-
-#ifndef FONTPATH
-#define FONTPATH "/usr/local/share/groff/font:/usr/local/lib/font:/usr/lib/font"
-#endif
-
-#ifndef isascii
-#define isascii(c) (1)
-#endif
-
-extern void exit();
-#ifndef strtok
-extern char *strtok();
-#endif
-#ifndef strchr
-extern char *strchr();
-#endif
-#ifndef getenv
-extern char *getenv();
-#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();
-static FILE *open_device_file();
-static DeviceFont *load_font();
-static Device *new_device();
-static DeviceFont *new_font();
-static void delete_font();
-static unsigned hash_name();
-static struct charinfo *add_char();
-static int read_charset_section();
-static char *canonicalize_name();
-
-static
-Device *new_device(name)
- 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(dev)
- 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(name)
- 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(dev, name)
- Device *dev;
- 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(dev, name)
- Device *dev;
- 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(name, dev)
- 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(f)
- 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(name)
- char *name;
-{
- unsigned n = 0;
- /* XXX do better than this */
- while (*name)
- n = (n << 1) ^ *name++;
-
- return n;
-}
-
-static
-int scale_round(n, x, y)
- int n, x, 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;
- }
- 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(s)
- char *s;
-{
- static char ch[2];
- if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') {
- char *p;
- int n;
-
- for (p = s + 4; *p; p++)
- if (!isascii(*p) || !isdigit((unsigned char)*p))
- return s;
- n = atoi(s + 4);
- if (n >= 0 && n <= 0xff) {
- ch[0] = (char)n;
- return ch;
- }
- }
- return s;
-}
-
-/* Return 1 if the character is present in the font; widthp gets the
-width if non-null. */
-
-int device_char_width(f, ps, name, widthp)
- DeviceFont *f;
- int ps;
- 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(f, ps, code, widthp)
- 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(f, 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(f)
- DeviceFont *f;
-{
- return f->special;
-}
-
-static
-struct charinfo *add_char(f, name, width, code)
- DeviceFont *f;
- char *name;
- int width, 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(f, fp)
- 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(file, path, result)
- char *file, *path, **result;
-{
- char *buf = NULL;
- int bufsiz = 0;
- int flen;
- FILE *fp;
-
- *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);
-
- if (!path)
- return NULL;
-
- 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(device_name, file_name, result)
- char *device_name, *file_name, **result;
-{
- char *buf, *path;
- FILE *fp;
-
- buf = XtMalloc(3 + strlen(device_name) + 1 + strlen(file_name) + 1);
- sprintf(buf, "dev%s/%s", device_name, file_name);
- path = getenv(FONTPATH_ENV_VAR);
- if (!path)
- path = FONTPATH;
- fp = find_file(buf, path, result);
- if (!fp) {
- fprintf(stderr, "can't find device file `%s'\n", file_name);
- fflush(stderr);
- }
- XtFree(buf);
- return fp;
-}
-
-static
-void error(s)
- 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/xditview/device.h b/contrib/groff/xditview/device.h
deleted file mode 100644
index 2b9a64b..0000000
--- a/contrib/groff/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;
-
-extern void device_destroy();
-extern Device *device_load();
-extern DeviceFont *device_find_font();
-extern int device_char_width();
-extern char *device_name_for_code();
-extern int device_code_width();
-extern int device_font_special();
diff --git a/contrib/groff/xditview/draw.c b/contrib/groff/xditview/draw.c
deleted file mode 100644
index 69e86cd..0000000
--- a/contrib/groff/xditview/draw.c
+++ /dev/null
@@ -1,721 +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();
-
-HorizontalMove(dw, delta)
- DviWidget dw;
- int delta;
-{
- dw->dvi.state->x += delta;
-}
-
-HorizontalGoto(dw, NewPosition)
- DviWidget dw;
- int NewPosition;
-{
- dw->dvi.state->x = NewPosition;
-}
-
-VerticalMove(dw, delta)
- DviWidget dw;
- int delta;
-{
- dw->dvi.state->y += delta;
-}
-
-VerticalGoto(dw, NewPosition)
- DviWidget dw;
- int NewPosition;
-{
- dw->dvi.state->y = NewPosition;
-}
-
-AdjustCacheDeltas (dw)
- 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;
- if (nadj == 0)
- return;
- dw->dvi.text_x_width += extra;
- 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;
- }
-}
-
-FlushCharCache (dw)
- 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);
-}
-
-Newline (dw)
- DviWidget dw;
-{
- FlushCharCache (dw);
- dw->dvi.text_x_width = dw->dvi.text_device_width = 0;
- dw->dvi.word_flag = 0;
-}
-
-Word (dw)
- 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 (fi, c)
- XFontStruct *fi;
- int c;
-{
- XCharStruct *p;
-
- if (fi->per_char == NULL ||
- c < fi->min_char_or_byte2 || 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);
-}
-
-static
-DoCharacter (dw, c, wid)
- DviWidget dw;
- int c;
- int wid; /* width in device units */
-{
- 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;
- }
- /*
- * 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)
- {
- 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]
- = 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 (dw, buf, widp)
- 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 (dw, buf)
- 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 (dw, buf, wid)
- DviWidget dw;
- char *buf;
- int wid;
-{
- int oldx, oldw;
- char ch[2];
- 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;
-}
-
-PutNumberedCharacter (dw, c)
- 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;
- }
-}
-
-ClearPage (dw)
- DviWidget dw;
-{
- XClearWindow (XtDisplay (dw), XtWindow (dw));
-}
-
-static
-setGC (dw)
- 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
-setFillGC (dw)
- 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;
- }
-}
-
-DrawLine (dw, x, y)
- DviWidget dw;
- int x, 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));
-}
-
-DrawCircle (dw, diam)
- 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);
-}
-
-DrawFilledCircle (dw, diam)
- 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);
-}
-
-DrawEllipse (dw, a, b)
- DviWidget dw;
- int a, 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);
-}
-
-DrawFilledEllipse (dw, a, b)
- DviWidget dw;
- int a, 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);
-}
-
-DrawArc (dw, x0, y0, x1, y1)
- DviWidget dw;
- int x0, y0, x1, y1;
-{
- int angle1, angle2;
- int rad = (int)((sqrt ((double)x0*x0 + (double)y0*y0)
- + sqrt ((double)x1*x1 + (double)y1*y1) + 1.0)/2.0);
- if ((x0 == 0 && y0 == 0) || (x1 == 0 && y1 == 0))
- return;
- angle1 = (int)(atan2 ((double)y0, (double)-x0)*180.0*64.0/M_PI);
- angle2 = (int)(atan2 ((double)-y1, (double)x1)*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, x0) - rad,
- YPos (dw) + DeviceToX (dw, y0) - rad,
- rad*2, rad*2, angle1, angle2);
-}
-
-DrawPolygon (dw, v, n)
- 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);
-}
-
-
-DrawFilledPolygon (dw, v, n)
- 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
-appendPoint(points, pointi, x, y)
- XPoint *points;
- int *pointi;
- int x, y;
-{
- if (*pointi < POINTS_MAX) {
- points[*pointi].x = x;
- points[*pointi].y = y;
- *pointi += 1;
- }
-}
-
-#define FLATNESS 1
-
-static
-flattenCurve(points, pointi, x2, y2, x3, y3, x4, y4)
- XPoint *points;
- int *pointi;
- int x2, y2, x3, y3, x4, y4;
-{
- int x1, y1, dx, dy, n1, n2, n;
-
- x1 = points[*pointi - 1].x;
- y1 = points[*pointi - 1].y;
-
- dx = x4 - x1;
- dy = y4 - y1;
-
- n1 = dy*(x2 - x1) - dx*(y2 - y1);
- n2 = dy*(x3 - x1) - dx*(y3 - y1);
- 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, x4, y4);
- else {
- flattenCurve (points, pointi,
- (x1 + x2)/2, (y1 + y2)/2,
- (x1 + x2*2 + x3)/4, (y1 + y2*2 + y3)/4,
- (x1 +3*x2 + 3*x3 + x4)/8, (y1 +3*y2 + 3*y3 + y4)/8);
- flattenCurve (points, pointi,
- (x2 + x3*2 + x4)/4, (y2 + y3*2 + y4)/4,
- (x3 + x4)/2, (y3 + y4)/2,
- x4, y4);
- }
-}
-
-
-DrawSpline (dw, v, n)
- 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/xditview/font.c b/contrib/groff/xditview/font.c
deleted file mode 100644
index 2e028aa..0000000
--- a/contrib/groff/xditview/font.c
+++ /dev/null
@@ -1,471 +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 "DviP.h"
-#include "XFontName.h"
-
-static DisposeFontSizes();
-
-static char *
-savestr (s)
- char *s;
-{
- char *n;
-
- if (!s)
- return 0;
- n = XtMalloc (strlen (s) + 1);
- if (n)
- strcpy (n, s);
- return n;
-}
-
-static DviFontList *
-LookupFontByPosition (dw, position)
- 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 (dw)
- 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 (dw, f, size)
- 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 (n)
- char *n;
-{
- while (*n != '-')
- if (!*++n)
- return 0;
- return n+1;
-}
-
-# define SizePosition 8
-# define EncodingPosition 13
-
-static
-ConvertFontNameToSize (n)
- 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 (n)
- char *n;
-{
- int i;
- for (i = 0; i < EncodingPosition; i++) {
- n = SkipFontNameElement (n);
- if (!n)
- return 0;
- }
- return n;
-}
-
-DviFontSizeList *
-InstallFontSizes (dw, x_name, scalablep)
- DviWidget dw;
- char *x_name;
- Boolean *scalablep;
-{
- char fontNameString[2048];
- char **fonts;
- int i, count;
- int size;
- DviFontSizeList *sizes, *new;
- XFontName fontName;
- unsigned int fontNameAttributes;
-
- *scalablep = FALSE;
- if (!XParseFontName (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 = (DviFontSizeList *) XtMalloc (sizeof *new);
- new->next = sizes;
- new->size = size;
- new->x_name = savestr (fonts[i]);
- new->doesnt_exist = 0;
- new->font = 0;
- sizes = new;
- }
- }
- XFreeFontNames (fonts);
- return sizes;
-}
-
-static
-DisposeFontSizes (dw, fs)
- 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 (dw, position, dvi_name, x_name)
- DviWidget dw;
- int position;
- char *dvi_name;
- 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;
-}
-
-ForgetFonts (dw)
- 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 (dw, dvi_name)
- DviWidget dw;
- 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 (dw, x_name)
- DviWidget dw;
- 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
-
-ParseFontMap (dw)
- DviWidget dw;
-{
- char dvi_name[1024];
- char x_name[2048];
- char *m, *s;
- DviFontMap *fm, *new;
-
- 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 = (DviFontMap *) XtMalloc (sizeof *new);
- new->x_name = savestr (x_name);
- new->dvi_name = savestr (dvi_name);
- new->next = fm;
- fm = new;
- ++m;
- }
- dw->dvi.font_map = fm;
-}
-
-DestroyFontMap (font_map)
- 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 */
-
-SetFontPosition (dw, position, dvi_name, extra)
- DviWidget dw;
- int position;
- char *dvi_name;
- char *extra; /* unused */
-{
- char *x_name;
-
- x_name = MapDviNameToXName (dw, dvi_name);
- if (x_name)
- (void) InstallFont (dw, position, dvi_name, x_name);
-}
-
-XFontStruct *
-QueryFont (dw, position, size)
- 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 (dw, position)
- DviWidget dw;
- int position;
-{
- DviFontList *f;
-
- f = LookupFontByPosition (dw, position);
- if (!f)
- return 0;
- return f->device_font;
-}
-
-DviCharNameMap *
-QueryFontMap (dw, position)
- DviWidget dw;
- int position;
-{
- DviFontList *f;
-
- f = LookupFontByPosition (dw, position);
- if (f)
- return f->char_map;
- else
- return 0;
-}
-
-#if 0
-LoadFont (dw, position, size)
- 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/xditview/gray1.bm b/contrib/groff/xditview/gray1.bm
deleted file mode 100644
index c40a95e..0000000
--- a/contrib/groff/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/xditview/gray2.bm b/contrib/groff/xditview/gray2.bm
deleted file mode 100644
index e87a1bc..0000000
--- a/contrib/groff/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/xditview/gray3.bm b/contrib/groff/xditview/gray3.bm
deleted file mode 100644
index d9313eb..0000000
--- a/contrib/groff/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/xditview/gray4.bm b/contrib/groff/xditview/gray4.bm
deleted file mode 100644
index dad142a..0000000
--- a/contrib/groff/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/xditview/gray5.bm b/contrib/groff/xditview/gray5.bm
deleted file mode 100644
index 5f57618..0000000
--- a/contrib/groff/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/xditview/gray6.bm b/contrib/groff/xditview/gray6.bm
deleted file mode 100644
index b76701d..0000000
--- a/contrib/groff/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/xditview/gray7.bm b/contrib/groff/xditview/gray7.bm
deleted file mode 100644
index ef47bc6..0000000
--- a/contrib/groff/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/xditview/gray8.bm b/contrib/groff/xditview/gray8.bm
deleted file mode 100644
index 12de7cb..0000000
--- a/contrib/groff/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/xditview/gxditview.man b/contrib/groff/xditview/gxditview.man
deleted file mode 100644
index 04cd446..0000000
--- a/contrib/groff/xditview/gxditview.man
+++ /dev/null
@@ -1,246 +0,0 @@
-.\" -*- nroff -*-
-.TH GXDITVIEW 1 "Release 5" "X Version 11"
-.SH NAME
-gxditview \- display gtroff output files
-.SH SYNOPSIS
-.B gxditview
-.RI [\fB\- toolkitoption\ .\|.\|.\|]
-.RI [\fB\- option\ .\|.\|.\|]
-.RI [ filename ]
-.SH DESCRIPTION
-The
-.I gxditview
-program displays gtroff output on an X display.
-It uses the standard X11 fonts,
-so it does not require access to the server machine for font loading.
-.PP
-If
-.I filename
-is
-.BR \- ,
-.I gxditview
-will read the standard input.
-.PP
-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 gtroff 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 gtroff output.
-If the filename starts with
-.B |
-it will be taken to be a command to read from.
-.TP
-.B Quit
-Exit from
-.IR gxditview .
-.PP
-The
-.BR n ,
-Space
-and Return keys are bound to the
-.B Next\ Page
-action.
-The
-.BR p ,
-BackSpace
-and
-Delete
-keys are bound to the
-.B Previous\ Page
-action.
-The
-.B q
-key is bound to the
-.B Quit
-action.
-The
-.B 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
-.IR gxditview .
-.SH OPTIONS
-.I Gxditview
-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 gtroff output window can take upto 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 gtroff 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 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
-.IR 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:
-.PP
-.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 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 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"
-.IR X (1),
-.IR xrdb (1),
-.IR gtroff (1),
-.IR groff (1)
-.SH ORIGIN
-This program is derived from xditview;
-portions of xditview originated in xtroff which was derived
-from suntroff.
-.SH COPYRIGHT
-Copyright 1989, Massachusetts Institute of Technology.
-.br
-See
-.IR 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
diff --git a/contrib/groff/xditview/lex.c b/contrib/groff/xditview/lex.c
deleted file mode 100644
index 32831bd..0000000
--- a/contrib/groff/xditview/lex.c
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include "DviP.h"
-
-DviGetAndPut(dw, cp)
- 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(dw, Buffer, Length)
- 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(dw, Buffer, Length)
- 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;
-}
-
-GetNumber(dw)
- 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/xditview/page.c b/contrib/groff/xditview/page.c
deleted file mode 100644
index 9284199..0000000
--- a/contrib/groff/xditview/page.c
+++ /dev/null
@@ -1,88 +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 (dw, number)
- DviWidget dw;
- int number;
-{
- DviFileMap *m;
-
- for (m = dw->dvi.file_map; m; m=m->next)
- if (m->page_number == number)
- break;
- return m;
-}
-
-DestroyFileMap (m)
- DviFileMap *m;
-{
- DviFileMap *next;
-
- for (; m; m = next) {
- next = m->next;
- XtFree ((char *) m);
- }
-}
-
-ForgetPagePositions (dw)
- DviWidget dw;
-{
- DestroyFileMap (dw->dvi.file_map);
- dw->dvi.file_map = 0;
-}
-
-RememberPagePosition(dw, number)
- 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);
-}
-
-SearchPagePosition (dw, number)
- DviWidget dw;
- int number;
-{
- DviFileMap *m;
-
- if (!(m = MapPageNumberToFileMap (dw, number)))
- return -1;
- return m->position;
-}
-
-FileSeek(dw, position)
-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/xditview/parse.c b/contrib/groff/xditview/parse.c
deleted file mode 100644
index 8367c17..0000000
--- a/contrib/groff/xditview/parse.c
+++ /dev/null
@@ -1,334 +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 ParseDrawFunction(), ParseDeviceControl();
-static push_env(), pop_env();
-
-#define HorizontalMove(dw, delta) ((dw)->dvi.state->x += (delta))
-
-
-ParseInput(dw)
- 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 '+': /* continuation of X device control */
- 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
-push_env(dw)
- DviWidget dw;
-{
- DviState *new;
-
- new = (DviState *) XtMalloc (sizeof (*new));
- if (dw->dvi.state)
- *new = *(dw->dvi.state);
- else {
- new->font_size = 10;
- new->font_number = 1;
- new->x = 0;
- new->y = 0;
- }
- new->next = dw->dvi.state;
- dw->dvi.state = new;
-}
-
-static
-pop_env(dw)
- DviWidget dw;
-{
- DviState *old;
-
- old = dw->dvi.state;
- dw->dvi.state = old->next;
- XtFree ((char *) old);
-}
-
-static
-InitTypesetter (dw)
- DviWidget dw;
-{
- while (dw->dvi.state)
- pop_env (dw);
- push_env (dw);
- FlushCharCache (dw);
-}
-
-#define DRAW_ARGS_MAX 128
-
-static
-ParseDrawFunction(dw, buf)
-DviWidget dw;
-char *buf;
-{
- int v[DRAW_ARGS_MAX];
- int i;
- 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];
- break;
- default:
-#if 0
- warning("unknown drawing function %s", buf);
-#endif
- break;
- }
-
- 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
-ParseDeviceControl(dw) /* Parse the x commands */
- DviWidget dw;
-{
- char str[20], str1[50];
- int c, n;
- extern int LastPage, CurrentPage;
-
- 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/xditview/xdit.bm b/contrib/groff/xditview/xdit.bm
deleted file mode 100644
index 67b9c8a..0000000
--- a/contrib/groff/xditview/xdit.bm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define xdit_width 32
-#define xdit_height 32
-static 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/xditview/xdit_mask.bm b/contrib/groff/xditview/xdit_mask.bm
deleted file mode 100644
index f34a4f8..0000000
--- a/contrib/groff/xditview/xdit_mask.bm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define xdit_mask_width 32
-#define xdit_mask_height 32
-static 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/xditview/xditview.c b/contrib/groff/xditview/xditview.c
deleted file mode 100644
index e836cf5..0000000
--- a/contrib/groff/xditview/xditview.c
+++ /dev/null
@@ -1,594 +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 */
-
-#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 <signal.h>
-
-#include "Dvi.h"
-
-#include "xdit.bm"
-#include "xdit_mask.bm"
-#include "stdio.h"
-
-extern FILE *popen();
-extern void exit();
-
-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[] = {
- {"printCommand", "PrintCommand", XtRString, sizeof(char*),
- offset(print_command), XtRString, NULL},
- {"filename", "Filename", XtRString, sizeof(char*),
- offset(filename), 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[] = {
-{"-page", "*dvi.pageNumber", XrmoptionSepArg, NULL},
-{"-backingStore", "*dvi.backingStore", XrmoptionSepArg, NULL},
-{"-resolution", "*dvi.resolution", XrmoptionSepArg, NULL},
-{"-printCommand", ".printCommand", XrmoptionSepArg, NULL},
-{"-filename", ".filename", XrmoptionSepArg, NULL},
-{"-noPolyText", "*dvi.noPolyText", XrmoptionNoArg, "TRUE"},
-};
-
-static char current_print_command[1024];
-
-static char current_file_name[1024];
-static FILE *current_file;
-
-/*
- * Report the syntax for calling xditview.
- */
-
-static
-Syntax(call)
- 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 (), SetPageNumber ();
-static Widget toplevel, paned, viewport, dvi;
-static Widget page;
-static Widget simpleMenu;
-
-static void NextPage(), PreviousPage(), SelectPage(), OpenFile(), Quit();
-static void Print();
-
-static struct menuEntry {
- char *name;
- void (*function)();
-} menuEntries[] = {
- "nextPage", NextPage,
- "previousPage", PreviousPage,
- "selectPage", SelectPage,
- "print", Print,
- "openFile", OpenFile,
- "quit", Quit,
-};
-
-static void NextPageAction(), PreviousPageAction(), SelectPageAction();
-static void OpenFileAction(), QuitAction();
-static void AcceptAction(), CancelAction();
-static void PrintAction();
-static void RerasterizeAction();
-
-XtActionsRec xditview_actions[] = {
- "NextPage", NextPageAction,
- "PreviousPage", PreviousPageAction,
- "SelectPage", SelectPageAction,
- "Print", PrintAction,
- "OpenFile", OpenFileAction,
- "Rerasterize", RerasterizeAction,
- "Quit", QuitAction,
- "Accept", AcceptAction,
- "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(argc, argv)
- int argc;
- char **argv;
-{
- char *file_name = 0;
- int 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)
- 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,
- xdit_bits, xdit_width, xdit_height));
-
- XtSetArg (topLevelArgs[1], XtNiconMask,
- XCreateBitmapFromData (XtDisplay (toplevel),
- XtScreen(toplevel)->root,
- 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 (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 (number_string)
-char *number_string;
-{
- SetPageNumber (atoi(number_string));
-}
-
-static int hadFile = 0;
-
-static void
-NewFile (name)
-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 = 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];
-
-ResetMenuEntry (entry)
- Widget entry;
-{
- Arg arg[1];
-
- XtSetArg (arg[0], XtNpopupOnEntry, entry);
- XtSetValues (XtParent(entry) , arg, (Cardinal) 1);
-}
-
-/*ARGSUSED*/
-
-static void
-NextPage (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- NextPageAction();
- ResetMenuEntry (entry);
-}
-
-static void
-NextPageAction ()
-{
- Arg args[1];
- int number;
-
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- SetPageNumber (number+1);
-}
-
-/*ARGSUSED*/
-
-static void
-PreviousPage (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- PreviousPageAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-PreviousPageAction ()
-{
- Arg args[1];
- int number;
-
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- SetPageNumber (number-1);
-}
-
-/* ARGSUSED */
-
-static void
-SelectPage (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- SelectPageAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-SelectPageAction ()
-{
- MakePrompt (toplevel, "Page number", SelectPageNumber, "");
-}
-
-
-static void
-DoPrint (name)
- char *name;
-{
- FILE *print_file;
-#ifdef SIGNALRETURNSINT
- int (*handler)();
-#else
- void (*handler)();
-#endif
- /* 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()
-{
- 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);
-}
-
-/* ARGSUSED */
-
-static void
-Print (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- PrintAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-PrintAction ()
-{
- if (current_print_command[0])
- strcpy (fileBuf, current_print_command);
- else
- fileBuf[0] = '\0';
- MakePrompt (toplevel, "Print command:", DoPrint, fileBuf);
-}
-
-
-/* ARGSUSED */
-
-static void
-OpenFile (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- OpenFileAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-OpenFileAction ()
-{
- 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 (entry, closure, data)
- Widget entry;
- caddr_t closure, data;
-{
- QuitAction ();
-}
-
-static void
-QuitAction ()
-{
- exit (0);
-}
-
-Widget promptShell, promptDialog;
-void (*promptfunction)();
-
-/* ARGSUSED */
-static
-void CancelAction (widget, event, params, num_params)
- Widget widget;
- XEvent *event;
- String *params;
- Cardinal *num_params;
-{
- if (promptShell) {
- XtSetKeyboardFocus(toplevel, (Widget) None);
- XtDestroyWidget(promptShell);
- promptShell = (Widget) 0;
- }
-}
-
-static
-void AcceptAction (widget, event, params, num_params)
- Widget widget;
- XEvent *event;
- String *params;
- Cardinal *num_params;
-{
- (*promptfunction)(XawDialogGetValueString(promptDialog));
- CancelAction (widget, event, params, num_params);
-}
-
-MakePrompt(centerw, prompt, func, def)
-Widget centerw;
-char *prompt;
-void (*func)();
-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, (caddr_t) 0);
- XawDialogAddButton(promptDialog, "cancel", NULL, (caddr_t) 0);
- valueWidget = XtNameToWidget (promptDialog, "value");
- if (valueWidget) {
- XtSetArg (valueArgs[0], 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;
-}
-
-/* For DviChar.c */
-
-char *xmalloc(n)
- int n;
-{
- return XtMalloc(n);
-}
-
-/*
-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/xditview/xtotroff.c b/contrib/groff/xditview/xtotroff.c
deleted file mode 100644
index 97cac0a..0000000
--- a/contrib/groff/xditview/xtotroff.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * xtotroff
- *
- * convert X font metrics into troff font metrics
- */
-
-#include <X11/Xlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include "XFontName.h"
-#include "DviChar.h"
-
-#ifdef X_NOT_STDC_ENV
-char *malloc();
-#else
-#include <stdlib.h>
-#endif
-
-#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)
-
-Display *dpy;
-int groff_flag = 0;
-unsigned resolution = 75;
-unsigned point_size = 10;
-
-int charExists (fi, c)
- XFontStruct *fi;
- int c;
-{
- XCharStruct *p;
-
- if (c < fi->min_char_or_byte2 || 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. */
-
-CanonicalizeFontName (font_name, canon_font_name)
- char *font_name, *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;
-}
-
-int FontNamesAmbiguous(font_name, names, count)
-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;
-}
-
-MapFont (font_name, troff_name)
- char *font_name;
- char *troff_name;
-{
- XFontStruct *fi;
- int count;
- char **names;
- FILE *out;
- 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++) {
- char *name = DviCharName (char_map,c,0);
- if (charExists (fi, c) && (groff_flag || name)) {
-
- wid = charWidth (fi, c);
-
- fprintf (out, "%s\t%d",
- name ? name : "---",
- wid);
- if (groff_flag) {
- int param[5];
- 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 usage(prog)
- char *prog;
-{
- fprintf (stderr,
- "usage: %s [-g] [-r resolution] [-s pointsize] FontMap\n",
- prog);
- exit (1);
-}
-
-
-/* For use by DviChar.c */
-
-char *xmalloc(n)
-int n;
-{
- char *p = malloc(n);
- if (!p) {
- fprintf(stderr, "Out of memory\n");
- exit(1);
- }
- return p;
-}
-
-main (argc, argv)
- char **argv;
-{
- char troff_name[1024];
- char font_name[1024];
- char line[1024];
- char *a, *b, c;
- int position;
- FILE *map;
- int opt;
- extern int optind;
- extern char *optarg;
-
- while ((opt = getopt(argc, argv, "gr:s:")) != EOF) {
- switch (opt) {
- case 'g':
- groff_flag = 1;
- break;
- case 'r':
- sscanf(optarg, "%u", &resolution);
- break;
- case 's':
- sscanf(optarg, "%u", &point_size);
- break;
- default:
- usage(argv[0]);
- }
- }
- if (argc - optind != 1)
- usage(argv[0]);
-
- 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);
- }
- position = 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);
- ++position;
- }
- exit (0);
-}
-
-/*
-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:
-*/
OpenPOWER on IntegriCloud