aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@FreeBSD.org>2000-12-05 18:49:44 +0000
committerRuslan Ermilov <ru@FreeBSD.org>2000-12-05 18:49:44 +0000
commitc8d1b47c7fde3a8a3f5530bd5e3939bba340ab4b (patch)
tree19d4540966cb92612af25d5154efcc062eefb5c5 /contrib
parente159d2bd86eea9be07f2695f85b3543935869a3b (diff)
downloadsrc-c8d1b47c7fde3a8a3f5530bd5e3939bba340ab4b.tar.gz
src-c8d1b47c7fde3a8a3f5530bd5e3939bba340ab4b.zip
Virgin import of FSF groff v1.16.1
Notes
Notes: svn path=/vendor/groff/dist/; revision=69626
Diffstat (limited to 'contrib')
-rw-r--r--contrib/groff/BUG-REPORT24
-rw-r--r--contrib/groff/ChangeLog1404
-rw-r--r--contrib/groff/FDL358
-rw-r--r--contrib/groff/INSTALL16
-rw-r--r--contrib/groff/INSTALL.gen9
-rw-r--r--contrib/groff/MORE.STUFF89
-rw-r--r--contrib/groff/Makefile2
-rw-r--r--contrib/groff/Makefile.ccpg11
-rw-r--r--contrib/groff/Makefile.comm106
-rw-r--r--contrib/groff/Makefile.cpg11
-rw-r--r--contrib/groff/Makefile.in303
-rw-r--r--contrib/groff/Makefile.init2
-rw-r--r--contrib/groff/Makefile.lib10
-rw-r--r--contrib/groff/Makefile.man1
-rw-r--r--contrib/groff/NEWS171
-rw-r--r--contrib/groff/PROBLEMS261
-rw-r--r--contrib/groff/PROJECTS2
-rw-r--r--contrib/groff/README43
-rw-r--r--contrib/groff/README.WIN3268
-rw-r--r--contrib/groff/REVISION1
-rw-r--r--contrib/groff/TODO9
-rw-r--r--contrib/groff/VERSION2
-rw-r--r--contrib/groff/aclocal.m4198
-rw-r--r--contrib/groff/addftinfo/Makefile.sub11
-rw-r--r--contrib/groff/afmtodit/Makefile.sub4
-rw-r--r--contrib/groff/afmtodit/afmtodit.man33
-rw-r--r--contrib/groff/afmtodit/afmtodit.pl4
-rwxr-xr-xcontrib/groff/configure589
-rw-r--r--contrib/groff/configure.in25
-rw-r--r--contrib/groff/devX100-12/CB4
-rw-r--r--contrib/groff/devX100-12/CBI4
-rw-r--r--contrib/groff/devX100-12/CI4
-rw-r--r--contrib/groff/devX100-12/CR4
-rw-r--r--contrib/groff/devX100-12/HB4
-rw-r--r--contrib/groff/devX100-12/HBI4
-rw-r--r--contrib/groff/devX100-12/HI4
-rw-r--r--contrib/groff/devX100-12/HR4
-rw-r--r--contrib/groff/devX100-12/NB4
-rw-r--r--contrib/groff/devX100-12/NBI4
-rw-r--r--contrib/groff/devX100-12/NI4
-rw-r--r--contrib/groff/devX100-12/NR4
-rw-r--r--contrib/groff/devX100-12/TB4
-rw-r--r--contrib/groff/devX100-12/TBI4
-rw-r--r--contrib/groff/devX100-12/TI4
-rw-r--r--contrib/groff/devX100-12/TR4
-rw-r--r--contrib/groff/devX100/CB4
-rw-r--r--contrib/groff/devX100/CBI4
-rw-r--r--contrib/groff/devX100/CI4
-rw-r--r--contrib/groff/devX100/CR4
-rw-r--r--contrib/groff/devX100/HB4
-rw-r--r--contrib/groff/devX100/HBI4
-rw-r--r--contrib/groff/devX100/HI4
-rw-r--r--contrib/groff/devX100/HR4
-rw-r--r--contrib/groff/devX100/NB4
-rw-r--r--contrib/groff/devX100/NBI4
-rw-r--r--contrib/groff/devX100/NI4
-rw-r--r--contrib/groff/devX100/NR4
-rw-r--r--contrib/groff/devX100/TB4
-rw-r--r--contrib/groff/devX100/TBI4
-rw-r--r--contrib/groff/devX100/TI4
-rw-r--r--contrib/groff/devX100/TR4
-rw-r--r--contrib/groff/devX75-12/CB4
-rw-r--r--contrib/groff/devX75-12/CBI4
-rw-r--r--contrib/groff/devX75-12/CI4
-rw-r--r--contrib/groff/devX75-12/CR4
-rw-r--r--contrib/groff/devX75-12/HB4
-rw-r--r--contrib/groff/devX75-12/HBI4
-rw-r--r--contrib/groff/devX75-12/HI4
-rw-r--r--contrib/groff/devX75-12/HR4
-rw-r--r--contrib/groff/devX75-12/NB4
-rw-r--r--contrib/groff/devX75-12/NBI4
-rw-r--r--contrib/groff/devX75-12/NI4
-rw-r--r--contrib/groff/devX75-12/NR4
-rw-r--r--contrib/groff/devX75-12/TB4
-rw-r--r--contrib/groff/devX75-12/TBI4
-rw-r--r--contrib/groff/devX75-12/TI4
-rw-r--r--contrib/groff/devX75-12/TR4
-rw-r--r--contrib/groff/devX75/CB4
-rw-r--r--contrib/groff/devX75/CBI4
-rw-r--r--contrib/groff/devX75/CI4
-rw-r--r--contrib/groff/devX75/CR4
-rw-r--r--contrib/groff/devX75/HB4
-rw-r--r--contrib/groff/devX75/HBI4
-rw-r--r--contrib/groff/devX75/HI4
-rw-r--r--contrib/groff/devX75/HR4
-rw-r--r--contrib/groff/devX75/NB4
-rw-r--r--contrib/groff/devX75/NBI4
-rw-r--r--contrib/groff/devX75/NI4
-rw-r--r--contrib/groff/devX75/NR4
-rw-r--r--contrib/groff/devX75/TB4
-rw-r--r--contrib/groff/devX75/TBI4
-rw-r--r--contrib/groff/devX75/TI4
-rw-r--r--contrib/groff/devX75/TR4
-rw-r--r--contrib/groff/devascii/R.proto2
-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/B13
-rw-r--r--contrib/groff/devdvi/BI15
-rw-r--r--contrib/groff/devdvi/CW6
-rw-r--r--contrib/groff/devdvi/CWI160
-rw-r--r--contrib/groff/devdvi/DESC.in4
-rw-r--r--contrib/groff/devdvi/H7
-rw-r--r--contrib/groff/devdvi/HB7
-rw-r--r--contrib/groff/devdvi/HI7
-rw-r--r--contrib/groff/devdvi/I15
-rw-r--r--contrib/groff/devdvi/Makefile.sub2
-rw-r--r--contrib/groff/devdvi/R13
-rw-r--r--contrib/groff/devdvi/S1
-rw-r--r--contrib/groff/devdvi/SA94
-rw-r--r--contrib/groff/devdvi/SB2
-rw-r--r--contrib/groff/devdvi/generate/Makefile64
-rw-r--r--contrib/groff/devdvi/generate/cork.map4
-rw-r--r--contrib/groff/devdvi/generate/texb.map2
-rw-r--r--contrib/groff/devdvi/generate/texi.map2
-rw-r--r--contrib/groff/devdvi/generate/texr.map2
-rw-r--r--contrib/groff/devdvi/generate/texsy.map2
-rw-r--r--contrib/groff/devdvi/generate/textt.map4
-rw-r--r--contrib/groff/devhtml/CB202
-rw-r--r--contrib/groff/devhtml/CBI202
-rw-r--r--contrib/groff/devhtml/CI202
-rw-r--r--contrib/groff/devhtml/CR202
-rw-r--r--contrib/groff/devhtml/DESC2
-rw-r--r--contrib/groff/devhtml/HB202
-rw-r--r--contrib/groff/devhtml/HBI202
-rw-r--r--contrib/groff/devhtml/HI202
-rw-r--r--contrib/groff/devhtml/HR202
-rw-r--r--contrib/groff/devhtml/NB202
-rw-r--r--contrib/groff/devhtml/NBI202
-rw-r--r--contrib/groff/devhtml/NI202
-rw-r--r--contrib/groff/devhtml/NR202
-rw-r--r--contrib/groff/devhtml/TB202
-rw-r--r--contrib/groff/devhtml/TBI202
-rw-r--r--contrib/groff/devhtml/TI202
-rw-r--r--contrib/groff/devhtml/TR202
-rw-r--r--contrib/groff/devlatin1/R.proto8
-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/ALBB21
-rw-r--r--contrib/groff/devlj4/ALBR21
-rw-r--r--contrib/groff/devlj4/AOB8
-rw-r--r--contrib/groff/devlj4/AOI20
-rw-r--r--contrib/groff/devlj4/AOR19
-rw-r--r--contrib/groff/devlj4/CB7
-rw-r--r--contrib/groff/devlj4/CBI7
-rw-r--r--contrib/groff/devlj4/CI7
-rw-r--r--contrib/groff/devlj4/CLARENDON7
-rw-r--r--contrib/groff/devlj4/CORONET7
-rw-r--r--contrib/groff/devlj4/CR7
-rw-r--r--contrib/groff/devlj4/GB21
-rw-r--r--contrib/groff/devlj4/GBI20
-rw-r--r--contrib/groff/devlj4/GI21
-rw-r--r--contrib/groff/devlj4/GR23
-rw-r--r--contrib/groff/devlj4/LGB7
-rw-r--r--contrib/groff/devlj4/LGI7
-rw-r--r--contrib/groff/devlj4/LGR7
-rw-r--r--contrib/groff/devlj4/MARIGOLD7
-rw-r--r--contrib/groff/devlj4/Makefile.sub2
-rw-r--r--contrib/groff/devlj4/OB24
-rw-r--r--contrib/groff/devlj4/OBI21
-rw-r--r--contrib/groff/devlj4/OI22
-rw-r--r--contrib/groff/devlj4/OR27
-rw-r--r--contrib/groff/devlj4/TB24
-rw-r--r--contrib/groff/devlj4/TBI26
-rw-r--r--contrib/groff/devlj4/TI29
-rw-r--r--contrib/groff/devlj4/TR22
-rw-r--r--contrib/groff/devlj4/UB24
-rw-r--r--contrib/groff/devlj4/UBI24
-rw-r--r--contrib/groff/devlj4/UCB20
-rw-r--r--contrib/groff/devlj4/UCBI19
-rw-r--r--contrib/groff/devlj4/UCI22
-rw-r--r--contrib/groff/devlj4/UCR21
-rw-r--r--contrib/groff/devlj4/UI70
-rw-r--r--contrib/groff/devlj4/UR26
-rw-r--r--contrib/groff/devlj4/generate/Makefile41
-rw-r--r--contrib/groff/devlj4/generate/text.map3
-rw-r--r--contrib/groff/devps/AB467
-rw-r--r--contrib/groff/devps/ABI467
-rw-r--r--contrib/groff/devps/AI468
-rw-r--r--contrib/groff/devps/AR468
-rw-r--r--contrib/groff/devps/BMB455
-rw-r--r--contrib/groff/devps/BMBI455
-rw-r--r--contrib/groff/devps/BMI455
-rw-r--r--contrib/groff/devps/BMR455
-rw-r--r--contrib/groff/devps/CB455
-rw-r--r--contrib/groff/devps/CBI455
-rw-r--r--contrib/groff/devps/CI455
-rw-r--r--contrib/groff/devps/CR455
-rw-r--r--contrib/groff/devps/HB467
-rw-r--r--contrib/groff/devps/HBI467
-rw-r--r--contrib/groff/devps/HI465
-rw-r--r--contrib/groff/devps/HNB467
-rw-r--r--contrib/groff/devps/HNBI467
-rw-r--r--contrib/groff/devps/HNI465
-rw-r--r--contrib/groff/devps/HNR465
-rw-r--r--contrib/groff/devps/HR465
-rw-r--r--contrib/groff/devps/Makefile.sub6
-rw-r--r--contrib/groff/devps/NB675
-rw-r--r--contrib/groff/devps/NBI813
-rw-r--r--contrib/groff/devps/NI754
-rw-r--r--contrib/groff/devps/NR739
-rw-r--r--contrib/groff/devps/PB464
-rw-r--r--contrib/groff/devps/PBI464
-rw-r--r--contrib/groff/devps/PI464
-rw-r--r--contrib/groff/devps/PR462
-rw-r--r--contrib/groff/devps/S374
-rw-r--r--contrib/groff/devps/SS374
-rw-r--r--contrib/groff/devps/TB467
-rw-r--r--contrib/groff/devps/TBI468
-rw-r--r--contrib/groff/devps/TI468
-rw-r--r--contrib/groff/devps/TR469
-rw-r--r--contrib/groff/devps/ZCMI469
-rw-r--r--contrib/groff/devps/ZD374
-rw-r--r--contrib/groff/devps/ZDR374
-rw-r--r--contrib/groff/devps/generate/Makefile33
-rwxr-xr-xcontrib/groff/devps/generate/afmname2
-rw-r--r--contrib/groff/devps/generate/textmap3
-rw-r--r--contrib/groff/devps/symbol.afm3
-rw-r--r--contrib/groff/devps/symbolmap3
-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/doc/Makefile98
-rw-r--r--contrib/groff/doc/grnexmpl.g3250
-rw-r--r--contrib/groff/doc/grnexmpl.me86
-rw-r--r--contrib/groff/doc/groff.texinfo7960
-rw-r--r--contrib/groff/doc/homepage.ms162
-rw-r--r--contrib/groff/doc/meref.me10
-rw-r--r--contrib/groff/doc/pic.ms2
-rw-r--r--contrib/groff/doc/texinfo.tex5999
-rw-r--r--contrib/groff/eqn/Makefile.sub48
-rw-r--r--contrib/groff/eqn/box.cc2
-rw-r--r--contrib/groff/eqn/eqn.man58
-rw-r--r--contrib/groff/eqn/eqn_tab.h67
-rw-r--r--contrib/groff/eqn/lex.cc4
-rw-r--r--contrib/groff/eqn/main.cc18
-rw-r--r--contrib/groff/eqn/neqn.sh2
-rw-r--r--contrib/groff/eqn/other.cc8
-rw-r--r--contrib/groff/eqn/over.cc2
-rw-r--r--contrib/groff/eqn/special.cc2
-rw-r--r--contrib/groff/eqn/text.cc2
-rw-r--r--contrib/groff/gendef.sh6
-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.sub2
-rw-r--r--contrib/groff/grodvi/dvi.cc12
-rw-r--r--contrib/groff/grodvi/grodvi.man11
-rw-r--r--contrib/groff/groff/Makefile.sub6
-rw-r--r--contrib/groff/groff/groff.cc62
-rw-r--r--contrib/groff/groff/groff.man147
-rw-r--r--contrib/groff/groff/pipeline.c188
-rw-r--r--contrib/groff/grog/Makefile.sub8
-rw-r--r--contrib/groff/grog/grog.man8
-rw-r--r--contrib/groff/grog/grog.pl20
-rw-r--r--contrib/groff/grog/grog.sh12
-rw-r--r--contrib/groff/grohtml/ChangeLog143
-rw-r--r--contrib/groff/grohtml/Makefile.sub8
-rw-r--r--contrib/groff/grohtml/TODO294
-rw-r--r--contrib/groff/grohtml/design.ms27
-rw-r--r--contrib/groff/grohtml/grohtml.man40
-rw-r--r--contrib/groff/grohtml/html.cc3132
-rw-r--r--contrib/groff/grohtml/html.h8
-rw-r--r--contrib/groff/grohtml/html_chars.h27
-rw-r--r--contrib/groff/grohtml/ordered_list.h8
-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.sub2
-rw-r--r--contrib/groff/grolj4/grolj4.man67
-rw-r--r--contrib/groff/grolj4/lj4.cc19
-rw-r--r--contrib/groff/grops/Makefile.sub11
-rw-r--r--contrib/groff/grops/grops.man39
-rw-r--r--contrib/groff/grops/ps.cc39
-rw-r--r--contrib/groff/grops/psrm.cc62
-rw-r--r--contrib/groff/grotty/Makefile.sub2
-rw-r--r--contrib/groff/grotty/grotty.man59
-rw-r--r--contrib/groff/grotty/tty.cc53
-rw-r--r--contrib/groff/hpftodit/Makefile.sub2
-rw-r--r--contrib/groff/hpftodit/hpftodit.cc41
-rw-r--r--contrib/groff/hpftodit/hpftodit.man6
-rw-r--r--contrib/groff/include/Makefile.sub32
-rw-r--r--contrib/groff/include/driver.h3
-rw-r--r--contrib/groff/include/font.h3
-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/lib.h47
-rw-r--r--contrib/groff/include/nonposix.h137
-rw-r--r--contrib/groff/include/posix.h4
-rw-r--r--contrib/groff/indxbib/Makefile.sub16
-rw-r--r--contrib/groff/indxbib/indxbib.cc64
-rw-r--r--contrib/groff/indxbib/indxbib.man5
-rw-r--r--contrib/groff/libbib/Makefile.sub16
-rw-r--r--contrib/groff/libbib/index.cc40
-rw-r--r--contrib/groff/libbib/linear.cc16
-rw-r--r--contrib/groff/libbib/search.cc5
-rw-r--r--contrib/groff/libdriver/Makefile.sub8
-rw-r--r--contrib/groff/libdriver/input.cc29
-rw-r--r--contrib/groff/libdriver/printer.cc2
-rw-r--r--contrib/groff/libgroff/Makefile.sub93
-rw-r--r--contrib/groff/libgroff/errarg.cc4
-rw-r--r--contrib/groff/libgroff/font.cc35
-rw-r--r--contrib/groff/libgroff/fontfile.cc2
-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.c2
-rw-r--r--contrib/groff/libgroff/illegal.cc19
-rw-r--r--contrib/groff/libgroff/itoa.c2
-rw-r--r--contrib/groff/libgroff/nametoindex.cc2
-rw-r--r--contrib/groff/libgroff/searchpath.cc13
-rw-r--r--contrib/groff/libgroff/string.cc2
-rw-r--r--contrib/groff/libgroff/tmpfile.cc120
-rw-r--r--contrib/groff/lkbib/Makefile.sub2
-rw-r--r--contrib/groff/lkbib/lkbib.cc4
-rw-r--r--contrib/groff/lkbib/lkbib.man5
-rw-r--r--contrib/groff/lookbib/Makefile.sub2
-rw-r--r--contrib/groff/lookbib/lookbib.cc4
-rw-r--r--contrib/groff/lookbib/lookbib.man5
-rw-r--r--contrib/groff/man/Makefile.sub9
-rw-r--r--contrib/groff/man/groff.man2785
-rw-r--r--contrib/groff/man/groff_char.man18
-rw-r--r--contrib/groff/man/groff_font.man37
-rw-r--r--contrib/groff/man/groff_out.man9
-rw-r--r--contrib/groff/man/roff.man520
-rwxr-xr-xcontrib/groff/mkinstalldirs40
-rw-r--r--contrib/groff/mm/ChangeLog35
-rw-r--r--contrib/groff/mm/Makefile.sim44
-rw-r--r--contrib/groff/mm/Makefile.sub35
-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.man187
-rw-r--r--contrib/groff/mm/groff_mmse.man10
-rw-r--r--contrib/groff/mm/mm/0.MT2
-rw-r--r--contrib/groff/mm/mm/4.MT6
-rw-r--r--contrib/groff/mm/mm/5.MT2
-rw-r--r--contrib/groff/mm/mm/ms.cov2
-rw-r--r--contrib/groff/mm/mm/se_ms.cov2
-rw-r--r--contrib/groff/mm/mmroff.man48
-rwxr-xr-xcontrib/groff/mm/mmroff.pl134
-rw-r--r--contrib/groff/mm/tmac.m138
-rw-r--r--contrib/groff/mm/tmac.mse5
-rw-r--r--contrib/groff/nroff/Makefile.sub3
-rw-r--r--contrib/groff/nroff/nroff.man62
-rwxr-xr-xcontrib/groff/nroff/nroff.sh127
-rw-r--r--contrib/groff/pfbtops/Makefile.sub2
-rw-r--r--contrib/groff/pfbtops/pfbtops.c10
-rw-r--r--contrib/groff/pic/Makefile.sub32
-rw-r--r--contrib/groff/pic/lex.cc14
-rw-r--r--contrib/groff/pic/main.cc4
-rw-r--r--contrib/groff/pic/object.cc14
-rw-r--r--contrib/groff/pic/pic.cc4838
-rw-r--r--contrib/groff/pic/pic.h4
-rw-r--r--contrib/groff/pic/pic.man160
-rw-r--r--contrib/groff/pic/pic.y11
-rw-r--r--contrib/groff/pic/pic_tab.h130
-rw-r--r--contrib/groff/pic/troff.cc5
-rw-r--r--contrib/groff/refer/Makefile.sub23
-rw-r--r--contrib/groff/refer/label.cc244
-rw-r--r--contrib/groff/refer/label.y12
-rw-r--r--contrib/groff/refer/ref.cc2
-rw-r--r--contrib/groff/refer/refer.cc8
-rw-r--r--contrib/groff/refer/refer.man5
-rw-r--r--contrib/groff/soelim/Makefile.sub2
-rw-r--r--contrib/groff/soelim/soelim.cc19
-rw-r--r--contrib/groff/soelim/soelim.man6
-rw-r--r--contrib/groff/src/devices/grotty/grotty.man59
-rw-r--r--contrib/groff/src/libs/libgroff/illegal.cc19
-rw-r--r--contrib/groff/src/preproc/eqn/neqn.sh2
-rw-r--r--contrib/groff/src/roff/groff/groff.man147
-rw-r--r--contrib/groff/src/roff/nroff/nroff.man62
-rwxr-xr-xcontrib/groff/src/roff/nroff/nroff.sh127
-rw-r--r--contrib/groff/tbl/Makefile.sub11
-rw-r--r--contrib/groff/tbl/main.cc11
-rw-r--r--contrib/groff/tbl/table.cc24
-rwxr-xr-xcontrib/groff/test-groff29
-rw-r--r--contrib/groff/tfmtodit/Makefile.sub2
-rw-r--r--contrib/groff/tfmtodit/tfmtodit.cc24
-rw-r--r--contrib/groff/tfmtodit/tfmtodit.man28
-rw-r--r--contrib/groff/tmac/Makefile.sub51
-rw-r--r--contrib/groff/tmac/eqnrc5
-rw-r--r--contrib/groff/tmac/groff_man.man370
-rw-r--r--contrib/groff/tmac/groff_markup.man319
-rw-r--r--contrib/groff/tmac/groff_tmac.man420
-rw-r--r--contrib/groff/tmac/tmac.X2
-rw-r--r--contrib/groff/tmac/tmac.an600
-rw-r--r--contrib/groff/tmac/tmac.arkup175
-rw-r--r--contrib/groff/tmac/tmac.doc2
-rw-r--r--contrib/groff/tmac/tmac.dvi14
-rw-r--r--contrib/groff/tmac/tmac.html6
-rw-r--r--contrib/groff/tmac/tmac.latin14
-rw-r--r--contrib/groff/tmac/tmac.lbp13
-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.pspic21
-rw-r--r--contrib/groff/tmac/tmac.s3
-rw-r--r--contrib/groff/tmac/tmac.safer3
-rw-r--r--contrib/groff/tmac/tmac.tty5
-rw-r--r--contrib/groff/tmac/tmac.tty-char12
-rw-r--r--contrib/groff/tmac/troffrc10
-rw-r--r--contrib/groff/tmac/troffrc-end6
-rw-r--r--contrib/groff/troff/Makefile.sub51
-rw-r--r--contrib/groff/troff/TODO4
-rw-r--r--contrib/groff/troff/charinfo.h6
-rw-r--r--contrib/groff/troff/column.cc4
-rw-r--r--contrib/groff/troff/dictionary.cc2
-rw-r--r--contrib/groff/troff/div.cc35
-rw-r--r--contrib/groff/troff/env.cc217
-rw-r--r--contrib/groff/troff/env.h1
-rw-r--r--contrib/groff/troff/input.cc373
-rw-r--r--contrib/groff/troff/node.cc94
-rw-r--r--contrib/groff/troff/node.h3
-rw-r--r--contrib/groff/troff/reg.cc25
-rw-r--r--contrib/groff/troff/request.h2
-rw-r--r--contrib/groff/troff/token.h6
-rw-r--r--contrib/groff/troff/troff.man124
-rw-r--r--contrib/groff/win32-diffs3049
-rw-r--r--contrib/groff/xditview/ChangeLog36
-rw-r--r--contrib/groff/xditview/Dvi.c10
-rw-r--r--contrib/groff/xditview/DviChar.c6
-rw-r--r--contrib/groff/xditview/Imakefile.in99
-rw-r--r--contrib/groff/xditview/README4
-rw-r--r--contrib/groff/xditview/xtotroff.c12
467 files changed, 71850 insertions, 18666 deletions
diff --git a/contrib/groff/BUG-REPORT b/contrib/groff/BUG-REPORT
index b3f325c83718..293101e34e58 100644
--- a/contrib/groff/BUG-REPORT
+++ b/contrib/groff/BUG-REPORT
@@ -20,18 +20,18 @@ OS:
[The operating system you are using. For example, `SunOS 4.1.1']
COMPILER:
-[The compiler you are used to compile groff. For example, `g++ 1.40.3']
+[The compiler you are used to compile groff. For example, `g++ 1.40.3']
INPUT FILES:
[Include all the files necessary to reproduce the problem that are not
part of the standard groff distribution. This includes font
description files, DESC files and macro files (with the exception of
-the -ms and -mm macros: we have them). Send them as a shell archive
-or as a uuencoded, compressed tar file.
+the -ms and -mm macros: we have them). Send them as a shell archive or
+as a uuencoded, compressed tar file.
-It's easier for us if you can provide an example that doesn't depend
-on any macro package, but obviously if you're reporting a problem with
-a macro package that won't be possible. Also a short example is more
+It's easier for us if you can provide an example that doesn't depend on
+any macro package, but obviously if you're reporting a problem with a
+macro package that won't be possible. Also a short example is more
convenient than a long one, but don't worry if you can't find a short
example. Don't say something like ``any file that X'': Always send a
definite example.]
@@ -45,11 +45,11 @@ the macros.]
DESCRIPTION OF INCORRECT BEHAVIOUR:
[What goes wrong when that command line is run? For example, `gtroff
gets a segmentation fault', or `The output looks bad because the bar
-over the x is too long and is too far over to the left.' If you get
-an error message, include it here without modification: Don't edit it
-to make it more readable.]
+over the x is too long and is too far over to the left.' If you get an
+error message, include it here without modification: Don't edit it to
+make it more readable.]
SUGGESTED FIX [optional]:
-[If you can suggest a fix for the problem, include a context diff
-here. But don't delay sending in a bug report in the hope of finding
-a fix. Guesses about the cause of the bug are not usually helpful.]
+[If you can suggest a fix for the problem, include a context diff here.
+But don't delay sending in a bug report in the hope of finding a fix.
+Guesses about the cause of the bug are not usually helpful.]
diff --git a/contrib/groff/ChangeLog b/contrib/groff/ChangeLog
index 6578156537b0..897767e919dd 100644
--- a/contrib/groff/ChangeLog
+++ b/contrib/groff/ChangeLog
@@ -1,3 +1,1383 @@
+2000-07-31 Werner LEMBERG <wl@gnu.org>
+
+ Preparing release 1.16.1.
+
+ * REVISION: Revision number set to 1.
+ * MORE.STUFF: Added info about port to DOS.
+ * NEWS, win32-diffs: Updated.
+
+ * src/include/nonposix.h: Remove first line -- this file is used
+ in C also.
+
+ * Makefile.in (dist): Delete Imakefile earlier to avoid a soft
+ link to it.
+
+2000-07-30 Werner LEMBERG <wl@gnu.org>
+
+ * doc/texinfo.tex: Update to latest version.
+
+2000-06-28 Paul Eggert <eggert@twinsun.com>
+
+ * Makefile.in (ENVSETUP): Don't assume POSIX make semantics for
+ commands that fail. Don't assume that "export a=b" is valid shell
+ syntax. This is needed for Solaris 2.5.1.
+
+ * src/libs/libgroff/tmpfile.cc, src/utils/indxbib/indxbib.cc: Fix
+ comment about missing Solaris headers.
+
+ * PROBLEMS: Add section about problems with Sun Make and VPATH.
+
+2000-06-25 Werner LEMBERG <wl@gnu.org>
+
+ * src/devics/grodvi/dvi.cc: Replace _setmode() (for MSC) with
+ SET_BINARY().
+
+ * src/include/posix.h: Use HAVE_UNISTD instead of _MSC_VER.
+
+ * win32-diffs: Updated.
+ * README.WIN32: Added CRs to make all Windows editors happy.
+
+ * src/roff/troff/node.cc: Added WIFSIGNALED() macro (copied from
+ src/roff/groff/pipeline.c).
+
+2000-06-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * src/roff/grog/Makefile.sub (grog): Prepend `-e' to
+ $(SH_SCRIPT_SED_CMD), for the case where its value is empty.
+
+2000-06-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * src/utils/tfmtodit/tfmtodit.cc: #include nonposix.h.
+ (tfm::load, gf::load): Open tfm and gf files in binary mode: these
+ are binary files.
+ (main): Support non-Posix systems with several different styles of
+ slash characters in file names.
+
+ * src/utils/pfbtops/pfbtops.c: #include nonposix.h.
+ (main) [SET_BINARY]: Switch stdin into binary mode.
+
+ * src/utils/indxbib/indxbib.cc: #include nonposix.h.
+ (main): Support file names with several possible slash-type
+ characters, as given by DIR_SEPS[] in nonposix.h.
+ (main) [__MSDOS__]: If renaming the temporary index file fails
+ because it has more than one dot in its trunk, replace the dot
+ with an underscore and try again.
+ (do_file): Use FOPEN_RB instead of "r". Skip every CR before a
+ Newline.
+ [__MSDOS__ || _MSC_VER]: Stop at the first ^Z character.
+
+ * src/utils/hpftodit/hpftodit.cc: #include nonposix.h.
+ (File::File): Open the input file in binary mode. Strip CR
+ characters from each CR-LF pair.
+ (xbasename): Support file names with several possible slash-type
+ characters, as given by DIR_SEPS[] in nonposix.h.
+
+ * src/include/Makefile.sub (HDRS): Add nonposix.h.
+
+ * src/roff/troff/node.cc [HAVE_UNISTD_H]: Include <unistd.h>.
+ (WIFEXITED, WEXITSTATUS, WTERMSIG, WIFSTOPPED, WSTOPSIG)
+ [!_POSIX_VERSION]: Define for traditional Unix systems.
+ (real_output_file::real_output_file): Remove the MSVC-specific
+ call to popen, use instead POPEN_WT, appropriately defined on
+ nonposix.h. #include nonposix.h.
+ (real_output_file::~real_output_file): Remove the MSVC-specific
+ call to pclose, a suitable macro is now defined on nonposix.h.
+ Use the portable macros WIFEXITED, WIFSIGNALED, WTERMSIG, WSTOPSIG
+ and WEXITSTATUS instead of assuming traditional Unix
+ interpretation of the status returned by pclose.
+
+ * src/roff/troff/input.cc (pipe_source): Remove the MSVC-specific
+ call to popen, use POPEN_RT instead (appropriately defined on
+ nonposix.h). #include nonposix.h.
+ (ps_bbox_request): Open the PostScript file in binary mode.
+ Close the file after processing it.
+ (getpid) [_MSC_VER]: Remove; a suitable macro is now defined on
+ nonposix.h.
+
+ * src/roff/groff/pipeline.c (run_pipeline) [__MSDOS__ || _WIN32]:
+ A version of run_pipeline that doesn't use `fork'.
+ (signal_catcher) [__MSDOS__ || _WIN32]: New function.
+ (system_shell_name, system_shell_dash_c)
+ (is_system_shell) [__MSDOS__ || _WIN32]: New functions, to hide
+ the ugliness of testing DOS/Windows file names for equality, and
+ support both stock shells and ports of Unix shells.
+
+ * src/roff/groff/groff.cc: #include nonposix.h.
+ (BSHELL): Definition moved to nonposix.h.
+ (main): Use PATH_SEP[0] instead of literal ':'. Use BSHELL_DASH_C
+ instead of a literal "-c".
+ (xbasename): Support file names with several possible slash-type
+ characters, as given by DIR_SEPS[] in nonposix.h.
+ (possible_command::print): Use BSHELL_DASH_C and IS_BSHELL instead
+ of literal strings.
+
+ * src/preproc/soelim/soelim.cc: #include nonposix.h.
+ (do_file): Use IS_ABSOLUTE instead of testing for a literal '/'.
+
+ * src/preproc/pic/Makefile.sub (YTABH): Change pic.tab.h to
+ pic_tab.h.
+
+ * src/preproc/pic/lex.cc: Change pic.tab.h to pic_tab.h.
+
+ * src/preproc/eqn/Makefile.sub (YTABH): Rename eqn.tab.h to
+ eqn_tab.h.
+
+ * src/preproc/eqn/lex.cc: #include eqn_tab.h, not eqn.tab.h.
+
+ * src/libs/libgroff/tmpfile.cc (DEFAULT_TMPDIR) [P_tmpdir]: If
+ P_tmpdir is defined, use it instead of the literal "/tmp".
+ (remove_tmp_files, add_tmp_file): New functions.
+ (xtmpfile): Record temporary files and register an atexit function
+ to delete them explicitly, instead of relying on the OS to do
+ that, which doesn't work on non-Unix systems.
+
+ * src/libs/libgroff/searchpath.cc: #include nonposix.h.
+ (search_path::search_path): Use PATH_SEP instead of a literal
+ colon.
+ (search_path::command_line_dir): Ditto.
+ (search_path::open_file): Use IS_ABSOLUTE, PATH_SEP and DIR_SEPS,
+ to support non-Posix systems.
+
+ * src/libc/libbib/search.cc: #include nonposix.h.
+ (search_list::add_file): Open the file in binary mode.
+
+ * src/libs/libbib/linear.cc: #include nonposix.h.
+ (file_buffer::load): Remove \r characters preceding \n from the
+ loaded buffer.
+
+ * src/libs/libbib/index.cc: #include nonposix.h.
+ (make_index_search_item): Open index_filename in O_BINARY mode.
+ (index_search_item_iterator::get_tag): Ditto. Remove \r
+ characters before \n characters.
+ (index_search_item::check_files): Open files in binary mode.
+ (index_search_item::munge_filename): Support DOS-style file names
+ with backslashes and drive letters, use IS_ABSOLUTE.
+
+ * src/devices/grops/ps.cc: #include nonposix.h.
+ (main) [SET_BINARY]: Switch stdout to binary mode.
+
+ * src/devices/grolj4/lj4.cc: #include nonposix.h.
+ (main) [SET_BINARY]: Switch stdout to binary mode.
+
+ * src/devices/grolbp/lbp.cc: #include nonposix.h
+ (fill_pattern) [SET_BINARY]: Switch stdout to binary mode.
+
+ * src/devices/grodvi/dvi.cc: #include nonposix.h.
+ [_MSC_VER]: Remove inclusion of Windows-specific headers (done by
+ nonposix.h).
+ (main) [SET_BINARY]: Switch stdout to binary mode.
+ [_MSC_VER]: Remove an explicit call to _setmode.
+
+ * src/include/nonposix.h: New file.
+
+ * Makefile.in (ENVSETUP): New variable, to set up case-sensitive
+ operation when building with DJGPP.
+ ($(TARGETS), dot, $(LIBDIRS), $(CPROGDIRS), $(CCPROGDIRS))
+ ($(DEVDIRS), $(TTYDEVDIRS), $(INCDIRS), $(OTHERDIRS)): Use
+ ENVSETUP.
+
+ * Makefile.comm: mv y.tab.[ch] to y_tab.[ch], to make it work on
+ MS-DOS.
+ (.man.n): Replace `;' with `|', since FONTPATH, MACROPATH,
+ etc. can include a semi-colon on DOS/Windows.
+ (depend.temp): Use depend1.temp instead of depend.temp1, to
+ prevent files from overerwiting each other on 8+3 filesystems.
+
+ * gendef.sh (t): Change definition to work with DOS/Windows.
+
+ doc/groff.texinfo: Apart of some typo corrections, I also changed
+ some index entris, to make them more non-ambiguous, and also put
+ @ignore around some parts that are not yet written, to allow the
+ Info output be readable.
+
+2000-06-10 Gael Queri <gqueri@mail.dotcom.fr>
+
+ Replaced specific checks for function declarations with a generic
+ routine taken from GNU bfd.
+
+ * aclocal.m4 (GROFF_NEED_DECLARATION): New function.
+ GROFF_PUTENV, GROFF_POPEN, GROFF_PCLOSE, GROFF_HYPOT: Removed.
+ * configure.in: Use it.
+ * src/devices/grolbp/lbp.cc, src/include/lib.h,
+ src/preproc/grn/hgraph.cc, src/preproc/pic/pic.h,
+ src/roff/groff/groff.cc: Use it.
+ * Makefile.in, configure: Updated.
+
+2000-06-07 Paco Andres Verdu <pandres@dragonet.es>
+
+ * src/devides/grolbp/lbp.h: Removed unused variables.
+
+2000-05-31 Keith Thompson <kst@sdsc.edu>
+
+ * src/devices/grolbp/lbp.cc (set_papersizes): Add declaration of
+ strncasecmp().
+
+2000-05-31 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4 (GROFF_SRAND): New function to test the return value
+ of srand() -- at least SunOS 4.1.3 uses `int' instead of `void'.
+ * configure.in: Use it.
+ * src/preproc/pic/pic.y, src/preproc/pic/pic.cc: Use it.
+ * configure, Makefile.in: Updated.
+
+ * configure.in: Add test for strncasecmp().
+ * src/include/lib.h: Use it.
+
+2000-05-29 Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>
+
+ * src/preproc/grn/Makefile.sub: Add MLIB.
+
+2000-05-29 Nix <nix@esperi.demon.co.uk>
+
+ * Makefile.in: Use @datadir@ and @mandir@ appropriately.
+
+2000-05-29 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/grog/Makefile.sub, src/roff/grog/grog.sh: Add `@g@'.
+
+ * PROBLEMS: Small update.
+
+ * src/devices/grolbp/lbp.cc: Various small fixes.
+
+2000-05-28 Keith Thompson <kst@sdsc.edu>
+
+ * src/roff/nroff/nroff.sh: Fix main loop syntax.
+
+ * src/utils/indxbib/indxbib.cc: Add declaration of mkstemp().
+
+2000-05-25 Werner LEMBERG <wl@gnu.org>
+
+ * man/roff.man: Removed unused macro.
+
+2000-05-24 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.in (dist): Remove src/xditview/Imakefile explicitly.
+ This is needed e.g. if you do
+ `make distclean; ./configure; make dist'.
+
+Version 1.16 released
+=====================
+
+2000-05-23 Werner LEMBERG <wl@gnu.org>
+
+ Adding font CWI (constant width italic) to devdvi.
+
+ * font/devdvi/CWI: New file.
+ * font/devdvi/generate/Makefile: Add generating rule.
+ * font/devdvi/DESC.in, font/devdvi/Makefile.sub, win32-diffs,
+ tmac/tmac.dvi: Use it.
+ * NEWS: Announce it.
+
+ * font/devlj4/*: Regenerated (only adding kernings for `cq' glyph).
+ * font/devlj4/generate/Makefile: Cosmetic changes only.
+
+ * man/groff.man: Removed most of the redundant description of
+ special characters (which is in groff_char.man). Added font
+ translation CB->CR for devdvi. Other minor fixes.
+
+ * tmac/tmac.dvi: Improved appearance of \(co (copyright) and \(rg
+ (registered) symbols.
+
+2000-05-22 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile: Added rule for creating info files.
+
+ * font/devdvi/*: Added kernings for `cq' glyph. Updated to latest
+ AMS font metrics.
+ * font/devdvi/generate/Makefile: Fixed dependencies.
+
+ * font/devps/*: Regenerated. Heavy changes for Bookman and
+ NewCentury Schoolbook!
+ * font/devps/generate/afmname: Will now run with GNU awk.
+ * font/devps/generate/textmap: Added forgotten `cq' glyph name.
+ * font/devps/generate/Makefile: Cosmetic changes only.
+
+2000-05-21 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tmac.an: Added a new command line option `-rSxx' (`xx' can be
+ 10, 11, or 12) to support output with 11pt and 12pt base font sizes.
+ `.SS' now produces a heading with a smaller size than `.SH'.
+ Completely formatted.
+ * doc/groff.texinfo, tmac/groff_man.man, NEWS: Document it.
+
+ * man/groff.man: Improved table appearance. Use of `eo' request
+ to reduce number of doubled backslashes in macro definitions.
+ Replacing `\e' with `\(rs'. Other minor fixes.
+
+ * src/preproc/tbl/main.cc: Insert HTML table end tag before `lf'
+ to have correct line number.
+
+ * INSTALL: Small improvement.
+
+2000-05-20 Bernd Warken <bwarken@mayn.de>
+
+ * man/roff.man, tmac/groff_tmac.man: Updates (with corrections by
+ WL).
+
+2000-05-19 Bernd Warken <bwarken@mayn.de>
+
+ * man/groff.man: Complete update (with a lot of corrections by WL).
+
+2000-05-18 Werner LEMBERG <wl@gnu.org>
+
+ Adding `cq' (PS name `quoteright') glyph name as an alias for "'".
+
+ * font/*/*: Implement it.
+ * man/groff_char.man, NEWS: Document it.
+
+ * src/include/unix.h: Removed. It isn't used.
+
+ * doc/groff.texinfo: Slight improvements.
+
+2000-05-17 Werner LEMBERG <wl@gnu.org>
+
+ * README, win32-diffs: Small fixes and improvements.
+
+2000-05-16 Werner LEMBERG <wl@gnu.org>
+
+ * FDL: New file (the Free Documentation License version 1.1).
+
+ * doc/groff.texinfo: Added many start-up values for gtroff.
+ Some structural improvements of the source code.
+
+2000-05-15 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc: Added small comment about troffrc-end.
+ * src/roff/troff/troff.man: Added info about troffrc-end.
+
+2000-05-14 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.in (EXTRADIRS): Fix typos.
+ (dist): Handle deletion of old .tar.gz file correctly.
+ (DISTDIRS): Include all tty output devices.
+
+ * doc/groff.texinfo: Adding more cross references; countless other
+ fixes.
+
+2000-05-13 Werner LEMBERG <wl@gnu.org>
+
+ * MORE.STUFF: Added Robert Marks's utilities.
+
+2000-05-12 Werner LEMBERG <wl@gnu.org>
+
+ Added win32 port contributed by Blake McBride
+ <blake@florida-software.com>.
+
+ * README.WIN32, win32-diffs: New files.
+ * NEWS: Updated.
+
+ * src/preproc/grn/hgraph.cc (HGSetBrush): Replace `%lf' with `%f'.
+ (tmove, tmove2): Added parentheses to avoid compiler warnings.
+ (change): Removed unused variables.
+
+ * src/preproc/grn/main.cc (main, conv): Removed unused variables.
+ (savebounds): Changed return value from `int' to `void'.
+ * src/preproc/grn/hdb.cc: Ditto.
+
+ * src/devices/grolbp/lbp.cc (lbp_printer::draw): Removed superfluous
+ final backslash in comment to avoid compiler warning.
+
+ * src/utils/pfbtops/pfbtops.c: Added `getopt.h'.
+
+ * doc/groff.texinfo: More fixes.
+
+2000-05-11 OKAZAKI Tetsurou <okazaki@be.to>
+
+ * tmac/tmac.doc: Documentation fix.
+
+2000-05-11 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Reading the source code shows up a lot of
+ omissions and incorrect data... More conversion to @Deffn macros.
+
+2000-05-10 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/reg.cc (number_value_to_ascii): Remove ASCII
+ dependency.
+
+ * src/roff/troff/request.h: Removing unused `no_break_flag'.
+
+2000-05-09 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff.man, man/roff.man, tmac/groff_tmac.man: Minor
+ improvements.
+
+ * doc/groff.texinfo: Extended history section. More conversion to
+ @Deffn macros. More .tr documentation.
+
+2000-05-07 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Completed tab section. Added info about
+ fields.
+
+2000-05-06 Mike MacIsaac <mikemac@us.ibm.com>
+
+ * PROBLEMS: Describe configure script fix for OS/390 Unix.
+
+2000-05-05 Werner LEMBERG <wl@gnu.org>
+
+ * font/devdvi/DESC.in: Change size 11pt to 10.95pt (as used in
+ LaTeX 2e).
+ * NEWS: Document it.
+
+ * man/troff.man: Minor optical improvements.
+
+2000-05-03 Werner LEMBERG <wl@gnu.org>
+
+ Adding `dq' (PS name `quotedbl') glyph name as an alias for `"'.
+
+ * font/*/*: Implement it.
+ * man/groff_char.man, NEWS: Document it.
+
+2000-05-02 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/groff_tmac.man, man/groff.man, man/roff.man: Fixing @MANxEXT@
+ expansion.
+ * NEWS: Document the three new man pages.
+
+ * aclocal.m4 (GROFF_CXX_CHECK): Removing obsolete AC_C_CROSS call.
+ * configure: Updated.
+
+ * font/devcp1047/R.proto: Fixing fatal bug (a missing `"' character).
+
+2000-05-01 Werner LEMBERG <wl@gnu.org>
+
+ Added grap support to grog.
+
+ * src/roff/grog/grog.sh, src/roff/grog/grog.pl: Implement it.
+ * src/roff/grog/grog.man: Document it.
+
+ * doc/groff.texinfo, NEWS: Add info about grap support.
+
+ Add new man pages comptributed by Bernd Warken <bwarken@mayn.de>
+ (with slight fixes by me).
+
+ * tmac/groff_tmac.man: New file documenting tmac mechanism.
+ * tmac/Makefile.sub: Add groff_tmac.man.
+ * man/roff.man: New file giving overview of roff system.
+ * man/troff.man: A short reference of troff.
+ * man/Makefile.sub: Add roff.man and troff.man.
+
+2000-04-30 Werner LEMBERG <wl@gnu.org>
+
+ Added grap support to groff.
+
+ * src/roff/groff/groff.cc: Implement it.
+ * src/roff/groff/groff.man: Document it.
+
+ * src/devices/grotty/grotty.man: Add cp1047 device.
+ * src/preproc/eqn/eqn.man, src/preproc/eqn/neqn.sh, tmac/eqnrc:
+ Ditto.
+ * src/roff/groff/groff.man: Ditto.
+ * src/roff/nroff/nroff.sh, src/roff/nroff/nroff.man: Ditto.
+ * doc/groff.texinfo: Ditto.
+
+ * tmac/troffrc: Fix mapping of latin-1 char 160 (non-breakable space)
+ for cp1047.
+
+2000-04-29 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_char.man: Add `pc' glyph.
+ * tmac/tmac.latin1: Replacing `md' glyph with `pc'.
+ * tmac/tmac.tty: Add `pc' glyph.
+ * tmac/tmac.tty-char: Use/add `pc' glyph. Don't call tmac.latin1 if
+ we use cp1047 output device.
+
+ * Makefile.in, aclocal.m4: Don't build utf8 on EBCDIC hosts since
+ there are still hardcoded latin1->unicode values in utf8's font
+ definition files.
+ * configure: Updated.
+ * NEWS: Minor clarification. Updated.
+
+ * PROBLEMS: Formatted. Added info about C++ fix pack for OS/390
+ Unix.
+
+2000-04-28 Werner LEMBERG <wl@gnu.org>
+
+ Adding EBCDIC code page 1047.
+
+ * font/devcp1047/R.proto, font/devcp1047/Makefile.sub,
+ font/devcp1047/DESC.proto: New files.
+
+ * aclocal.m4 (GROFF_EBCDIC): Introduce TTYDEVDIRS which can be
+ either ascii/latin1 or cp1047.
+ * Makefile.in: Use it.
+ * configure: Updated.
+
+ Replacing and/or adding `md' (mathdot) glyph with `pc'
+ (periodcentered) in all text fonts.
+
+ * font/*/*: Change it.
+
+2000-04-27 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4 (GROFF_OS390): Fixing compiler flags.
+
+ * configure.in: Add check for strings.h.
+ * src/include/driver.h: Use HAVE_STRINGS_H.
+ * src/devices/grolbp/lpb.cc: Remove string.h.
+
+ * src/include/groff-getopt.h: New file. It will be used instead of
+ getopt.h (to be included in lib.h) to avoid endless problems with
+ picky C++ compilers.
+ * src/include/lib.h: Use groff-getopt.h.
+ * src/include/Makefile.sub: Updated.
+
+ * configure: Updated.
+ * Makefile.in: Updated.
+
+ * NEWS: Mention EBCDIC support.
+
+2000-04-26 Werner LEMBERG <wl@gnu.org>
+
+ * TODO: Some additions.
+
+2000-04-25 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man, doc/groff.texinfo: Fixing documentation
+ of mso request.
+
+2000-04-23 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man: Minor fixes.
+
+2000-04-22 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man, doc/groff.texinfo, NEWS: Document the
+ `.T' string register and the incompatible definition of the `.T'
+ number register (compared to Unix troff).
+
+ * man/groff_char.man: Add some missing characters.
+ * font/devutf8/NOTES: Update.
+
+2000-04-21 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/htmlindicate.h, src/include/lib.h,
+ src/include/posix.h: Fix copyright.
+
+ * src/include/Makefile.sub: Update.
+
+2000-04-20 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (input_char_description): Removing
+ superfluous space char.
+
+ * tmac/tmac.X: Fix typo \(bq -> \(Bq.
+
+ * doc/groff.texinfo: Document EBCDIC.
+
+2000-04-19 Werner LEMBERG <wl@gnu.org>
+
+ Introducing `shc' as the glyph name for the soft hyphen character.
+
+ * tmac/tmac.tty, tmac/tmac.latin1, tmac/tmac.html,
+ font/devlatin1/R.proto: Use it.
+
+ * NEWS: Updated.
+
+2000-04-18 Werner LEMBERG <wl@gnu.org>
+
+ * src/devices/grops/ps.cc (ps_printer::flush_sbuf): Removing
+ dependency on ASCII order.
+
+2000-04-16 Sandor BARANY <S.Barany@infosys.tuwien.ac.at>
+
+ * src/libs/libgroff/illegal.c: Added EBCDIC table.
+ * src/roff/troff/input.cc: Added adaptation to EBCDIC.
+
+ * src/preproc/refer/refer.cc, src/roff/troff/env.cc: Minor changes
+ to increase portability.
+
+2000-04-15 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4: Added GROFF_EBCDIC and GROFF_OS390 tests.
+ Redefined AC_OUTPUT_MAKE_DEFS to replace ASCII character `012' with
+ the generic `\n' if under OS/390 Unix.
+
+ * configure.in: Call GROFF_EBCDIC and GROFF_OS390.
+
+ * configure: Regenerated.
+
+2000-04-14 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: More conversions to @Deffn.
+
+2000-04-12 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tmac.psfig: Fix incorrect use of `&' operator by replacing it
+ with `:'.
+
+ * src/roff/nroff/nroff.man: Add note about tmac.tty-char.
+
+2000-04-10 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: More conversions to @Deffn.
+
+2000-04-08 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libgroff/{getopt.c,getopt1.c}, src/include/getopt.h:
+ Updated to latest version (glibc 2.1.3).
+
+2000-04-07 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile (clean): Include more index files.
+ Add rule texinfo->dvi.
+
+2000-04-05 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Added new index `op' for operators. More
+ info on end of sentence characters. More use of @Deffn.
+
+2000-03-30 Werner LEMBERG <wl@gnu.org>
+
+ * */*.man: Adding a note that a whitespace can be inserted between
+ a command line option and its parameter -- we are using GNU getopt.
+
+ * src/roff/groff/groff.man: Add example of `-m mandoc'.
+
+2000-03-28 Werner LEMBERG <wl@gnu.org>
+
+ Correct anachronism of calling the man macro file with `-man'
+ instead of `-m man' etc.
+
+ * tmac/tmac.man, tmac/tmac.mandoc, tmac/tmac.markup, tmac/tmac.mdoc,
+ tmac/tmac.me, tmac/tmac.ms: New files tmac.m<package> which simply
+ load tmac.<package>.
+
+ * tmac/Makefile.sub: Updated. Take care of $(tmac_an_prefix) etc.
+
+ * NEWS: Updated.
+
+ * doc/groff.texinfo: Updated.
+
+ * tmac/groff_man.man: Copyright added.
+
+2000-03-27 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Introducing macros `Deffn' and `Defmac' to
+ typeset the request resp. escape name with a tt font -- due to a
+ bug in texinfo.tex it is necessary to use the `-e' switch with
+ texi2dvi.
+
+ Improving info about usage of groff units.
+
+ Other minor fixes.
+
+2000-03-20 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Added section about man macro package
+ (I've basically taken groff_man.man). Introducing new indices `ma'
+ for macros/strings and `gl' for glyph names. Other minor fixes.
+
+ * tmac/groff_man.man: Fixed some typos.
+
+2000-03-19 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Removed all occurrences of `you', `we', etc.
+ Other minor fixes.
+
+ * doc/texinfo.tex: New file.
+
+2000-03-18 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Improved section on number registers. Other
+ minor updates.
+
+2000-03-16 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/groff/groff.man: Added info about grolbp. Make nicer
+ synopsis.
+
+ * src/devices/grolbp/grolbp.man, src/roff/nroff/nroff.man,
+ src/devices/grolj4/grlj4.man, src/devices/grops/grops.man,
+ src/preproc/eqn/eqn.man, src/utils/afmtodit/afmtodit.man,
+ src/utils/tfmtodit/tfmtodit.man: Make nicer synopsis.
+
+ * src/preproc/grn/grn.man: Better synopsis; added copyright.
+
+ * src/roff/grog/grog.man: Updated copyright date.
+
+2000-03-14 Francisco Andres Verdu <pandres@dragonet.es>
+
+ * configure.in: Added test for strdup.
+
+ * src/devices/grolbp/lbp.cc: Added a strdup() version in case none
+ is available.
+
+ Replaced dynamic allocation of arrays `[...]' with `new' operator.
+
+ Other minor fixes.
+
+2000-03-12 OKAZAKI Tetsurou <okazaki@be.to>
+
+ * Makefile.comm: Add $(INCLUDES) to $(ALL_CFLAGS).
+
+2000-03-11 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/hdb.cc (DBGetType): Added return value to make
+ compilers silent.
+ * src/preproc/grn/hgraph.cc: Add #ifdef for hypot().
+ * src/include/lib.h: Remove some spaces.
+
+2000-03-10 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libgroff/tmpfile.cc (xtmptemplate, xtmpfile): Removing
+ initializers from arguments (some compilers don't like this).
+
+2000-03-09 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/libs/libgroff/htmlindicate.cc: Added library file which is now
+ used by pic and eqn to tell grohtml where the graphic regions start
+ and end.
+ * src/libs/libgroff/Makefile.sub: Use it.
+ * src/preproc/eqn/main.cc, src/preproc/pic/troff.cc: Altered to use
+ graphic_start() and graphic_end() from htmlindicate.cc.
+
+2000-03-09 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tmac.safer: Will now work correctly in compatibility mode.
+ * tmac/groff_man.man: More fixes.
+
+2000-03-08 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile: Added texput.log to the `clean' target.
+ * doc/groff.texinfo: Added info about delimiters for escapes.
+
+2000-03-08 Bernd Warken <bwarken@mayn.de>
+
+ * src/preproc/pic/pic.man: Add info on conversion of pic images to
+ other graphic formats.
+
+2000-03-07 OKAZAKI Tetsurou <okazaki@be.to>
+
+ * Makefile.in, contrib/mm/Makefile.sub, src/preproc/eqn/Makefile.sub,
+ src/roff/groff/Makefile.sub, src/roff/nroff/Makefile.sub,
+ src/utils/afmtodit/Makefile.sub: Use $(INSTALL_SCRIPT) for script
+ files.
+
+2000-03-07 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Spelling fixes.
+
+2000-03-06 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/groff_man.man: Completely revised to cover everything in
+ tmac.an.
+
+ * doc/groff.texinfo, src/roff/troff/troff.man: Document evc request.
+ Other minor fixings.
+ * src/roff/troff/env.cc (environment_copy): Improve error message and
+ fix itoa->i_to_a.
+ * src/roff/troff/TODO: Updated.
+
+ * doc/Makefile: Bug fixes -- this is still provisional, though...
+
+ * tmac/eqnrc: Small fixes.
+
+2000-03-05 Abramo Bagnara <abramo@alsa-project.org>
+
+ Adding a request `evc' to copy environments.
+
+ * src/roff/troff/env.cc (environment::copy, environment_copy):
+ Implement it.
+ * src/roff/troff/env.h: Add prototype.
+
+2000-03-05 Francisco Andres Verdu <pandres@dragonet.es>
+
+ Adding strsep() -- Solaris 8 doesn't have it.
+
+ * configure.in: Test it.
+ * src/devices/grolbp/lbp.cc: Add code.
+
+2000-03-05 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/div.cc (macro_diversion::output,
+ top_level_diversion::output): Fixing an incompatibility with
+ original troff: \x'0' updates the .a register also. Thanks to
+ <Andries.Brouwer@cwi.nl> for pointing this out.
+ * doc/groff.texinfo: Document it.
+
+ * Makefile.in: Create Makefile.dep if necessary before calling the
+ submake process to avoid warning about nonexistent file.
+
+ * NEWS, PROJECTS: Updated.
+
+2000-03-04 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/troffrc: Add tmac.lbp.
+
+2000-03-03 Francisco Andres Verdu <pandres@dragonet.es>
+
+ * tmac/tmac.lbp: New file.
+ * src/devices/grolbp/grolbp.man: Add documentation of `lbpname'
+ command.
+
+2000-03-03 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.in: Fixing $(subdir).
+
+ * README, NEWS: Small fixes.
+
+ * test-groff: Adding path to grolbp.
+
+ * configure.in: The (new) file src/xditview/Imakefile.in will be
+ also configured -- it is now possible to build gxditview in a
+ directory different from $srcdir.
+
+2000-03-02 Blake McBride <blake@florida-software.com>
+
+ * src/libs/libgroff/searchpath.cc (open_file): Adapting to WinNT.
+
+ * MORE.STUFF: Added website of bell labs and info about plot2dev.
+
+2000-03-01 Colin Phipps <crp22@cam.ac.uk>
+
+ * src/utils/indxbib/indxbib.cc (main): Use mkstemp() for temporary
+ files.
+
+2000-02-29 Werner LEMBERG <wl@gnu.org>
+
+ Adding GNU getopt to the groff distribution.
+
+ * src/include/getopt.h, src/libs/libgroff/{getopt.c,getopt1.c}:
+ New files.
+ * src/include/Makefile.sub, src/libs/libgroff/Makefile.sub: Update.
+ * aclocal.a4: Remove GROFF_GETOPT function.
+ * configure.in, Makefile.in, PROBLEMS: Update.
+ * src/include/lib.h: Replace getopt tests with getopt.h.
+ * src/devices/grolbp/lpb.cc: Remove inclusion of getopt.h.
+
+ * doc/groff.texinfo: Further checking/updating. Adding more index
+ entries.
+
+ * man/groff_out.man: Fix nroff mode activation (for emacs).
+ * man/groff_font.man: Add missing ligature.
+
+2000-02-28 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Further checking/updating. Adding more index
+ entries.
+
+ * src/devices/grolbp/grolbp.man: Added a comment line at the
+ beginning of the file (similar to shell scripts) which indicates
+ that `tbl' should be used as a preprocessor.
+
+2000-02-27 Blake McBride <blake@florida-software.com>
+
+ Adapting groff to MS Visual C++ 6.0 compiler (tested with
+ Windows NT 4.0). Uses _MSC_VER define where necessary.
+
+ * src/devices/grodvi/dvi.cc: Making stdout a binary stream.
+ * src/devices/grolj4/lj4.cc: Making getopt variables `extern "C"'.
+ * src/devices/grohtml/html.cc, src/devices/grops/ps.cc,
+ src/include/lib.h, src/libs/libgroff/errarg.cc,
+ src/libs/libgroff/itoa.c, src/libs/libgroff/nametoindex.cc,
+ src/preproc/refer/label.y, src/preproc/refer/label.cc,
+ src/roff/groff/pipeline.c, src/roff/troff/column.cc,
+ src/roff/troff/div.cc, src/roff/troff/env.cc,
+ src/roff/troff/input.cc, src/roff/troff/node.cc,
+ src/roff/troff/reg.cc: Renaming itoa() to i_to_a() and iftoa() to
+ if_to_a() to avoid name clashes.
+ * src/include/posix.h: Don't use unistd.h.
+ * src/libs/libgroff/tmpfile.cc: Use `#ifndef...#else...#endif'
+ clause for integrating non-Unix xtmpfile() code.
+ * src/roff/troff/input.cc: Adding `public' keyword to macro_header
+ structure; use "rt" for popen() in pipe_source(); add getpid()
+ dummy function.
+ * src/roff/troff/node.cc: Use special versions of popen() in
+ real_output_file() and pclose() in ~real_output_file().
+
+2000-02-27 Werner LEMBERG <wl@gnu.org>
+
+ Adding a new driver, grolbp, for Canon CAPSL printers (LBP-4 and
+ LBP-8 series laser printers). This code has been contributed by
+ Francisco Andres Verdu <pandres@dragonet.es>.
+
+ * src/devices/grolbp/*: The grolbp output device.
+ * font/devlpb/*: The font description files.
+ * Makefile.in: Add grolpb and devlbp subdirectories.
+
+ * src/devices/grodvi/grodvi.man, src/devices/grolj4/grolj4.man,
+ src/devices/grotty/grotty.man,src/roff/troff/troff.man: Minor
+ typographic fixes.
+
+ * doc/groff.texinfo: Further checking/updating. Adding more index
+ entries.
+
+ * NEWS: Updated.
+
+ * src/devices/grolbp/Makefile.sub: Adding $(srcdir).
+
+ * man/groff_font.man: Adding info about obsolete DESC keywords.
+ * src/devices/grolj4/grolj4.man: Documenting additional DESC
+ keywords.
+
+2000-02-26 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/grn.man: Added info about the gremlin file format
+ (contributed by Daniel Senderowicz <daniel@synchrods.com>).
+
+2000-02-25 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/main.cc: Allow values of `narrow' parameter and
+ friends to be non-integer.
+
+ * src/preproc/grn/grn.man: Document it.
+
+ * doc/groff.texinfo: Further checking/updating. Adding more index
+ entries.
+
+2000-02-24 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/main.cc: Introduce BASE_THICKNESS, defining
+ line thicknesses to be integer multiples of this value.
+
+ * src/preproc/grn/grn.man: Commenting out the -s option -- the
+ corresponding code doesn't work (yet).
+
+ * doc/groff.texinfo: Further checking/updating. Adding more index
+ entries.
+
+2000-02-23 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/{main.cc, hgraph.cc}: Using point units to
+ specify line thickness instead of base units. The new default
+ values are now 0.15,pt 0.45pt, and 0.75pt for thin, middle, and
+ thick lines respectively.
+
+ Removed unused variable `prevval'.
+
+ * src/preproc/grn/grn.man: Updated.
+
+2000-02-22 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/main.cc: Slight formatting.
+
+ * src/roff/groff/groff.man: Formatting fix.
+ * src/preproc/grn/grn.man: Ditto.
+
+ * src/roff/grog/grog.pl: Fixing two embarassing bugs.
+
+ * doc/groff.texinfo: Further checking/updating.
+
+2000-02-21 Werner LEMBERG <wl@gnu.org>
+
+ * README, INSTALL, PROJECT, PROBLEMS, BUGREPORT: Updated.
+
+ * test-groff: Added grn subdir to path.
+
+ * doc/groff.texinfo: Some restructing and other small improvements.
+
+ * src/roff/groff/groff.cc (help): Fixed info string.
+
+2000-02-20 Werner LEMBERG <wl@gnu.org>
+
+ * doc/meref.me: Fix description of .GS request.
+
+ * src/roff/troff/troff.man: Fixing typo.
+
+ Adding the `grn' preprocessor for gremlin graphic files.
+
+ * src/preproc/grn/*: This is the Berkeley distribution written by
+ David Slattengren and Barry Roitblat, adapted to groff by Daniel
+ Senderowicz and Werner Lemberg.
+
+ * doc/grnexampl.{me,g}: A sample for grn.
+
+ * Makefile.in: Added subdirectory entry for grn.
+
+ * src/roff/groff/groff.cc: Added support for grn. It can be now
+ called with the switch `-g'.
+
+ * src/roff/groff/groff.man: Updated.
+
+ * src/roff/grog/grog.{man,pl,sh}: Updated.
+
+ * NEWS: Updated.
+
+2000-02-11 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/include/lib.h: Added xtmptemplate and made xtmpfile
+ parametrically polymorphic.
+
+ * src/libs/libgroff/tmpfile.cc: Implemented xtmptemplate
+ and the alterations to xtmpfile.
+ xtmpfile can be requested to return the filename created
+ and asked not to unlink the temp file. The default behaviour
+ if parameters are absent is exactly the same as before.
+
+2000-02-11 Abramo Bagnara <abramo@alsa-project.org>
+
+ A new request `length' is available which returns the length of a
+ string in a number register:
+
+ * src/roff/troff/input.cc (length_macro): Implement it.
+ * src/roff/troff/input.cc (init_input_requests): Register it.
+
+2000-02-11 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo, src/roff/troff/troff.man: Add documentation
+ of the `substring' request.
+
+ * src/roff/troff/troff.man, doc/groff.texinfo: Document `length'
+ request.
+
+ * src/roff/troff/TODO, NEWS: Updated.
+
+2000-02-09 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/groff/groff.man: Added an example.
+
+2000-02-06 Werner LEMBERG <wl@gnu.org>
+
+ I've considerably modified the directory structure of the
+ distribution to get a more vertical layout. For example, the number
+ of top level directories has been reduced from 42 to 6.
+
+ As a consequence, many changes, especially to the makefiles, were
+ necessary:
+
+ * The makefile variables `top_builddir' and `top_srcdir' have been
+ introduced. Virtually all relative paths have been replaced with
+ absolute ones using these two variables.
+
+ * Dependencies (in the files `Makefile.dep') are no longer part of
+ the distribution. Instead, they are created during a `make install'
+ in the build directory.
+
+ * aclocal.m4 (GROFF_SRCDIR, GROFF_BUILDDIR): Two new functions to
+ make `top_srcdir' and `top_builddir' absolute.
+
+ Some other changes:
+
+ * Man pages no depend on the files `VERSION' and `REVISION'.
+
+ * The added shell script `mkinstalldirs' will replace `mkdir' in
+ almost all cases.
+
+ * VERSION: Version number increased to 1.16.
+
+2000-02-04 Werner LEMBERG <wl@gnu.org>
+
+ * grops/psrm.cc (read_one_of): Fixed pointer incrementation.
+
+ * Makefile.in: Removed $(tmac_m) since it is no longer needed
+ (after an update of the mm stuff).
+
+ * troff/Makefile.sub (majorminor.cc): Fix dependencies.
+
+2000-02-03 Werner LEMBERG <wl@gnu.org>
+
+ The .psbb request will now also accept Mac PS images (i.e. using LF
+ as the EOL character).
+
+ * troff/input.cc (ps_get_line): New function, taken from psrm.cc
+ (with slight modifications).
+ * troff/input.cc (do_ps_file): Use it.
+
+ * test-groff: Add grohtml and grolj4 output devices to PATH.
+
+2000-01-30 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS, MORE.STUFF: Updated.
+
+2000-01-30 Cary D. Renzema <caryr@dollar.mxim.com>
+
+ Add the `srand' command to pic.
+
+ * pic/lex.cc, pic/pic.y: Implement it.
+ * pic/pic.man: Document it.
+ * pic/pic.cc, pic/pic.tab.h: Regenerated (with yacc).
+
+2000-01-30 Werner LEMBERG <wl@gnu.org>
+
+ Add a new request `.psbb'. This does exactly what the external
+ program psbb did. It scans a PostScript image file for a
+ %%BoundingBox comment and extracts the bounding box values (in
+ PostScript units) which are then stored in the four new (read-only)
+ number registers `llx', `lly', `urx', and `ury'.
+
+ This will allow the usage of the .PSPIC macro without worrying
+ about unsafe behaviour of groff, i.e., it will work without the
+ `-U' switch of groff.
+
+ * troff/input.cc: Implement it.
+ * tmac/tmac.pspic: Use it.
+ * troff/troff.man, grops/grops.man, NEWS: Document it.
+ * psbb/*, Makefile.in: Remove it since it is no longer needed.
+
+ This is bloody C code simply adapted from psbb.c! Any improvements
+ welcome.
+
+2000-01-29 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_font.man: Minor clarifications.
+
+ * NEWS: Updated.
+
+2000-01-28 Werner LEMBERG <wl@gnu.org>
+
+ * afmtodit/afmtodit.pl: Use new `--' comment delimiter.
+
+2000-01-28 Gaius Mulley <gaius@glam.ac.uk>
+
+ * man/groff_font.man: Brought up to date regarding tcommand
+ extensions.
+ * libgroff/font.cc: Handle everything after `--' as a comment
+ in the font files.
+ * devps/*: Added comment delimiter inside devps font files.
+
+2000-01-28 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tmac.arkup, tmac/groff_markup.man: Replace \fC...\fR with
+ \fC...\fP (which now works as expected).
+
+ * troff/troff.man: Fix typo.
+
+2000-01-27 Gaius Mulley <gaius@glam.ac.uk>
+
+ Completed the pass_filenames implementation in troff.
+
+ * libdriver/input.cc: Will read the new `F' tcommand.
+ * troff/node.cc, troff/node.h: Will issue the new `F' tcommand.
+ * troff/input.cc: Use it.
+
+2000-01-26 Werner LEMBERG <wl@gnu.org>
+
+ * troff/env.cc (set_font): Fix the behaviour of \fP. The previous
+ font will now be updated even if an invalid font is selected.
+
+2000-01-24 Werner LEMBERG <wl@gnu.org>
+
+ * doc/homepage.ms: Updated for new tmac.arkup.
+
+ * tmac/tmac.html: Disable line breaks after hyphen-like characters.
+
+ * tmac/tmac.arkup: Cleanup.
+
+ Added `\&' to .HTML macro to `leave vertical mode', so to say.
+
+ Removed obsolete .LINK macro completely.
+
+ The macros .URL, .FTP, and .MAILTO now accept a third argument which
+ will be immediately appended to the second argument (to be used with
+ punctuation, for example).
+
+ Disabled .CDFTP macro temporarily for security reasons.
+
+ * tmac/groff_markup.man: Complete revision for latest changes in
+ tmac.arkup -- note that it does not yet format correctly with
+ grohtml :-(
+
+2000-01-23 Bruno Haible <haible@clisp.cons.org>
+
+ * nroff/nroff.sh: Accept -Tutf8 option and pass it through.
+ * devutf8/R.proto: Add mappings for wp, lh, rh.
+ * devutf8/NOTES: Updated.
+
+2000-01-23 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Updated version/copyright info.
+
+2000-01-21 Gaius Mulley <gaius@glam.ac.uk>
+
+ Added support for two new directives in device descriptions:
+ `pass_filenames' (to pass the input file name to the output device)
+ and `use_charnames_in_special' (to support e.g. accented characters
+ in the `X' request).
+
+ * include/font.h, troff/charinfo.h: Declare it.
+
+ * libgroff/font.cc, libgroff/fontfile.cc: Set it.
+
+ * devhtml/DESC: Use it.
+
+ * troff/input.cc: New function encoded_char.
+
+ * troff/token.h: Add test for `specialness'.
+
+2000-01-21 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/Makefile.sub: tmac.a4 and tmac.trace have been removed by
+ mistake from the list of files to be installed.
+
+2000-01-18 Werner LEMBERG <wl@gnu.org>
+
+ * README: Added info how to apply patches.
+
+2000-01-15 Jan Echternach <echter@informatik.uni-rostock.de>
+
+ * troff/node.cc (ligature_note::operator delete): Fix g++ warning.
+
+2000-01-15 Gaius Mulley <gaius@glam.ac.uk>
+
+ * troff/input.cc: Add support for troffrc-end.
+
+ * tbl/main.cc: Altered to issue table-start and table-end special
+ characters if using the html device.
+
+ * devhtml/*: Modified font files to incorporate html encoding of
+ characters.
+
+ * tmac/groff_markup.man: New file documenting tmac.arkup.
+
+ * tmac/troffrc-end: New file. This is invoked after all user
+ specified macros. Currently used by the html device to include
+ tmac.html. Thus no need for users to specify -mhtml anymore.
+
+ * tmac/Makefile.sub (NORMALFILES): Add troffrc-end.
+ (MAN7): Add groff_markup.man.
+
+ * tmac/tmac.an, tmac/tmac.html: Small html updates.
+
+ * tmac/troffrc: tmac.arkup will now be called for the html device.
+
+ * libgroff/font.cc, libgroff/font.h: Altered to include reading of
+ extra device specific information about fonts.
+
+ * doc/homepage.ms: New file. It is an example how an HTML home page
+ could look like with grohtml.
+
+ * doc/Makefile: Add homepage.ms. Remove rule for pic.html.
+
+2000-01-12 Bruno Haible <haible@clisp.cons.org>
+
+ * devutf8/R.proto: Add mappings for ti, Fn, st, an. Change mappings
+ of Im, Re.
+
+ * devutf8/NOTES: Updated.
+
+2000-01-08 Bruno Haible <haible@clisp.cons.org>
+
+ * eqn/box.cc, eqn/lex.cc, eqn/other.cc, eqn/over.cc, eqn/special.cc,
+ eqn/text.cc, grodvi/dvi.cc, grops/ps.cc, grops/psrm.cc,
+ libbib/index.cc, libbib/linear.cc, libbib/search.cc,
+ libdriver/printer.cc, libgroff/font.cc, libgroff/string.cc,
+ pic/lex.cc, pic/object.cc, refer/label.y, refer/ref.cc, tbl/main.cc,
+ tbl/table.cc, tfmtodit/tfmtodit.cc, troff/dictionary.cc,
+ troff/div.cc, troff/env.cc, troff/input.cc, troff/node.cc,
+ troff/node.h, troff/reg.cc: Avoid most "g++ -Wall -Wno-sign-compare"
+ warnings.
+
+ * troff/node.cc (bracket_node::copy): Initialize last to NULL.
+
+2000-01-12 Fabrizio Polacco <fab@prosa.it>
+
+ grolj4: Paper size will be searched case-insensitively.
+
+ * include/lib.h: Add check for strcasecmp().
+ * grolj4/li4.cc (lookup_paper_size): Use strcasecmp().
+ * configure.in: Check for strcasecmp().
+
+2000-01-11 Werner LEMBERG <wl@gnu.org>
+
+ * troff/Makefile.sub (majorminor.cc): Fix incorrect path to
+ `REVISION'.
+
+2000-01-10 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.comm, Makefile.in, doc/Makefile: More fixes for the
+ revision scheme.
+
+ Add a new read-only register, `.Y', which contains the groff
+ revision.
+
+ * troff/input.cc (init_input_requests): Define it.
+ * troff/Makefile.sub (majorminor.cc): Define `revision' string.
+ * doc/groff.texinfo, troff/troff.man: Document it.
+
+ * libgroff/Makefile.sub (version.cc): Add definition of
+ `Version_string[]', consisting of `<major>.<minor>.<revision>'
+ * eqn/main.cc, grodvi/dvi.cc, grolj4/lj4.cc, grops/ps.cc,
+ grotty/tty.cc, hpftodit/hpftodit.cc, indxbib/indxbib.cc, pic/main.cc,
+ refer/refer.cc, soelim/soelim.cc, tbl/main.cc, tfmtodit/tfmtodit.cc,
+ troff/input.cc, pfbtops/pfbtops.c: Use it.
+
+2000-01-10 Fabrizio Polacco <fab@prosa.it>
+
+ Add a revision scheme to the groff package.
+
+ * REVISION: New file.
+ * libgroff/Makefile.sub (version.cc): Use it to define
+ `revision_string[]'.
+ * grops/psrm.cc: Use revision_string (converted to an unsigned
+ integer) in constructor of resource_manager.
+
+2000-01-10 Bruno Haible <haible@clisp.cons.org>
+
+ * devutf8/Makefile.sub, devutf8/DESC.proto, devutf8/R.proto: New
+ files.
+ * Makefile.in (DEVDIRS): Add devutf8.
+ * grotty/tty.cc: Include device.h.
+ (glyph): Change type of `code' to `unsigned int'.
+ (tty_printer): New field is_utf8. Constructor takes device argument.
+ (tty_printer::tty_printer): If device if `utf8', set is_utf8.
+ (tty_printer::add_char): Change type of first arg to `unsigned int'.
+ (tty_printer::put_char): New function.
+ (tty_printer::end_page): Use put_char() instead of ::putchar().
+ (make_printer): Pass device to tty_printer constructor.
+ * nroff.sh: Determine default device by calling 'locale'. As a
+ fallback, look at all of $LC_ALL, $LC_CTYPE, $LANG, $LESSCHARSET.
+ Recognize UTF-8 locales.
+ * tmac/eqnrc: Recognize utf8 like latin1.
+ * tmac/troffrc: Device utf8 needs tmac.tty.
+
+2000-01-07 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/Makefile.sub: tmac.a4 and tmac.trace will now be installed.
+
+2000-01-07 Paul Eggert <eggert@twinsun.com>
+
+ Add a new predefined writeable number register, `year',
+ which contains the current year.
+
+ * doc/groff.texinfo, PROBLEMS, troff/troff.man: Document it.
+ * tmac/tmac.s: Use it.
+ * troff/input.cc (init_registers): Initialize it.
+
+2000-01-06 Werner LEMBERG <wl@gnu.org>
+
+ * PROBLEMS: Fixed typo.
+
+2000-01-04 Paul Eggert <eggert@twinsun.com>
+
+ * PROBLEMS: Add Y2k advice for the yr number register.
+
+2000-01-03 Paul Eggert <eggert@twinsun.com>
+
+ * doc/groff.texinfo: Fix Y2k bug in documentation of \n(yr.
+
+2000-01-02 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tmac.arkup: Slight modification of macros to provide better
+ appearance for non-HTML formats.
+
+2000-01-01 Charles Levert <charles@comm.polymtl.ca>
+
+ * soelim/soelim.cc (include_path_append): realloc(NULL, n)
+ does not automatically translate to malloc(n) on all OSes
+ (e.g., SunOS) so do it explicitly. Also, check the returned
+ value.
+
+2000-01-01 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tmac.arkup: Added .LINE macro. Some formatting.
+
+ * Makefile.in: Added $(tmac_m) again since the Makefile in `mm'
+ expects this variable
+
+2000-01-01 Gaius Mulley <gaius@glam.ac.uk>
+
+ * doc/Makefile: Added instructions to create HTML and text
+ versions of some files.
+
+1999-12-31 Werner LEMBERG <wl@gnu.org>
+
+ * Updated INSTALL.gen.
+
+ * tmac/tmac.arkup: Added fixes so that .FTP and .MAILTO works
+ better resp. correctly with non-HTML devices.
+
Version 1.15 released
=====================
@@ -552,16 +1932,16 @@ Sat Jun 10 12:28:16 1995 James Clark <jjc@jclark.com>
Thu May 11 01:07:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
* addftinfo/addftinfo.cc, eqn/delim.cc, eqn/lex.cc, eqn/list.cc,
- grodvi/dvi.cc, groff/groff.cc, grops/ps.cc, grops/psrm.cc,
- grotty/tty.cc, include/ptable.h indxbib/indxbib.cc,
- libbib/index.cc, libbib/linear.cc, libbib/search.cc,
- libdriver/input.cc, libdriver/printer.cc, libgroff/font.cc,
- libgroff/lf.cc, libgroff/nametoindex.cc, libgroff/ptable.cc,
- libgroff/string.cc, lkbib/lkbib.cc, lookbib/lookbib.cc,
- pic/lex.cc, pic/object.cc, pic/pic.y refer/label.y refer/ref.cc,
- refer/refer.cc, refer/token.cc, tbl/main.cc, tbl/table.cc,
- tfmtodit/tfmtodit.cc, troff/dictionary.cc, troff/div.cc,
- troff/env.cc, troff/input.cc, troff/node.cc, troff/symbol.cc:
+ grodvi/dvi.cc, groff/groff.cc, grops/ps.cc, grops/psrm.cc,
+ grotty/tty.cc, include/ptable.h indxbib/indxbib.cc,
+ libbib/index.cc, libbib/linear.cc, libbib/search.cc,
+ libdriver/input.cc, libdriver/printer.cc, libgroff/font.cc,
+ libgroff/lf.cc, libgroff/nametoindex.cc, libgroff/ptable.cc,
+ libgroff/string.cc, lkbib/lkbib.cc, lookbib/lookbib.cc,
+ pic/lex.cc, pic/object.cc, pic/pic.y refer/label.y refer/ref.cc,
+ refer/refer.cc, refer/token.cc, tbl/main.cc, tbl/table.cc,
+ tfmtodit/tfmtodit.cc, troff/dictionary.cc, troff/div.cc,
+ troff/env.cc, troff/input.cc, troff/node.cc, troff/symbol.cc:
Fix 'for' scoping.
Wed Apr 19 21:15:11 1995 James Clark <jjc@jclark.com>
@@ -1082,7 +2462,7 @@ Thu May 27 20:04:59 1993 James Clark (jjc@jclark.com)
functions that are later declared as inline. Don't include inline
specifier in friend declaration.
- * libgroff/lib.h: Declare popen and pclose.
+ * libgroff/lib.h: Declare popen and pclose.
* acgroff.m4 (GROFF_POPEN): New macro.
* configure.in: Call it.
@@ -1176,7 +2556,7 @@ Wed Apr 21 08:47:32 1993 James Clark (jjc at jclark.com)
(file_iterator::~file_iterator, file_iterator::next_file): Use
file_iterator::close.
(file_iterator::backtrace): Say `process' rather than `file' when
- the stream is popened.
+ the stream is popened.
(pipe_source): New function.
(init_input_requests): Bind ".pso" to pipe_source.
diff --git a/contrib/groff/FDL b/contrib/groff/FDL
new file mode 100644
index 000000000000..79aa3726f8df
--- /dev/null
+++ b/contrib/groff/FDL
@@ -0,0 +1,358 @@
+ GNU Free Documentation License
+ Version 1.1, March 2000
+
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The "Document", below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as "you".
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications". You must delete all sections
+entitled "Endorsements."
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http:///www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+
diff --git a/contrib/groff/INSTALL b/contrib/groff/INSTALL
index a27d5a3aff79..0465f4e5890e 100644
--- a/contrib/groff/INSTALL
+++ b/contrib/groff/INSTALL
@@ -2,6 +2,9 @@ To install groff, follow the instructions in the file INSTALL.gen.
This file contains information that supplements those instructions.
+(For instructions how to build groff with DJGPP tools for MS-DOS and
+MS-Windows, see the file arch/djgpp/README.)
+
groff is written in C++, so you will need a C++ compiler. The C++
source files use a suffix of `.cc', so your C++ compiler must be able
to handle this. If you don't already have a C++ compiler, I suggest
@@ -22,14 +25,15 @@ files.) The test-groff script sets up environment variables to allow
groff to run without being installed. The current directory must be
the build directory when the script is run. For example, you could do
- ./test-groff -man -Tascii groff/groff.n | less
+ ./test-groff -man -Tascii src/roff/groff/groff.n | less
-If you want to install gxditview (an X11 previewer), follow the
-instructions in the INSTALL file in the xditview directory.
+If you want to compile and install gxditview (an X11 previewer),
+follow the instructions in the INSTALL file in the src/xditview
+subdirectory.
-To get PostScript versions of the documentation resp. reference files for
-the `me' macros and the `pic' preprocessor, simply say `make' in the
-`doc' subdirectory.
+To get PostScript versions of the documentation resp. reference files
+for the `me' macros and the `pic' preprocessor, simply say `make' in
+the `doc' subdirectory.
If you have problems, read the PROBLEMS file. If this doesn't help
send a bug report using the form in the file BUG-REPORT.
diff --git a/contrib/groff/INSTALL.gen b/contrib/groff/INSTALL.gen
index 95d84c820fb8..50dbe439d099 100644
--- a/contrib/groff/INSTALL.gen
+++ b/contrib/groff/INSTALL.gen
@@ -95,6 +95,11 @@ give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
@@ -162,7 +167,9 @@ operates.
`--quiet'
`--silent'
`-q'
- Do not print messages saying which checks are being made.
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
diff --git a/contrib/groff/MORE.STUFF b/contrib/groff/MORE.STUFF
new file mode 100644
index 000000000000..ef29efc7dc65
--- /dev/null
+++ b/contrib/groff/MORE.STUFF
@@ -0,0 +1,89 @@
+More stuff for groff
+====================
+
+win32
+-----
+
+Here two ports using the gcc compiler and other GNU tools:
+
+ Thomer M. Gil <tmgil@cs.vu.nl>:
+
+ http://www.cs.vu.nl/~tmgil/misc/wingroff.html
+
+ Kees Zeelenberg <c.zeelenberg@hccnet.nl>:
+
+ ftp://ftp.franken.de/pub/win32/develop/gnuwin32/
+ cygwin/porters/Zeelenberg_Kees/B20/index.html
+
+dos
+---
+
+Binaries for Eli Zaretskii's port using the djgpp compiler
+are available from
+
+ ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gro*b.zip
+
+and its mirrors; for installation details please read `arch/djgpp/README'.
+
+grap
+----
+
+An implementation of Kernighan & Bentley's grap language for typesetting
+graphs. Written by Ted Faber <faber@lunabase.org>. The actual version
+can be found at
+
+ http://www.lunabase.org/~faber/Vault/software/grap/
+
+plot2dev
+--------
+
+This utility program can convert plot graphics to either pic or gremlin
+files. It has been written by Richard Murphey <richard-murphey@rice.edu>
+and Daniel Senderowicz <daniel@synchrods.com> (who has added the gremlin
+driver). The actual version can be found as
+
+ ftp://ftp.ffii.org/pub/groff/plot2dev-x.x.tar.gz
+
+miscellaneous
+-------------
+
+. Dr. Robert Hermann's groff gems are available from
+
+ http://www.eas.slu.edu/People/RBHerrmann/GROFF/index.html
+
+ At present there are examples for
+
+ o creating business cards
+ o using groff to make large format posters for presentations
+
+. Robert Marks's collection of useful macros and scripts is available from
+
+ http://www.agsm.edu.au/~bobm/odds+ends/scripts.html
+
+ Description:
+
+ o `polish': Is a sed (= the Unix stream editor) script that does many
+ things to ASCII text. Amongst other things, it breaks lines at new
+ sentences, reduces upper-case acronyms by one point size, adds
+ diacriticals, changes simple quotes into smart quotes, and makes a few
+ simple grammar checks. The best way to see what it does is to run it as
+ a sed script file (or files) on a text file and then compare the output
+ file with the original.
+
+ o `DropCaps' is a troff script which replaces the initial letters of
+ paragraphs immediately after H1 and H2 headings with drop-capitals of
+ specified point size, and automatically flows the text around the new
+ drop cap.
+
+ o `AJM Header' is a set of troff macros used in production of the
+ Australian Journal of Management. They use the Memorandum Macros (mm)
+ of AT&T, and so should be invoked with the UNIX troff -mm flag; they
+ should also work with the GNU troff -mm flag.
+
+documentation
+-------------
+
+Many documents related to the original versions of troff, ditroff, pic, and
+others can be accessed from the following web page:
+
+ http://www.cs.bell-labs.com/cm/cs/cstr.html
diff --git a/contrib/groff/Makefile b/contrib/groff/Makefile
index 5e09c198414b..024f48699bda 100644
--- a/contrib/groff/Makefile
+++ b/contrib/groff/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
diff --git a/contrib/groff/Makefile.ccpg b/contrib/groff/Makefile.ccpg
index ff774ddf3a04..02b5d66bc9a6 100644
--- a/contrib/groff/Makefile.ccpg
+++ b/contrib/groff/Makefile.ccpg
@@ -1,6 +1,10 @@
# Makefile.ccpg
-MAKEFILEPARTS=$(srcdir)/../Makefile.comm ../Makefile.cfg \
- $(srcdir)/Makefile.sub $(srcdir)/../Makefile.ccpg $(srcdir)/Makefile.dep
+MAKEFILEPARTS=\
+ $(top_srcdir)/Makefile.comm \
+ $(top_builddir)/Makefile.cfg \
+ $(srcdir)/Makefile.sub \
+ $(top_srcdir)/Makefile.ccpg \
+ Makefile.dep
all: $(PROG) $(MANPAGES)
@@ -18,6 +22,9 @@ distfiles: $(YTABC)
TAGS: TAGS_src
TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
Makefile: $(MAKEFILEPARTS)
+Makefile.dep:
+ touch Makefile.dep
+$(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
pure: $(PROG).pure
diff --git a/contrib/groff/Makefile.comm b/contrib/groff/Makefile.comm
index 01f6dd37f28c..b6cb4eb617c2 100644
--- a/contrib/groff/Makefile.comm
+++ b/contrib/groff/Makefile.comm
@@ -1,4 +1,4 @@
-# Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -20,17 +20,17 @@
# Makefile.comm
#
SHELL=/bin/sh
-INCLUDES=-I. -I$(srcdir) -I../include -I$(srcdir)/../include
+INCLUDES=-I. -I$(srcdir) \
+ -I$(top_builddir)/src/include -I$(top_srcdir)/src/include
ALL_CCFLAGS=$(INCLUDES) $(CCDEFINES) $(CCFLAGS) $(CPPFLAGS)
COMPILE.cc=$(CCC) $(ALL_CCFLAGS) -c
-ALL_CFLAGS=$(CDEFINES) $(CFLAGS) $(CPPFLAGS)
+ALL_CFLAGS=$(INCLUDES) $(CDEFINES) $(CFLAGS) $(CPPFLAGS)
COMPILE.c=$(CC) $(ALL_CFLAGS) -c
LINK.cc=$(CCC) $(CCFLAGS) $(LDFLAGS)
LINK.c=$(CC) $(CFLAGS) $(LDFLAGS)
-TOP=..
-LIBGROFF=$(TOP)/libgroff/libgroff.a
-LIBBIB=$(TOP)/libbib/libbib.a
-LIBDRIVER=$(TOP)/libdriver/libdriver.a
+LIBGROFF=$(top_builddir)/src/libs/libgroff/libgroff.a
+LIBBIB=$(top_builddir)/src/libs/libbib/libbib.a
+LIBDRIVER=$(top_builddir)/src/libs/libdriver/libdriver.a
MLIB=
XLIBS=
YTABH=
@@ -41,7 +41,7 @@ CLEANADD=
MOSTLYCLEANFILES=$(MANCLEAN) $(PROG) $(OBJS) $(GENSRCS) $(GENHDRS) \
depend.temp core y.output $(CLEANADD)
CLEANFILES=$(LIBCLEAN)
-DISTCLEANFILES=TAGS Makefile
+DISTCLEANFILES=TAGS Makefile Makefile.dep
REALCLEANFILES=$(YTABC) $(YTABH)
NAMEPREFIX=
HDRS=
@@ -51,15 +51,22 @@ fontsubdir=$(fontdir)/dev$(DEV)
all install install_bin install_data TAGS depend distfiles uninstall_sub:
-install: install_bin install_data
+install: prefix_must_exist install_bin install_data
uninstall: uninstall_sub
pure:
.PHONY: all clean distclean mostlyclean realclean extraclean depend distfiles
-.PHONY: install install_bin install_data
+.PHONY: install install_bin install_data prefix_must_exist
.PHONY: uninstall uninstall_sub
.PHONY: pure
+prefix_must_exist:
+ @test -d $(prefix) \
+ || (echo ; \
+ echo The prefix directory \`$(prefix)\' doesn\'t exist; \
+ echo ; \
+ exit 1)
+
mostlyclean:
-rm -f $(MOSTLYCLEANFILES)
@@ -92,47 +99,53 @@ extraclean:
else \
$(YACC) $(YACCFLAGS) $<; \
fi
- mv y.tab.c $@
+ -test -f y.tab.h && mv y.tab.h y_tab.h
+ -test -f y.tab.c && mv y.tab.c y_tab.c
+ mv y_tab.c $@
# Avoid ending up with two versions of $(YTABH).
if test -n "$(YTABH)"; then \
if test -f $(srcdir)/$(YTABH); then \
rm -f $(YTABH); \
- mv y.tab.h $(srcdir)/$(YTABH); \
+ mv y_tab.h $(srcdir)/$(YTABH); \
else \
- mv y.tab.h $(YTABH); \
+ mv y_tab.h $(YTABH); \
fi; \
fi
+version=`cat $(top_srcdir)/VERSION`
+# No additional number for the groff archive if revision is zero
+revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
+
.man.n:
@echo Making $@ from $<
@-rm -f $@
- @sed -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_PREFIX@;$(tmac_s_prefix);g" \
- -e "s;@TMAC_M_PREFIX@;$(tmac_m_prefix);g" \
- -e "s;@TMAC_AN_PREFIX@;$(tmac_an_prefix);g" \
- -e "s;@TMAC_MDIR@;$(tmacdir)/mm;g" \
- -e "s;@BROKEN_SPOOLER_FLAGS@;$(BROKEN_SPOOLER_FLAGS);g" \
- -e "s;@VERSION@;`cat $(srcdir)/../VERSION`;g" \
- -e "s;@MDATE@;`$(SHELL) $(srcdir)/../mdate.sh $<`;g" \
- -e "s;@g@;$(g);g" \
- -e "s;@G@;`echo $(g) | tr [a-z] [A-Z]`;g" \
+ @sed -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_PREFIX@|$(tmac_s_prefix)|g" \
+ -e "s|@TMAC_M_PREFIX@|$(tmac_m_prefix)|g" \
+ -e "s|@TMAC_AN_PREFIX@|$(tmac_an_prefix)|g" \
+ -e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
+ -e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
+ -e "s|@VERSION@|$(version)$(revision)|g" \
+ -e "s|@MDATE@|`$(SHELL) $(top_srcdir)/mdate.sh $<`|g" \
+ -e "s|@g@|$(g)|g" \
+ -e "s!@G@!`echo $(g) | tr [a-z] [A-Z]`!g" \
$< >$@
.PHONY: install_man
install_man:
- -test -d $(manroot) || mkdir $(manroot)
- -test -d $(man1dir) || mkdir $(man1dir)
+ -test -d $(manroot) || $(mkinstalldirs) $(manroot)
+ -test -d $(man1dir) || $(mkinstalldirs) $(man1dir)
@-pages="$(MAN1)"; \
for p in $$pages; do \
prog=`basename $$p .n`; \
@@ -141,7 +154,7 @@ install_man:
echo $(INSTALL_DATA) $$p $$target; \
$(INSTALL_DATA) $$p $$target; \
done
- -test -d $(man5dir) || mkdir $(man5dir)
+ -test -d $(man5dir) || $(mkinstalldirs) $(man5dir)
@-pages="$(MAN5)"; \
for p in $$pages; do \
target=$(man5dir)/`basename $$p .n`.$(man5ext); \
@@ -149,7 +162,7 @@ install_man:
echo $(INSTALL_DATA) $$p $$target; \
$(INSTALL_DATA) $$p $$target; \
done
- -test -d $(man7dir) || mkdir $(man7dir)
+ -test -d $(man7dir) || $(mkinstalldirs) $(man7dir)
@-pages="$(MAN7)"; \
for p in $$pages; do \
target=$(man7dir)/`basename $$p .n`.$(man7ext); \
@@ -181,7 +194,7 @@ uninstall_man:
.PHONY: install_prog
install_prog:
- -test -d $(bindir) || mkdir $(bindir)
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
rm -f $(bindir)/$(NAMEPREFIX)$(PROG)
$(INSTALL_PROGRAM) $(PROG) $(bindir)/$(NAMEPREFIX)$(PROG)
@@ -191,12 +204,13 @@ uninstall_prog:
.PHONY: install_dev
install_dev:
- -test -d $(datadir) || mkdir $(datadir)
- -test -d $(datasubdir) || mkdir $(datasubdir)
- -test -d $(fontdir) || mkdir $(fontdir)
- -test -d $(fontsubdir) || mkdir $(fontsubdir)
+ -test -d $(datadir) || $(mkinstalldirs) $(datadir)
+ -test -d $(datasubdir) || $(mkinstalldirs) $(datasubdir)
+ -test -d $(fontdir) || $(mkinstalldirs) $(fontdir)
+ -test -d $(fontsubdir) || $(mkinstalldirs) $(fontsubdir)
-if test -d $(srcdir)/generate; then \
- test -d $(fontsubdir)/generate || mkdir $(fontsubdir)/generate; \
+ test -d $(fontsubdir)/generate || \
+ $(mkinstalldirs) $(fontsubdir)/generate; \
fi
-for f in $(DEVFILES); do \
rm -f $(fontsubdir)/$$f; \
@@ -226,8 +240,8 @@ depend.temp: FORCE
test -z "$(CSRCS)" \
|| $(CC) $(ALL_CFLAGS) -MM $(CSRCS) >>depend.temp
if test -n "$(YTABH)"; then \
- sed -e 's|$(YTABH)|$(YTABC)|g' depend.temp >depend.temp1; \
- mv depend.temp1 depend.temp; \
+ sed -e 's|$(YTABH)|$(YTABC)|g' depend.temp >depend1.temp; \
+ mv depend1.temp depend.temp; \
fi
.PHONY: TAGS_src
diff --git a/contrib/groff/Makefile.cpg b/contrib/groff/Makefile.cpg
index 1b9f66f0da3c..4cb514f4c79a 100644
--- a/contrib/groff/Makefile.cpg
+++ b/contrib/groff/Makefile.cpg
@@ -1,6 +1,10 @@
# Makefile.cpg
-MAKEFILEPARTS=$(srcdir)/../Makefile.comm ../Makefile.cfg \
- $(srcdir)/Makefile.sub $(srcdir)/../Makefile.cpg $(srcdir)/Makefile.dep
+MAKEFILEPARTS=\
+ $(top_srcdir)/Makefile.comm \
+ $(top_builddir)/Makefile.cfg \
+ $(srcdir)/Makefile.sub \
+ $(top_srcdir)/Makefile.cpg \
+ Makefile.dep
all: $(PROG) $(MANPAGES)
@@ -18,3 +22,6 @@ distfiles: $(YTABC)
TAGS: TAGS_src
TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
Makefile: $(MAKEFILEPARTS)
+Makefile.dep:
+ touch Makefile.dep
+$(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
diff --git a/contrib/groff/Makefile.in b/contrib/groff/Makefile.in
index dd0ef84a9738..9856aabe8911 100644
--- a/contrib/groff/Makefile.in
+++ b/contrib/groff/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -48,6 +48,10 @@ BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@
# DEVICE is the default device.
DEVICE=ps
+# TTYDEVDIRS is either `font/devascii font/devlatin1 font/devutf8' (for
+# ASCII) or `font/devcp1047' (for EBCDIC).
+TTYDEVDIRS=@TTYDEVDIRS@
+
# PSPRINT is the command to use for printing a PostScript file,
# for example `lpr'.
PSPRINT=@PSPRINT@
@@ -74,7 +78,7 @@ exec_prefix=@exec_prefix@
bindir=$(exec_prefix)/bin
# datasubdir says where to install data files
-datadir=$(prefix)/share
+datadir=@datadir@
datasubdir=$(datadir)/groff
# fontdir says where to install dev*/*.
@@ -103,13 +107,13 @@ tmac_wrap=@tmac_wrap@
# Don't make this empty.
tmac_prefix=g
-# The groff -mm macros will be available as -m($(tmac_m_prefix)m.
+# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
tmac_m_prefix=\
`for i in $(tmac_wrap) ""; do case "$$i" in m) echo $(tmac_prefix);; esac; done`
-# The groff -ms macros will be available as -m($(tmac_m_prefix)s.
+# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
tmac_s_prefix=\
`for i in $(tmac_wrap) ""; do case "$$i" in s) echo $(tmac_prefix);; esac; done`
-# The groff -man macros will be available as -m($(tmac_m_prefix)an.
+# The groff -man macros will be available as -m$(tmac_an_prefix)an.
tmac_an_prefix=\
`for i in $(tmac_wrap) ""; do case "$$i" in an) echo $(tmac_prefix);; esac; done`
@@ -131,7 +135,7 @@ indexname=Ind
common_words_file=$(datasubdir)/eign
# manroot is the root of the man page directory tree.
-manroot=$(prefix)/man
+manroot=@mandir@
# man1ext is the man section for user commands.
man1ext=1
@@ -160,25 +164,32 @@ man7dir=$(manroot)/man$(man7ext)
# -DHAVE_CC_LIMITS_H if you have a C++ <limits.h>
# -DHAVE_SYS_DIR_H if you have <sys/dir.h>
# -DHAVE_STDLIB_H if you have <stdlib.h>
+# -DHAVE_STRINGS_H if you have <strings.h>
# -DHAVE_RENAME if you have rename()
# -DHAVE_MKSTEMP if you have mkstemp()
-# -DSTDLIB_H_DECLARES_GETOPT if your C++ <stdlib.h> declares getopt()
-# -DUNISTD_H_DECLARES_GETOPT if your C++ <unistd.h> declares getopt()
-# -DSTDLIB_H_DECLARES_PUTENV if your C++ <stdlib.h> declares putenv()
-# -DSTDIO_H_DECLARES_POPEN if your C++ <stdio.h> declares popen()
-# -DSTDIO_H_DECLARES_PCLOSE if your C++ <stdio.h> declares pclose()
+# -DHAVE_STRDUP if you have strdup()
+# -DHAVE_STRSEP if you have strsep()
+# -DHAVE_STRCASECMP if you have strcasecmp()
+# -DNEED_DECLARATION_HYPOT if your C++ <math.h> doesn't declare hypot()
+# -DNEED_DECLARATION_PUTENV if your C++ <stdlib.h> doesn't declare putenv()
+# -DNEED_DECLARATION_POPEN if your C++ <stdio.h> doesn't declare popen()
+# -DNEED_DECLARATION_PCLOSE if your C++ <stdio.h> doesn't declare pclose()
+# -DNEED_DECLARATION_STRNCASECMP
+# if your C++ <string.h> doesn't declare
+# strncasecmp()
+# -DRET_TYPE_SRAND_IS_VOID if your srand() returns void or int
# -DHAVE_SYS_NERR if you have sysnerr in <errno.h> or <stdio.h>
# -DHAVE_SYS_ERRLIST if you have sys_errlist in <errno.h> or
# <stdio.h>
-# -DMATH_H_DECLARES_HYPOT if you have hypot() in <math.h>
# -DTRADITIONAL_CPP if your C++ compiler uses a traditional
# (Reiser) preprocessor
# -DLONG_FOR_TIME_T if localtime() takes a long * not a time_t *
# -DHAVE_STRUCT_EXCEPTION if <math.h> defines struct exception
# -DRETSIGTYPE=int if signal handlers return int not void
+# -DIS_EBCDIC_HOST if the host's encoding is EBCDIC
DEFINES=@DEFS@
-# Include fmod.o, strtol.o, getcwd.o, strerror.o, putenv.o in LIBOBJS if
+# Include fmod.o, strtol.o, getcwd.o, strerror.o, putenv.o in LIBOBJS if
# your C library is missing the corresponding function.
LIBOBJS=@LIBOBJS@
@@ -201,6 +212,7 @@ LIBM=@LIBM@
RANLIB=@RANLIB@
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_SCRIPT=@INSTALL_SCRIPT@
INSTALL_DATA=@INSTALL_DATA@
LN_S=@LN_S@
AR=ar
@@ -212,8 +224,14 @@ ETAGSCCFLAG=-C
PERLPATH=@PERLPATH@
# Sed command with which to edit sh scripts.
SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@
-srcdir = @srcdir@
-VPATH = @srcdir@
+
+srcdir=@srcdir@
+top_srcdir=@top_srcdir@
+VPATH=@srcdir@
+top_builddir=@top_builddir@
+
+# the program to create directory hierarchies
+mkinstalldirs=$(top_srcdir)/mkinstalldirs
PURIFY=purify
PURIFYCCFLAGS=
@@ -223,123 +241,238 @@ PURIFYCCFLAGS=
# Passing down MAKEOVERRIDES prevents $(MAKE) from containing a second
# copy of $(MDEFINES) when making individual directories; this could
# cause the argument list to become too long on some systems.
-MDEFINES="MAKEOVERRIDES=$(MAKEOVERRIDES)" \
- "PAGE=$(PAGE)" "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
- "DEVICE=$(DEVICE)" "PSPRINT=$(PSPRINT)" "DVIPRINT=$(DVIPRINT)" \
- "prefix=$(prefix)" "exec_prefix=$(exec_prefix)" "bindir=$(bindir)" \
- "g=$(g)" "datadir=$(datadir)" "datasubdir=$(datasubdir)" \
- "fontdir=$(fontdir)" "fontpath=$(fontpath)" \
- "tmacdir=$(tmacdir)" "tmacpath=$(tmacpath)" \
- "indexext=$(indexext)" "indexdir=$(indexdir)" \
- "indexname=$(indexname)" "common_words_file=$(common_words_file)" \
- "manroot=$(manroot)" "man1ext=$(man1ext)" "man1dir=$(man1dir)" \
- "man5ext=$(man5ext)" "man5dir=$(man5dir)" \
- "man7ext=$(man7ext)" "man7dir=$(man7dir)" \
- "tmac_wrap=$(tmac_wrap)" "sys_tmac_prefix=$(sys_tmac_prefix)" \
+MDEFINES= \
+ "MAKEOVERRIDES=$(MAKEOVERRIDES)" \
+ "PAGE=$(PAGE)" \
+ "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
+ "DEVICE=$(DEVICE)" \
+ "TTYDEVDIRS=$(TTYDEVDIRS)" \
+ "PSPRINT=$(PSPRINT)" \
+ "DVIPRINT=$(DVIPRINT)" \
+ "top_srcdir=$(top_srcdir)" \
+ "top_builddir=$(top_builddir)" \
+ "prefix=$(prefix)" \
+ "exec_prefix=$(exec_prefix)" \
+ "bindir=$(bindir)" \
+ "g=$(g)" \
+ "datadir=$(datadir)" \
+ "datasubdir=$(datasubdir)" \
+ "fontdir=$(fontdir)" \
+ "fontpath=$(fontpath)" \
+ "tmacdir=$(tmacdir)" \
+ "tmacpath=$(tmacpath)" \
+ "indexext=$(indexext)" \
+ "indexdir=$(indexdir)" \
+ "indexname=$(indexname)" \
+ "common_words_file=$(common_words_file)" \
+ "manroot=$(manroot)" \
+ "man1ext=$(man1ext)" \
+ "man1dir=$(man1dir)" \
+ "man5ext=$(man5ext)" \
+ "man5dir=$(man5dir)" \
+ "man7ext=$(man7ext)" \
+ "man7dir=$(man7dir)" \
+ "mkinstalldirs=$(mkinstalldirs)" \
+ "tmac_wrap=$(tmac_wrap)" \
+ "sys_tmac_prefix=$(sys_tmac_prefix)" \
"tmac_an_prefix=$(tmac_an_prefix)" \
- "tmac_s_prefix=$(tmac_s_prefix)" "tmac_m_prefix=$(tmac_m_prefix)" \
- "CCC=$(CCC)" "CC=$(CC)" "CCDEFINES=$(CCDEFINES)" "CDEFINES=$(CDEFINES)" \
- "CCFLAGS=$(CCFLAGS)" "CFLAGS=$(CFLAGS)" "LDFLAGS=$(LDFLAGS)" \
- "YACC=$(YACC)" "YACCFLAGS=$(YACCFLAGS)" "LIBM=$(LIBM)" \
- "LIBS=$(LIBS)" "LIBOBJS=$(LIBOBJS)" "RANLIB=$(RANLIB)" "AR=$(AR)" \
- "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" "INSTALL_DATA=$(INSTALL_DATA)" \
- "ETAGS=$(ETAGS)" "ETAGSFLAGS=$(ETAGSFLAGS)" "ETAGSCCFLAG=$(ETAGSCCFLAG)" \
- "PERLPATH=$(PERLPATH)" "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
- "PURIFY=$(PURIFY)" "PURIFYCCFLAGS=$(PURIFYCCFLAGS)"
+ "tmac_s_prefix=$(tmac_s_prefix)" \
+ "tmac_m_prefix=$(tmac_m_prefix)" \
+ "CCC=$(CCC)" \
+ "CC=$(CC)" \
+ "CCDEFINES=$(CCDEFINES)" \
+ "CDEFINES=$(CDEFINES)" \
+ "CCFLAGS=$(CCFLAGS)" \
+ "CFLAGS=$(CFLAGS)" \
+ "LDFLAGS=$(LDFLAGS)" \
+ "YACC=$(YACC)" \
+ "YACCFLAGS=$(YACCFLAGS)" \
+ "LIBM=$(LIBM)" \
+ "LIBS=$(LIBS)" \
+ "LIBOBJS=$(LIBOBJS)" \
+ "RANLIB=$(RANLIB)" \
+ "AR=$(AR)" \
+ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+ "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
+ "INSTALL_DATA=$(INSTALL_DATA)" \
+ "ETAGS=$(ETAGS)" \
+ "ETAGSFLAGS=$(ETAGSFLAGS)" \
+ "ETAGSCCFLAG=$(ETAGSCCFLAG)" \
+ "PERLPATH=$(PERLPATH)" \
+ "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
+ "PURIFY=$(PURIFY)" \
+ "PURIFYCCFLAGS=$(PURIFYCCFLAGS)"
SHELL=/bin/sh
-INCDIRS=include
-LIBDIRS=libgroff libdriver libbib
-CCPROGDIRS=groff troff tbl pic eqn grops grotty grodvi tfmtodit \
- grolj4 hpftodit refer lookbib indxbib lkbib soelim addftinfo \
- grohtml
-CPROGDIRS=pfbtops psbb
+INCDIRS=src/include
+LIBDIRS=\
+ src/libs/libgroff \
+ src/libs/libdriver \
+ src/libs/libbib
+CCPROGDIRS=\
+ src/roff/groff \
+ src/roff/troff \
+ src/preproc/tbl \
+ src/preproc/pic \
+ src/preproc/eqn \
+ src/preproc/grn \
+ src/preproc/refer \
+ src/preproc/soelim \
+ src/devices/grops \
+ src/devices/grotty \
+ src/devices/grodvi \
+ src/devices/grolj4 \
+ src/devices/grohtml \
+ src/devices/grolbp \
+ src/utils/tfmtodit \
+ src/utils/hpftodit \
+ src/utils/lookbib \
+ src/utils/indxbib \
+ src/utils/lkbib \
+ src/utils/addftinfo
+CPROGDIRS=src/utils/pfbtops
PROGDIRS=$(CCPROGDIRS) $(CPROGDIRS)
-DEVDIRS=devps devdvi devascii devlatin1 devX75 devX75-12 devX100 devX100-12 \
- devlj4 devhtml
-OTHERDIRS=man tmac afmtodit grog nroff mm
-ALLDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) $(DEVDIRS) $(OTHERDIRS)
-EXTRADIRS=devps/generate devdvi/generate xditview doc
-DISTDIRS=$(ALLDIRS) $(EXTRADIRS)
+DEVDIRS=\
+ font/devps \
+ font/devdvi \
+ font/devX75 \
+ font/devX75-12 \
+ font/devX100 \
+ font/devX100-12 \
+ font/devlj4 \
+ font/devhtml \
+ font/devlbp
+ALLTTYDEVDIRS=\
+ font/devascii \
+ font/devlatin1 \
+ font/devutf8 \
+ font/devcp1047
+OTHERDIRS=\
+ man \
+ tmac \
+ src/utils/afmtodit \
+ src/roff/grog \
+ src/roff/nroff \
+ contrib/mm
+ALLDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) \
+ $(DEVDIRS) $(TTYDEVDIRS) $(OTHERDIRS)
+EXTRADIRS=\
+ font/devps/generate \
+ font/devdvi/generate \
+ src/xditview \
+ doc
+DISTDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) \
+ $(DEVDIRS) $(ALLTTYDEVDIRS) $(OTHERDIRS) $(EXTRADIRS)
TARGETS=all install install_bin install_data clean distclean mostlyclean \
realclean extraclean distfiles TAGS depend uninstall_sub
+# This ENVSETUP gork is required by the DJGPP build on Windows 9X,
+# where Make needs to be case-sensitive to find files like BI and VERSION.
+ENVSETUP=\
+ if test -f $(srcdir)/makefile.ccpg* && \
+ test -f $(srcdir)/Makefile.ccpg*; \
+ then FNCASE=y; export FNCASE; \
+ else :; \
+ fi
+
do=all
dodirs=$(ALLDIRS) dot
# Default target for subdir_Makefile
-subdir=troff
+subdir=src/roff/troff
$(TARGETS):
- @$(MAKE) $(MDEFINES) do=$@ $(dodirs)
+ @$(ENVSETUP); $(MAKE) $(MDEFINES) do=$@ $(dodirs)
dot: FORCE
- @$(MAKE) $(MDEFINES) srcdir=$(srcdir) VPATH=$(srcdir) \
- -f $(srcdir)/Makefile.comm -f $(srcdir)/Makefile.sub $(do)
+ @$(ENVSETUP); \
+ $(MAKE) $(MDEFINES) srcdir=$(srcdir) VPATH=$(srcdir) \
+ -f $(top_srcdir)/Makefile.comm \
+ -f $(top_srcdir)/Makefile.sub $(do)
$(LIBDIRS): FORCE
- @if test $(srcdir) = .; \
+ @$(ENVSETUP); \
+ if test $(srcdir) = .; \
then srcdir=.; \
else srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
- test -d $@ || mkdir $@; \
+ test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
+ test -f Makefile.dep || touch Makefile.dep; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \
- -f $$srcdir/../Makefile.lib -f $$srcdir/Makefile.dep $(do)
+ -f $(top_srcdir)/Makefile.comm \
+ -f $$srcdir/Makefile.sub \
+ -f $(top_srcdir)/Makefile.lib \
+ -f Makefile.dep $(do)
$(CPROGDIRS): FORCE
- @if test $(srcdir) = .; \
+ @$(ENVSETUP); \
+ if test $(srcdir) = .; \
then srcdir=.; \
else srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
- test -d $@ || mkdir $@; \
+ test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
+ test -f Makefile.dep || touch Makefile.dep; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \
- -f $$srcdir/../Makefile.cpg -f $$srcdir/Makefile.dep $(do)
+ -f $(top_srcdir)/Makefile.comm \
+ -f $$srcdir/Makefile.sub \
+ -f $(top_srcdir)/Makefile.cpg \
+ -f Makefile.dep $(do)
$(CCPROGDIRS): FORCE
- @if test $(srcdir) = .; \
+ @$(ENVSETUP); \
+ if test $(srcdir) = .; \
then srcdir=.; \
else srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
- test -d $@ || mkdir $@; \
+ test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
+ test -f Makefile.dep || touch Makefile.dep; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \
- -f $$srcdir/../Makefile.ccpg -f $$srcdir/Makefile.dep $(do)
-
-$(DEVDIRS): FORCE
- @if test $(srcdir) = .; \
+ -f $(top_srcdir)/Makefile.comm \
+ -f $$srcdir/Makefile.sub \
+ -f $(top_srcdir)/Makefile.ccpg \
+ -f Makefile.dep $(do)
+
+$(DEVDIRS) $(TTYDEVDIRS): FORCE
+ @$(ENVSETUP); \
+ if test $(srcdir) = .; \
then srcdir=.; \
else srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
- test -d $@ || mkdir $@; \
+ test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \
- -f $$srcdir/../Makefile.dev $(do)
+ -f $(top_srcdir)/Makefile.comm \
+ -f $$srcdir/Makefile.sub \
+ -f $(top_srcdir)/Makefile.dev $(do)
$(INCDIRS) $(OTHERDIRS): FORCE
- @if test $(srcdir) = .; \
+ @$(ENVSETUP); \
+ if test $(srcdir) = .; \
then srcdir=.; \
else srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
- test -d $@ || mkdir $@; \
+ test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
- -f $$srcdir/../Makefile.comm -f $$srcdir/Makefile.sub \
- -f $$srcdir/../Makefile.man $(do)
+ -f $(top_srcdir)/Makefile.comm \
+ -f $$srcdir/Makefile.sub \
+ -f $(top_srcdir)/Makefile.man $(do)
-version=`cat $(srcdir)/VERSION`
+version=`cat $(top_srcdir)/VERSION`
+# No additional number for the groff archive if revision is zero
+revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
.PHONY: dist
dist:
-rm -fr tmp
+ rm -f groff-$(version)$(revision).tar.gz
+ rm -f src/xditview/Imakefile;
mkdir tmp
for d in $(DISTDIRS); do \
- mkdir tmp/$$d; \
+ $(mkinstalldirs) tmp/$$d; \
done
srcdir=`cd $(srcdir); pwd`; \
cd tmp; \
@@ -354,10 +487,10 @@ dist:
done; \
rm -f Makefile; \
$(LN_S) $$srcdir/Makefile.init Makefile
- mv tmp groff-$(version)
- rm -f groff-$(version).tar.gz
- tar cfh - groff-$(version) | gzip -c >groff-$(version).tar.gz
- rm -fr groff-$(version)
+ mv tmp groff-$(version)$(revision)
+ tar cfh - groff-$(version)$(revision) | \
+ gzip -c >groff-$(version)$(revision).tar.gz
+ rm -fr groff-$(version)$(revision)
# $(PROGDIRS): libgroff
# grops grotty grodvi: libdriver
@@ -375,14 +508,6 @@ Makefile.cfg: Makefile
echo "$$var" >>Makefile.cfg; \
done
-depend: srcdir_must_be_dot
-
-.PHONY: srcdir_must_be_dot
-srcdir_must_be_dot:
- @test "X$(srcdir)" = "X." \
- || (echo This target can only be made in the source directory; \
- exit 1)
-
Makefile: Makefile.in
$(SHELL) config.status
diff --git a/contrib/groff/Makefile.init b/contrib/groff/Makefile.init
index 5e09c198414b..024f48699bda 100644
--- a/contrib/groff/Makefile.init
+++ b/contrib/groff/Makefile.init
@@ -1,4 +1,4 @@
-# Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
diff --git a/contrib/groff/Makefile.lib b/contrib/groff/Makefile.lib
index 019ba6af2105..8861360e9638 100644
--- a/contrib/groff/Makefile.lib
+++ b/contrib/groff/Makefile.lib
@@ -1,6 +1,10 @@
LIBCLEAN=lib$(LIB).a
-MAKEFILEPARTS=$(srcdir)/../Makefile.comm ../Makefile.cfg \
- $(srcdir)/Makefile.sub $(srcdir)/../Makefile.lib $(srcdir)/Makefile.dep
+MAKEFILEPARTS=\
+ $(top_srcdir)/Makefile.comm \
+ $(top_builddir)/Makefile.cfg \
+ $(srcdir)/Makefile.sub \
+ $(top_srcdir)/Makefile.lib \
+ Makefile.dep
all: lib$(LIB).a
@@ -12,3 +16,5 @@ depend: depend_src
depend.temp: $(GENSRCS)
TAGS: $(CCSRCS) $(CSRCS)
Makefile: $(MAKEFILEPARTS)
+Makefile.dep:
+ touch Makefile.dep
diff --git a/contrib/groff/Makefile.man b/contrib/groff/Makefile.man
index 59378de01274..2fecd115fb3a 100644
--- a/contrib/groff/Makefile.man
+++ b/contrib/groff/Makefile.man
@@ -2,3 +2,4 @@ all: $(MANPAGES)
install_data: install_man
install_man: $(MANPAGES)
uninstall_sub: uninstall_man
+$(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
diff --git a/contrib/groff/NEWS b/contrib/groff/NEWS
index 243cbfb4ee6f..855a2689e66d 100644
--- a/contrib/groff/NEWS
+++ b/contrib/groff/NEWS
@@ -1,6 +1,177 @@
This file describes recent user-visible changes in groff. Bug fixes
are not described. There are more details in the man pages.
+VERSION 1.16.1
+==============
+
+Bug fixes only; no user-visible changes.
+
+VERSION 1.16
+============
+
+Groff
+-----
+
+The anachronism of calling the man macro package with `-man' has been fixed;
+now you can say `-m man' also. The same is true for `ms', `me', `markup',
+`mandoc', and `mdoc'.
+
+A new switch `-g' for calling `grn' is available.
+
+A new switch `-G' for calling `grap' is available.
+
+EBCDIC support for tty devices has been added. On such hosts, IBM code page
+1047 is available with -Tcp1047 instead of -Tascii and -Tlatin1 (and, for
+the moment, -Tutf8). Note that non-tty devices are not yet supported (but
+installed).
+
+Troff
+-----
+
+A new command line option to the `man' macros is available: `-rSxx' (with
+`xx' either 10, 11, or 12) to set the base document font size to `xx'
+points. Additionally, `.SH' now produces larger headings than `.SS'.
+
+To solve a problem with the .PSPIC macro which needs the `-U' switch of
+troff to access an external program (psbb), a new request .psbb is now
+available to get the bounding box of a PostScript image file. The values
+(in PostScript units) are returned in the new read-only number registers
+`llx', `lly', `urx', and `ury'. Consequently, .PSPIC has been adapted to
+use the new request, and the psbb program has been removed.
+
+A new predefined writable number register, `year', has been added. It
+contains the current year.
+
+A new read-only register, `.Y', has been added. It contains the revision
+number of the groff package.
+
+`\fP' now behaves as expected in situations like the following where the
+font `foo' is undefined:
+
+ .B bold text
+ normal text \f[foo]bar\fP normal text
+
+Previously, the text after \fP appeared as bold.
+
+The `substring' request is not new, but hasn't been documented before.
+
+The predefined `.T' string register (which holds the current output device)
+is not new, but hasn't been documented before.
+
+A new request `length' computes the length of a string and returns it in
+a number register.
+
+The macro files `tmac.a4' (for specifying A4 paper format) and `tmac.trace'
+(a debugging aid) are now installed also.
+
+A new resource file, `troffrc-end', is now available. It is invoked after
+all user-specified macros. Currently used by the html device to include
+tmac.html; thus no need for users to specify -mhtml anymore.
+
+The soft hyphen character now has a glyph name: `shc'.
+
+The latin-1 character 173 (PS name `periodcentered') has got the troff glyph
+name `pc' and is no longer intermixed with the symbol character `md' (PS
+name `mathdot').
+
+ASCII character 34 (PS name `quotedbl') has got the troff glyph name `dq'
+(which is an alias to character `"').
+
+ASCII character 39 (PS name `quoteright') has got the troff glyph name `cq'
+(which is an alias to character "'").
+
+Some additions to the font description files have been implemented for
+better support of HTML output:
+
+ The new format of lines in the `charset' subsection of font description
+ files is
+
+ name metrics type code [entity_name] [-- comment]
+
+ Currently, only the font description files in devhtml use the optional
+ entity_name string to define glyph entities in HTML. Everything after the
+ entity_name field is ignored; in case this field isn't used, two hyphen
+ characters are now necessary to start a comment.
+
+ Two new requests are available in DESC files (currently used only with
+ grohtml):
+
+ use_charnames_in_special
+ This command indicates that troff should encode named characters
+ inside special commands.
+
+ pass_filenames
+ requests that troff tells the driver the source file name being
+ processed. This is achieved by another tcommand: `F filename'.
+
+Grotty
+------
+
+Bruno Haible <haible@clisp.cons.org> contributed support for UTF8 output.
+
+Grohtml
+-------
+
+Added .LINE macro to tmac.arkup.
+
+The obsolete `.LINK' macro has been removed.
+
+.URL, .FTP, and .MAILTO macros now accept an optional third argument which
+will be immediately appended to the second argument (to be used with
+punctuation, for example).
+
+Grodvi
+------
+
+The font size 11pt has been changed to 10.95pt (as used in LaTeX 2e).
+
+A new font file CWI (using cmitt10; this is typewriter italic) has been
+added.
+
+Grolbp
+------
+
+A new driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser
+printers). This code has been contributed by Francisco Andres Verdu
+<pandres@dragonet.es>.
+
+Grn
+---
+
+A new preprocessor to process gremlin pictures. It is based on the
+original Berkeley implementation of grn, written by David Slattengren
+and Barry Roitblat, and has been adapted to groff by Daniel Senderowicz
+<daniel@synchrods.com> and Werner Lemberg <wl@gnu.org>.
+
+Pic
+---
+
+Added the `srand' command to set the seed for a new sequence of
+pseudo-random numbers to be returned by `rand'.
+
+Gxditview
+---------
+
+Simplified installation: The Imakefile will now be configured (by groff's
+configure script).
+
+Documentation
+-------------
+
+Three new man pages are available: groff_tmac.5 (documenting how troff macros
+are accessed and where they are found), groff.7 (a short reference of the GNU
+roff language), and roff.7 (a general survey on GNU troff).
+
+Miscellaneous
+-------------
+
+A port to win32 (for use with Microsoft Visual C++ 6.0) is now part of the
+distribution. It has been contributed by Blake McBride
+<blake@florida-software.com>.
+
+More information about programs, macros, documentation, etc., which is
+related to groff has been collected in the file `MORE.STUFF'.
+
VERSION 1.13, 1.14, 1.15
========================
diff --git a/contrib/groff/PROBLEMS b/contrib/groff/PROBLEMS
index 9ee5b40bab2e..b73db2f4fbd0 100644
--- a/contrib/groff/PROBLEMS
+++ b/contrib/groff/PROBLEMS
@@ -2,20 +2,51 @@ This file describes various problems that have been encountered in
compiling, installing and running groff. Suggestions for additions or
other improvements to this file are welcome.
+----------------------------------------------------------------------
+
+* My document says that the current year is 19100, not 2000.
+
+In groff, as in traditional troff, the yr number register yields the
+year minus 1900. Unfortunately, there is a longstanding bug in the
+Troff User's Manual <http://cm.bell-labs.com/cm/cs/cstr/54.ps.gz>,
+which incorrectly claims that yr is the last two digits of the year.
+This claim was never true of either Unix troff or of groff.
+
+If your text looks like this:
+
+ .\" Wrong:
+ This document was formatted in 19\n(yr.
+
+you can correct it as follows:
+
+ This document was formatted in \n[year].
+
+or, if you want to be portable to older troff versions, as follows:
+
+ .nr y4 1900+\n(yr
+ This document was formatted in \n(y4.
+
+----------------------------------------------------------------------
+
* I get lots of `numeric overflow' error messages whenever I run
-groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler.
+ groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler.
Make sure -DCFRONT_ANSI_BUG is included in DEFINES in the top-level
Makefile. If that doesn't solve the problem, define INT_MIN as
-INT_MAX in libgroff/lib.h.
-* I get errors when I try to compile groff with Sun C++ version 5.0 or 5.1.
+----------------------------------------------------------------------
+
+* I get errors when I try to compile groff with Sun C++ version 5.0
+ or 5.1.
This is a known problem; see Sun bug #4301919. As of this writing, no
patch is available. Use GCC 2.95.2 or later instead.
+----------------------------------------------------------------------
+
* I get errors when I try to compile groff with Sun C++ version 3 or
-earlier.
+ earlier.
Groff requires header files that are moderately compatible with AT&T
C++ and ANSI C. With some versions of Sun C++, the supplied header
@@ -24,22 +55,67 @@ files need some of the following changes to meet this requirement:
<memory.h>' to <string.h>); the first argument to fopen and freopen
should be declared as `const char *'; the first argument to fread
should be declared as `void *'; the first argument to fwrite should be
-declared as `const void *'; malloc should be declared to return `void
-*'; in <alloca.h>, the declaration `extern "C" { void
-*__builtin_alloca(int); }' should be added; declarations of getopt(),
-optarg, optind and opterr should be added to <stdlib.h>; in
-<sys/signal.h> the return type and the second argument type of
-signal() should be changed to be `void (*)(int)'.
+declared as `const void *'; malloc should be declared to return
+`void *'; in <alloca.h>, the declaration `extern "C" { void
+*__builtin_alloca(int); }' should be added; in <sys/signal.h> the
+return type and the second argument type of signal() should be changed
+to be `void (*)(int)'.
You can either change them in place, or copy them to some other
directory and include that directory with a -I option.
+----------------------------------------------------------------------
+
+* The configure script fails on OS/390 Unix.
+
+There is a bug in the Language Environment (LE) whereby the test
+program for static destructors fails. You will see the message
+'configure: error: a working C++ compiler is required'
+
+Applying PTF UQ42006 is supposed to fix this, but the test program is
+still returning the wrong value (1). To work around this problem, you
+can comment out the following in the configure script (near line 956).
+This will effectively bypass the test (static constructors and
+destructors do actually work properly):
+
+#if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+#then
+ echo "$ac_t""yes" 1>&6
+#else
+# echo "configure: failed program was:" >&5
+# cat conftest.$ac_ext >&5
+# rm -fr conftest*
+# echo "$ac_t""no" 1>&6;{ echo "configure: error: a working C++ compiler is required" 1>&2; exit 1; }
+#fi
+
+----------------------------------------------------------------------
+
* I get errors when I try to compile groff with DEC C++.
Fix the declaration of write() in <unistd.h> so that the second
argument is a const char *. Fix the declaration of open() in
<sys/file.h> so that the first argument is a const char *.
+----------------------------------------------------------------------
+
+* On a host using Unix make (e.g. Solaris), if you are compiling for
+ multiple architectures by building in a subdirectory, the make stops
+ with a message like this:
+
+ make: Fatal error: Don't know how to make target `assert.o'
+
+ or like this:
+
+ make: Fatal error: Can't find /u/src/groff/src/include/Makefile.sub': No such file or directory
+
+This occurs because GNU make and Unix make handle VPATH differently,
+and the groff build relies on GNU make's VPATH handling.
+
+Use GNU make to work around the problem. In Solaris 8, GNU make is
+on the Software Companion CD and is installed as /opt/sfw/bin/gmake.
+
+----------------------------------------------------------------------
+
* On Ultrix, the make stops with the message
*** Error code 1
@@ -50,6 +126,8 @@ for no apparent reason.
Use GNU make.
+----------------------------------------------------------------------
+
* I'm having problems compiling groff on 386BSD 0.1.
If you're using ash as /bin/sh, you'll need the following patch.
@@ -78,12 +156,22 @@ If you're using ash as /bin/sh, you'll need the following patch.
You'll also need to change dirnamemax.c so that it doesn't use
pathconf().
+----------------------------------------------------------------------
+
* While compiling on Xenix, ranlib libgroff.a fails.
The system ranlib can't handle externals longer than 40 characters.
Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1
instead.
+----------------------------------------------------------------------
+
+* There are many empty `Makefile.dep' files. Is this a bug?
+
+No. Real dependency files are created with a `make depend' call.
+
+----------------------------------------------------------------------
+
* Groff can't handle my troff document. It works fine with AT&T troff.
Read the section on incompatibilities in gtroff(1). Try using the -C
@@ -91,20 +179,27 @@ option. Alternatively there's the sed script in tmac/fixmacros.sed
which will attempt to edit a file of macros so that it can be used
with groff without the -C flag.
-* groff -Tdvi produces dvi files that use fonts at weird magnifications.
+----------------------------------------------------------------------
+
+* groff -Tdvi produces dvi files that use fonts at weird
+ magnifications.
Yes, it does. You may need to compile fonts with Metafont at these
-magnifications. The CompileFonts script in the devdvi/generate
-directory may help you to do this. (It will take a *long* time.)
+magnifications. The CompileFonts script in the devdvi/generate
+directory may help you to do this. (It will take a *long* time.)
+
+----------------------------------------------------------------------
* pic output is not centered horizontally; pictures sometimes run off
-the bottom of the page.
+ the bottom of the page.
+
+The macro package you are using is not supplying appropriate
+definitions of PS and PE. Give groff a -mpic option.
-The macro package you are using is not supplying appropriate definitions
-of PS and PE. Give groff a -mpic option.
+----------------------------------------------------------------------
-* I'm having problems including PostScript illustrations using the PSPIC
-macro.
+* I'm having problems including PostScript illustrations using the
+ PSPIC macro.
A PostScript document must meet three requirements in order to be
included with the PSPIC macro: it must comply with the Adobe Document
@@ -124,18 +219,24 @@ specification of Encapsulated PostScript format. (This is available
from the Adobe file server; send a message with a body of `help' to
ps-file-server@adobe.com.)
+----------------------------------------------------------------------
+
* I've configured groff for A4 paper, but gtroff still seems to think
-that the length of a page (as returned by \n(.p) is 11 inches.
+ that the length of a page (as returned by \n(.p) is 11 inches.
This is intentional. The PAGE option is used only by grops. For
compatibility with ditroff, the default page length in gtroff is
always 11 inches. The page length can be changed with the `pl'
request.
+----------------------------------------------------------------------
+
* Groff doesn't use the font names I'm used to.
Use the `ftr' request. See gtroff(1).
+----------------------------------------------------------------------
+
* I get errors using the Unix -ms macros with groff -e -C.
Apply this change:
@@ -163,51 +264,66 @@ Apply this change:
.nr ZN \\n(dn
.if \\n(ZN>0 .if \\n(YE=0 .LP
+----------------------------------------------------------------------
-* gpic doesn't accept the syntax `chop N M' for chopping both ends of a
-line.
+* gpic doesn't accept the syntax `chop N M' for chopping both ends of
+ a line.
The correct syntax is `chop N chop M'.
-* With gpic -t, when I print `line ->; box' using a dvi to ps
-program, the arrow head sticks through into the inside of the box.
+----------------------------------------------------------------------
+
+* With gpic -t, when I print `line ->; box' using a dvi to ps program,
+ the arrow head sticks through into the inside of the box.
+
+The dvi to ps program should be modified to set the line cap and line
+join parameters to 1 while printing tpic specials.
-The dvi to ps program should be modified to set the line cap and
-line join parameters to 1 while printing tpic specials.
+----------------------------------------------------------------------
* When I print the output groff -Tps, the output is always shifted up
-by about 0.7 inches; I'm using 8.5x11 inch paper.
+ by about 0.7 inches; I'm using 8.5x11 inch paper.
Make sure that PAGE is defined to be `letter' in the top-level
Makefile.
+----------------------------------------------------------------------
+
* When I try to print the output of groff -Tps, I get no output at all
-from the printer, and the log file shows the error
-%%[ error: undefined; offendingcommand: BP ]%%
-I'm using TranScript spooling software.
+ from the printer, and the log file shows the error
+ %%[ error: undefined; offendingcommand: BP ]%%
+ I'm using TranScript spooling software.
This is a bug in the page reversal filter in early versions of
TranScript. Change the `broken' parameter in
/usr/local/lib/groff/font/devps/DESC to 7.
-* When I preview groff -Tps output using the Sun OpenWindows 2.0 pageview
-program, all the pages are displayed on top of each other.
+----------------------------------------------------------------------
+
+* When I preview groff -Tps output using the Sun OpenWindows 2.0
+ pageview program, all the pages are displayed on top of each other.
This is a defect in pageview. Change the `broken' parameter in
/usr/local/lib/groff/font/devps/DESC to 2.
+----------------------------------------------------------------------
+
* With groff -TX75, -TX100 or -X, I can only view the first page.
The left mouse button brings up a menu that allows you to view other
pages.
+----------------------------------------------------------------------
+
* When I print the output of groff -Tdvi, I just get a black dot in
-upper left corner.
+ upper left corner.
Some dvi drivers (notably early versions of xtex) do not correctly
handle dvi files that use a resolution different from that used by dvi
files produced by TeX. Try getting a more up to date driver.
+----------------------------------------------------------------------
+
* I get lots of errors when I use groff with the AT&T -mm macros.
The AT&T -mm macros need a few changes to work with groff; `make
@@ -216,57 +332,80 @@ and make the necessary changes. You may need to edit the commands for
the install.mm target in the Makefile. Alternatively use the groff
-mm macros.
+----------------------------------------------------------------------
+
* gtroff doesn't understand lines like `.ce99' with no space between
-the name of the request or macro and the arguments.
+ the name of the request or macro and the arguments.
-Gtroff requires a space between macro or request and its arguments
+gtroff requires a space between macro or request and its arguments
because it allows the use of long names for macros and requests. You
can use the -C option or the `cp' request to put gtroff into a
compatibility mode in which it is not possible to use long names for
macros but in which no space is required between macros and their
arguments. The use of compatibility mode is strongly discouraged.
+----------------------------------------------------------------------
+
* gtroff gives warnings about lines like
.ev \" a comment
-(with a tab after the .ev).
+ (with a tab after the .ev).
A tab character cannot be used as a substitute for a space character
(except in one case: between a control character at the beginning of a
line and the name of a macro or request). For example, in Unix troff
+
.ps \" restore the previous point size
+
(with a tab after the .ps) will NOT restore the previous point-size;
instead it will be silently ignored. Since this is very likely to be
an error, gtroff can give a warning about it. If you want to align
comments, you can do it like this:
+
.ev\" \" a comment
+----------------------------------------------------------------------
+
* I don't like the page headers and footers produced by groff -man.
There seem to be many different styles of page header and footer
produced by different versions of the -man macros. You will need to
modify macros/tmac.an to suit your personal taste. For example, if
you want the center of the page header to say
+
System Programmer's Manual
+
you will need to change the line
+
.el .ds an-extra3 \"System Programmer's Manual
+
to
+
.el .ds an-extra3 System Programmer's Manual
-* While formatting a manual page, groff complains about not being able to
-break lines. The problem seems to be caused by a line like:
+----------------------------------------------------------------------
+
+* While formatting a manual page, groff complains about not being able
+ to break lines. The problem seems to be caused by a line like:
.TP \w'label'+2
The -man documentation says that the default scale indicator for TP
macro is `n'. The groff -man macros implement this correctly, so that
the argument will be evaluated as if it were
+
\w'label'n+2n
+
The Unix -man macros don't implement this correctly (probably because
it's hard to do in Unix troff); they just append `n' to the entire
argument, so that it will be evaluated as if it were
+
\w'label'u+2n
+
The solution is to fix the manual page:
+
.TP \w'label'u+2
+----------------------------------------------------------------------
+
* I'm having problems formatting Ultrix man pages with groff -man.
The Ultrix man pages use a number of non-standard extensions to the
@@ -299,6 +438,8 @@ Frank Wortner):
Another possible solution is to install tmac/man.ultrix as
/usr/local/lib/groff/tmac/man.local.
+----------------------------------------------------------------------
+
* I'm having problems formatting HP-UX 9.0 man pages with groff -man.
Rename /usr/local/lib/groff/tmac/tmac.an to (for example)
@@ -307,8 +448,10 @@ Rename /usr/local/lib/groff/tmac/tmac.an to (for example)
beginning or filter it (and any files it .so's) through
tmac/fixmacros.sed.
+----------------------------------------------------------------------
+
* I'm having problems formatting man pages produced by the perl
-wrapman script.
+ wrapman script.
Some versions of wrapman have a superfluous blank line before the .TH
line. This must be deleted. Then either use groff -C, or apply the
@@ -387,22 +530,28 @@ following patch:
.SH SYNOPSIS
-* When I preview documents using -TX75 or -TX100, the layout is not the same
-as when I print the document with -Tps: the line and page breaks come
-in different places.
+----------------------------------------------------------------------
+
+* When I preview documents using -TX75 or -TX100, the layout is not
+ the same as when I print the document with -Tps: the line and page
+ breaks come in different places.
Use groff -X -Tps.
+----------------------------------------------------------------------
+
* When I try to run gxditview, I get the error:
-Error: Widget viewport has zero width and/or height
+ Error: Widget viewport has zero width and/or height
This error means you haven't correctly installed the application
defaults file, GXditview.ad; ``make install'' does this for you
automatically, so either you didn't do ``make install'', or you don't
have imake configured correctly.
+----------------------------------------------------------------------
+
* groff uses up an enormous amount of memory processing large files.
-I'm using 386BSD 0.1.
+ I'm using 386BSD 0.1.
386BSD includes an old version of g++, 1.39, which has a bug that
causes a major memory leak in gtroff. Apply the following fix to g++
@@ -436,14 +585,18 @@ and recompile groff:
else
exprstmt = 0;
+----------------------------------------------------------------------
+
* Where can I get grap?
-Grap is not freely available, but there is a nawk script implementing
-an extended subset of grap available for ftp as
-ftp.informatik.uni-rostock.de:/pub/local/software/prag-1.0.shar.gz.
+Ted Faber <faber@lunabase.org> has written a freely available grap:
+
+ http://www.lunabase.org/~faber/Vault/software/grap/
+
+----------------------------------------------------------------------
* How can I use groff with an old LaserJet printer that doesn't work
-with groff -Tlj4?
+ with groff -Tlj4?
You have at least 3 options:
@@ -452,11 +605,13 @@ You have at least 3 options:
- use groff -Tdvi with a TeX .dvi to Laserjet driver;
- use groff with the LaserJet driver in Chris Lewis' psroff package
-(available for ftp from:
-ftp.uunet.ca:/distrib/chris_lewis/psroff3.0pl17).
+ (available for ftp from:
+ ftp.uunet.ca:/distrib/chris_lewis/psroff3.0pl17).
+
+----------------------------------------------------------------------
* Groff seems to generate level 3 Postscript, but my printer is only a
-level 1 or 2 PostScript printer.
+ level 1 or 2 PostScript printer.
In fact groff generates only level 1 PostScript. The `%!PS-Adobe-3.0'
comment at the beginning of PostScript output generated by groff
@@ -465,9 +620,11 @@ Structuring Conventions. The output generated by groff should be
printable on any PostScript printer. Problems with groff output's not
printing are most often caused by the spooling system.
+----------------------------------------------------------------------
+
* The \n(st and \n(sb registers don't seem to work. I thought \w set
-them to the height and depth of its argument, but the registers always
-seem to be 0.
+ them to the height and depth of its argument, but the registers
+ always seem to be 0.
\n(st and \n(sb aren't supposed to give the height and depth of the
string rather they give the minimum and maximum vertical displacement
@@ -475,6 +632,8 @@ of the baseline. For example for \v'2u'\v'-3u', \n(st will be 1 and
\n(sb will be -2. The height and depth of the string is available in
the \n[rst] and \n[rsb] registers: these are groff extensions.
+----------------------------------------------------------------------
+
* On an SGI system, how can I make the man command use groff?
From David Hinds <dhinds@allegro.stanford.edu> (some of these steps
diff --git a/contrib/groff/PROJECTS b/contrib/groff/PROJECTS
index 82c6d65c72bc..87aa844fd827 100644
--- a/contrib/groff/PROJECTS
+++ b/contrib/groff/PROJECTS
@@ -1,6 +1,6 @@
Here are some things that would be useful additions to groff:
- grap
+ ideal preprocessor
-mv macros (for typesetting viewgraphs and slides)
diff --git a/contrib/groff/README b/contrib/groff/README
index 71be21f2340a..62ea08d81384 100644
--- a/contrib/groff/README
+++ b/contrib/groff/README
@@ -2,26 +2,25 @@ This is the GNU groff document formatting system. The version number
is given in the file VERSION.
Included in this release are implementations of troff, pic, eqn, tbl,
-refer, the -man macros and the -ms macros, and drivers for PostScript,
-TeX dvi format, HP LaserJet 4 printers, HTML format (still alpha), and
-typewriter-like devices. Also included is a modified version of the
-Berkeley -me macros, an enhanced version of the X11 xditview
-previewer, and an implementation of the -mm macros contributed by
-Joergen Haegg (jh@axis.se).
+grn, refer, -man, -mdoc, and -ms macros, and drivers for PostScript, TeX
+dvi format, HP LaserJet 4 printers, Canon CAPSL printers, HTML format
+(still alpha), and typewriter-like devices. Also included is a modified
+version of the Berkeley -me macros, an enhanced version of the X11
+xditview previewer, and an implementation of the -mm macros contributed
+by Joergen Haegg (jh@axis.se).
-See the file INSTALL for installation instructions. You will require
-a C++ compiler.
+See the file INSTALL for installation instructions. You will require a
+C++ compiler.
The file NEWS describes recent user-visible changes to groff.
Groff is free software. See the file COPYING for copying permission.
-The file PROBLEMS describes various problems that have been
-encountered in compiling, installing, and running groff.
+The file PROBLEMS describes various problems that have been encountered
+in compiling, installing, and running groff.
-For the moment, the documentation assumes that you are already
-familiar with the Unix versions of troff, -man, -ms and the
-preprocessors.
+For the moment, the documentation assumes that you are already familiar
+with the Unix versions of troff, -man, -ms, and the preprocessors.
The most recent released version of groff is always available by
anonymous ftp from ftp.gnu.org in the directory pub/gnu/groff.
@@ -37,7 +36,7 @@ version of groff. You can access it with the commands
After a successful login you no longer need the first two commands; an
update of a checked out repository should be done with
- cvs -z9 update -d
+ cvs -z9 update -dP
Please read the info pages of cvs for further details.
@@ -50,12 +49,20 @@ or a diff file relative to the latest official groff release as
ftp://ftp.ffii.org/pub/groff/devel/groff-<version>-current.diff.gz
+Assuming that groff-<version>.tar.gz and
+groff-<version>-current.diff.gz are in the same directory, do the
+following to apply the diff file:
+
+ tar xzvf groff-<version>.tar.gz
+ cd groff-<version>
+ gunzip -c ../groff-<version>-current.diff.gz | patch -p1
+
Please report bugs using the form in the file BUG-REPORT; the idea of
this is to make sure that FSF has all the information it needs to fix
the bug. At the very least, read the BUG-REPORT form and make sure
that you supply all the information that it asks for. Even if you are
-not sure that something is a bug, report it using BUG-REPORT: this
-will enable us to determine whether it really is a bug or not.
+not sure that something is a bug, report it using BUG-REPORT: this will
+enable us to determine whether it really is a bug or not.
Three mailing lists are available:
@@ -68,8 +75,8 @@ Note that groff@gnu.org is an alias for groff@ffii.org; you must be
subscribed to the `groff' and `groff-commit' lists to send mails.
To subscribe, send a mail to <list>-request@<domain> (example:
-groff-request@ffii.org) with the word `subscribe' in either the
-subject or body of the email (don't include the quotes).
+groff-request@ffii.org) with the word `subscribe' in either the subject
+or body of the email (don't include the quotes).
GNU groff was written by James Clark <jjc@jclark.com>. It is now
maintained by Ted Harding <ted.harding@nessie.mcc.ac.uk> and Werner
diff --git a/contrib/groff/README.WIN32 b/contrib/groff/README.WIN32
new file mode 100644
index 000000000000..478d13a1fe0d
--- /dev/null
+++ b/contrib/groff/README.WIN32
@@ -0,0 +1,68 @@
+
+WIN32 port of GROFF and friends done by Blake McBride
+(blake@florida-software.com) 4/14/00.
+
+This port differs from other ports in that it uses the Microsoft
+compiler. The changes were done such that they only have effect on
+the code when compiled with the Microsoft compiler.
+
+Note that not all preprocessors and output devices have been ported;
+missing are grohtml, grolbp, grn, refer, soelim, and groff. Besides
+these programs, no utility program has been ported. Of course,
+gxditview (which only runs on the X Window System, the standard Unix
+GUI) is missing also.
+
+
+The following programs were used, running on Windows NT 4.0:
+
+ Microsoft Visual C++ 6.0
+ Unix utilities under NT (gzip, tar, patch)
+
+
+Build Instructions
+------------------
+
+. Unpack groff (using gzip & tar) as follows:
+
+ cd \
+ gzip -dc groff-1.16.tar.gz | tar xvf -
+
+. Now apply the patch file `win32-diffs':
+
+ cd \groff-1.16
+ patch -p1 < win32-diffs
+
+ Note that with older versions of `patch', you will get a lot of
+ *.orig files (most of them are empty) which can be safely deleted.
+
+. Edit the file `src/include/defs.h' and adapt the path names to
+ your needs.
+
+. Build everything by typing:
+
+ nmake -f Makefile.msc
+
+You are done.
+
+The `bin' directory contains some .cmd files to help show how to run
+stuff. Since Windows 95/98 doesn't understand .cmd files, if you are
+operating under that OS, you'll have to rename them to .bat files.
+.bat files do have output redirection problems.
+
+
+The changes I made fall into two categories.
+
+1. Makefiles. Several makefiles were added. All makefiles were named
+ Makefile.msc.
+
+2. The Groff build includes several scripts which generate auxiliary
+ files used by groff (such as DESC, I, R, prologue, etc).
+
+
+Directories needed at runtime
+-----------------------------
+
+bin
+font
+tmac
+mm (copied, including sub-directories, from contrib/mm)
diff --git a/contrib/groff/REVISION b/contrib/groff/REVISION
new file mode 100644
index 000000000000..d00491fd7e5b
--- /dev/null
+++ b/contrib/groff/REVISION
@@ -0,0 +1 @@
+1
diff --git a/contrib/groff/TODO b/contrib/groff/TODO
index 9cb74c239f65..c540d3ce68ca 100644
--- a/contrib/groff/TODO
+++ b/contrib/groff/TODO
@@ -1,3 +1,10 @@
+Unicode input:
+ Implementing \U'xxxx' to access Unicode characters directly.
+
+ Making groff 16bit input-clean.
+
+Separating input and output encodings (similar to LaTeX).
+
Better selection of paper sizes with -Tps.
Make -Tlj4 work with -X.
@@ -8,8 +15,6 @@ Provide man.sun implementing .TX.
Improve GROFF_PRINT macro in aclocal.m4.
-Put all dev* files in a separate subdirectory `font'.
-
Provide a `check' target.
Provide a `bindist' target.
diff --git a/contrib/groff/VERSION b/contrib/groff/VERSION
index d40acaaea098..e71519696fb2 100644
--- a/contrib/groff/VERSION
+++ b/contrib/groff/VERSION
@@ -1 +1 @@
-1.15
+1.16
diff --git a/contrib/groff/aclocal.m4 b/contrib/groff/aclocal.m4
index e3e37f30104e..1cd92ce2e7cf 100644
--- a/contrib/groff/aclocal.m4
+++ b/contrib/groff/aclocal.m4
@@ -55,7 +55,7 @@ dnl Bison generated parsers have problems with C++ compilers other than g++.
dnl So byacc is preferred over bison.
dnl
AC_DEFUN(GROFF_PROG_YACC,
-[AC_CHECK_PROGS(YACC, byacc 'bison -y', yacc)])
+[AC_CHECK_PROGS(YACC, byacc 'bison -y', yacc)])dnl
dnl
dnl
dnl GROFF_CSH_HACK(if hack present, if not present)
@@ -103,53 +103,16 @@ AC_MSG_RESULT(no))
AC_LANG_RESTORE])dnl
dnl
dnl
-AC_DEFUN(GROFF_GETOPT,
-[AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-AC_MSG_CHECKING([declaration of getopt in stdlib.h])
-AC_TRY_COMPILE([#include <stdlib.h>
-extern "C" { void getopt(int); }],,
-AC_MSG_RESULT(no),
-AC_MSG_RESULT(yes);AC_DEFINE(STDLIB_H_DECLARES_GETOPT))
-AC_MSG_CHECKING([declaration of getopt in unistd.h])
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <unistd.h>
-extern "C" { void getopt(int); }],,
-AC_MSG_RESULT(no),
-AC_MSG_RESULT(yes);AC_DEFINE(UNISTD_H_DECLARES_GETOPT))
-AC_LANG_RESTORE])dnl
+dnl srand() of SunOS 4.1.3 has return type int instead of void
dnl
-dnl
-AC_DEFUN(GROFF_PUTENV,
+AC_DEFUN(GROFF_SRAND,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
-AC_MSG_CHECKING([declaration of putenv])
+AC_MSG_CHECKING([for return type of srand])
AC_TRY_COMPILE([#include <stdlib.h>
-extern "C" { void putenv(int); }],,
-AC_MSG_RESULT(no),
-AC_MSG_RESULT(yes);AC_DEFINE(STDLIB_H_DECLARES_PUTENV))
-AC_LANG_RESTORE])dnl
-dnl
-dnl
-AC_DEFUN(GROFF_POPEN,
-[AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-AC_MSG_CHECKING([declaration of popen])
-AC_TRY_COMPILE([#include <stdio.h>
-extern "C" { void popen(int); }],,
-AC_MSG_RESULT(no),
-AC_MSG_RESULT(yes);AC_DEFINE(STDIO_H_DECLARES_POPEN))
-AC_LANG_RESTORE])dnl
-dnl
-dnl
-AC_DEFUN(GROFF_PCLOSE,
-[AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-AC_MSG_CHECKING([declaration of pclose])
-AC_TRY_COMPILE([#include <stdio.h>
-extern "C" { void pclose(int); }],,
-AC_MSG_RESULT(no),
-AC_MSG_RESULT(yes);AC_DEFINE(STDIO_H_DECLARES_PCLOSE))
+extern "C" { void srand(unsigned int); }],,
+AC_MSG_RESULT(void);AC_DEFINE(RET_TYPE_SRAND_IS_VOID),
+AC_MSG_RESULT(int))
AC_LANG_RESTORE])dnl
dnl
dnl
@@ -177,17 +140,6 @@ AC_MSG_RESULT(no))
AC_LANG_RESTORE])dnl
dnl
dnl
-AC_DEFUN(GROFF_HYPOT,
-[AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-AC_MSG_CHECKING([declaration of hypot])
-AC_TRY_COMPILE([#include <math.h>
-extern "C" { double hypot(double,double); }],,
-AC_MSG_RESULT(no),
-AC_MSG_RESULT(yes);AC_DEFINE(MATH_H_DECLARES_HYPOT))
-AC_LANG_RESTORE])dnl
-dnl
-dnl
AC_DEFUN(GROFF_OSFCN_H,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
@@ -318,8 +270,7 @@ AC_SUBST(PAGE)])dnl
dnl
dnl
AC_DEFUN(GROFF_CXX_CHECK,
-[AC_REQUIRE([AC_C_CROSS])
-AC_REQUIRE([AC_PROG_CXX])
+[AC_REQUIRE([AC_PROG_CXX])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
if test "$cross_compiling" = no; then
@@ -353,8 +304,7 @@ AC_TRY_LINK([#include <stdio.h>],
[fopen(0, 0);],
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no);AC_MSG_ERROR([header files do not support C++ (if you are using a version of gcc/g++ earlier than 2.5, you should install libg++)]))
-AC_LANG_RESTORE
-])dnl
+AC_LANG_RESTORE])dnl
dnl
dnl
AC_DEFUN(GROFF_TMAC,
@@ -413,8 +363,7 @@ elif test -n "$sys_tmac_prefix"; then
rm -f conftest.sol
fi
AC_MSG_RESULT([$tmac_wrap])
-AC_SUBST(tmac_wrap)
-])dnl
+AC_SUBST(tmac_wrap)])dnl
dnl
dnl
AC_DEFUN(GROFF_G,
@@ -426,8 +375,7 @@ else
AC_MSG_RESULT(no)
g=
fi
-AC_SUBST(g)
-])dnl
+AC_SUBST(g)])dnl
dnl
dnl
dnl We need the path to install-sh to be absolute.
@@ -435,8 +383,7 @@ dnl
AC_DEFUN(GROFF_INSTALL_SH,
[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
ac_dir=`cd $ac_aux_dir; pwd`
-ac_install_sh="$ac_dir/install-sh -c"
-])dnl
+ac_install_sh="$ac_dir/install-sh -c"])dnl
dnl
dnl
dnl At least one UNIX system, Apple Macintosh Rhapsody 5.5,
@@ -444,5 +391,122 @@ dnl does not have -lm.
dnl
AC_DEFUN(GROFF_LIBM,
[AC_CHECK_LIB(m,sin,LIBM=-lm)
-AC_SUBST(LIBM)
-])
+AC_SUBST(LIBM)])dnl
+dnl
+dnl
+dnl We need top_srcdir to be absolute.
+dnl
+AC_DEFUN(GROFF_SRCDIR,
+[ac_srcdir_defaulted=no
+srcdir=`cd $srcdir; pwd`])dnl
+dnl
+dnl
+dnl This simplifies Makefile rules.
+dnl
+AC_DEFUN(GROFF_BUILDDIR,
+[top_builddir=`pwd`
+AC_SUBST(top_builddir)])dnl
+dnl
+dnl
+dnl Check for EBCDIC - stolen from the OS390 Unix LYNX port
+dnl
+AC_DEFUN(GROFF_EBCDIC,
+[AC_MSG_CHECKING([whether character set is EBCDIC])
+AC_TRY_COMPILE(,
+[/* Treat any failure as ASCII for compatibility with existing art.
+ Use compile-time rather than run-time tests for cross-compiler
+ tolerance. */
+#if '0' != 240
+make an error "Character set is not EBCDIC"
+#endif],
+groff_cv_ebcdic="yes"
+ TTYDEVDIRS="font/devcp1047"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(IS_EBCDIC_HOST),
+groff_cv_ebcdic="no"
+ TTYDEVDIRS="font/devascii font/devlatin1 font/devutf8"
+ AC_MSG_RESULT(no))
+AC_SUBST(TTYDEVDIRS)])dnl
+dnl
+dnl
+dnl Check for OS/390 Unix. We test for EBCDIC also -- the Linux port (with
+dnl gcc) to OS/390 uses ASCII internally.
+dnl
+AC_DEFUN(GROFF_OS390,
+[groff_cv_os390="no"
+if test "$groff_cv_ebcdic" = "yes"; then
+ AC_MSG_CHECKING([for OS/390 Unix])
+ case `uname` in
+ OS/390)
+ CFLAGS="$CFLAGS -D_ALL_SOURCE"
+ groff_cv_os390="yes"
+ AC_MSG_RESULT(yes) ;;
+ *)
+ AC_MSG_RESULT(no) ;;
+ esac
+fi])dnl
+dnl
+dnl
+dnl Finally, we must modify a base function of autoconf to replace the
+dnl ASCII char `012' with its generic equivalent `\n' if we run under
+dnl OS/390 Unix -- unfortunately, not all `tr' variants understand `\n',
+dnl so this hack is necessary.
+dnl
+define([AC_OUTPUT_MAKE_DEFS],
+[# Transform confdefs.h into DEFS.
+dnl Using a here document instead of a string reduces the quoting nightmare.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+changequote(<<, >>)dnl
+s%<<#define>> \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ `~<<#>>$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+changequote([, ])dnl
+EOF
+if test "$groff_cv_os390" = "yes"; then
+ DEFS=`sed -f conftest.defs confdefs.h | tr '\n' ' '`
+else
+ DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+fi
+rm -f conftest.defs
+])dnl
+dnl
+dnl
+dnl Check whether we need a declaration for a function.
+dnl
+dnl Stolen from GNU bfd.
+dnl
+AC_DEFUN(GROFF_NEED_DECLARATION,
+[AC_MSG_CHECKING([whether $1 must be declared])
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_CACHE_VAL(groff_cv_decl_needed_$1,
+[AC_TRY_COMPILE([
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif],
+[char *(*pfn) = (char *(*)) $1],
+groff_cv_decl_needed_$1=no,
+groff_cv_decl_needed_$1=yes)])
+AC_MSG_RESULT($groff_cv_decl_needed_$1)
+if test $groff_cv_decl_needed_$1 = yes; then
+ AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]))
+fi
+AC_LANG_RESTORE])dnl
diff --git a/contrib/groff/addftinfo/Makefile.sub b/contrib/groff/addftinfo/Makefile.sub
index 95a8f5bf5857..23848d54fc72 100644
--- a/contrib/groff/addftinfo/Makefile.sub
+++ b/contrib/groff/addftinfo/Makefile.sub
@@ -1,6 +1,11 @@
PROG=addftinfo
MAN1=addftinfo.n
XLIBS=$(LIBGROFF)
-OBJS=addftinfo.o guess.o
-CCSRCS=addftinfo.cc guess.cc
-HDRS=guess.h
+OBJS=\
+ addftinfo.o \
+ guess.o
+CCSRCS=\
+ $(srcdir)/addftinfo.cc \
+ $(srcdir)/guess.cc
+HDRS=\
+ $(srcdir)/guess.h
diff --git a/contrib/groff/afmtodit/Makefile.sub b/contrib/groff/afmtodit/Makefile.sub
index fb5daac6ce84..9fee2def5745 100644
--- a/contrib/groff/afmtodit/Makefile.sub
+++ b/contrib/groff/afmtodit/Makefile.sub
@@ -13,9 +13,9 @@ afmtodit: afmtodit.pl
chmod +x afmtodit
install_data: afmtodit
- -test -d $(bindir) || mkdir $(bindir)
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/afmtodit
- $(INSTALL_PROGRAM) afmtodit $(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
index 84fe8f292c0f..e0631e092e0f 100644
--- a/contrib/groff/afmtodit/afmtodit.man
+++ b/contrib/groff/afmtodit/afmtodit.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -26,25 +26,26 @@ the original English.
.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
-[
-.B \-ns
-]
-[
-.BI \-d desc_file
-]
-[
-.BI \-e enc_file
-]
-[
-.BI \-i n
-]
-[
-.BI \-a n
-]
+.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
diff --git a/contrib/groff/afmtodit/afmtodit.pl b/contrib/groff/afmtodit/afmtodit.pl
index c3d839a224a8..a44ae7a2d6fb 100644
--- a/contrib/groff/afmtodit/afmtodit.pl
+++ b/contrib/groff/afmtodit/afmtodit.pl
@@ -1,6 +1,6 @@
#! /usr/bin/perl -P-
# -*- Perl -*-
-#Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+#Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
#This file is part of groff.
@@ -311,7 +311,7 @@ for ($i = 0; $i < 256; $i++) {
printf(",%d", do conv($h));
}
printf("\t%d", $type);
- printf("\t0%03o\t%s\n", $i, $ch);
+ printf("\t0%03o\t-- %s\n", $i, $ch);
for ($j = 1; $j < $nmap{$ch}; $j++) {
printf("%s\t\"\n", $map{$ch,$j});
}
diff --git a/contrib/groff/configure b/contrib/groff/configure
index e6800ae4e814..31d9341e8952 100755
--- a/contrib/groff/configure
+++ b/contrib/groff/configure
@@ -451,7 +451,7 @@ echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=groff/groff.cc
+ac_unique_file=src/roff/groff/groff.cc
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
@@ -521,10 +521,14 @@ else
fi
+ac_srcdir_defaulted=no
+srcdir=`cd $srcdir; pwd`
+top_builddir=`pwd`
+
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:528: checking for $ac_word" >&5
+echo "configure:532: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -554,7 +558,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:558: checking for $ac_word" >&5
+echo "configure:562: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -605,7 +609,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:609: checking for $ac_word" >&5
+echo "configure:613: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -637,7 +641,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:641: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:645: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -648,12 +652,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 652 "configure"
+#line 656 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -679,12 +683,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:683: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:687: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:688: checking whether we are using GNU C" >&5
+echo "configure:692: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -693,7 +697,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -712,7 +716,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:716: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:720: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -748,7 +752,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:752: checking for $ac_word" >&5
+echo "configure:756: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -780,7 +784,7 @@ test -n "$CXX" || CXX="gcc"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:784: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:788: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -791,12 +795,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext << EOF
-#line 795 "configure"
+#line 799 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cxx_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -822,12 +826,12 @@ if test $ac_cv_prog_cxx_works = no; then
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:826: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:830: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:831: checking whether we are using GNU C++" >&5
+echo "configure:835: checking whether we are using GNU C++" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -836,7 +840,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:844: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gxx=yes
else
ac_cv_prog_gxx=no
@@ -855,7 +859,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=
echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:859: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:863: checking whether ${CXX-g++} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -888,8 +892,6 @@ fi
-
-
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -899,20 +901,20 @@ cross_compiling=$ac_cv_prog_cxx_cross
if test "$cross_compiling" = no; then
echo $ac_n "checking that C++ compiler can compile simple program""... $ac_c" 1>&6
-echo "configure:903: checking that C++ compiler can compile simple program" >&5
+echo "configure:905: checking that C++ compiler can compile simple program" >&5
fi
if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 909 "configure"
+#line 911 "configure"
#include "confdefs.h"
#ifdef __cplusplus
extern "C" void exit(int);
#endif
int main() { return 0; }
EOF
-if { (eval echo configure:916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
echo "$ac_t""yes" 1>&6
else
@@ -926,13 +928,13 @@ fi
if test "$cross_compiling" = no; then
echo $ac_n "checking that C++ static constructors and destructors are called""... $ac_c" 1>&6
-echo "configure:930: checking that C++ static constructors and destructors are called" >&5
+echo "configure:932: checking that C++ static constructors and destructors are called" >&5
fi
if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 936 "configure"
+#line 938 "configure"
#include "confdefs.h"
#ifdef __cplusplus
extern "C" void exit(int);
@@ -951,7 +953,7 @@ A a;
int main() { return 1; }
EOF
-if { (eval echo configure:955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
echo "$ac_t""yes" 1>&6
else
@@ -964,16 +966,16 @@ rm -fr conftest*
fi
echo $ac_n "checking that header files support C++""... $ac_c" 1>&6
-echo "configure:968: checking that header files support C++" >&5
+echo "configure:970: checking that header files support C++" >&5
cat > conftest.$ac_ext <<EOF
-#line 970 "configure"
+#line 972 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
fopen(0, 0);
; return 0; }
EOF
-if { (eval echo configure:977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
@@ -990,14 +992,60 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
+echo $ac_n "checking whether character set is EBCDIC""... $ac_c" 1>&6
+echo "configure:997: checking whether character set is EBCDIC" >&5
+cat > conftest.$ac_ext <<EOF
+#line 999 "configure"
+#include "confdefs.h"
+int main() {
+/* Treat any failure as ASCII for compatibility with existing art.
+ Use compile-time rather than run-time tests for cross-compiler
+ tolerance. */
+#if '0' != 240
+make an error "Character set is not EBCDIC"
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ groff_cv_ebcdic="yes"
+ TTYDEVDIRS="font/devcp1047"
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define IS_EBCDIC_HOST 1
+EOF
+
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ groff_cv_ebcdic="no"
+ TTYDEVDIRS="font/devascii font/devlatin1 font/devutf8"
+ echo "$ac_t""no" 1>&6
+fi
+rm -f conftest*
+
+groff_cv_os390="no"
+if test "$groff_cv_ebcdic" = "yes"; then
+ echo $ac_n "checking for OS/390 Unix""... $ac_c" 1>&6
+echo "configure:1033: checking for OS/390 Unix" >&5
+ case `uname` in
+ OS/390)
+ CFLAGS="$CFLAGS -D_ALL_SOURCE"
+ groff_cv_os390="yes"
+ echo "$ac_t""yes" 1>&6 ;;
+ *)
+ echo "$ac_t""no" 1>&6 ;;
+ esac
+fi
if test -z "$PSPRINT"; then
for ac_prog in lpr
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1001: checking for $ac_word" >&5
+echo "configure:1049: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LPR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1031,7 +1079,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1035: checking for $ac_word" >&5
+echo "configure:1083: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1069,7 +1117,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1073: checking for $ac_word" >&5
+echo "configure:1121: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LPQ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1108,11 +1156,11 @@ done
fi
echo $ac_n "checking for command to use for printing PostScript files""... $ac_c" 1>&6
-echo "configure:1112: checking for command to use for printing PostScript files" >&5
+echo "configure:1160: checking for command to use for printing PostScript files" >&5
echo "$ac_t""$PSPRINT" 1>&6
# Figure out DVIPRINT from PSPRINT.
echo $ac_n "checking for command to use for printing dvi files""... $ac_c" 1>&6
-echo "configure:1116: checking for command to use for printing dvi files" >&5
+echo "configure:1164: checking for command to use for printing dvi files" >&5
if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
if test "X$PSPRINT" = "Xlpr"; then
DVIPRINT="lpr -d"
@@ -1125,7 +1173,7 @@ echo "$ac_t""$DVIPRINT" 1>&6
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1129: checking for $ac_word" >&5
+echo "configure:1177: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERLPATH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1163,7 +1211,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1167: checking for $ac_word" >&5
+echo "configure:1215: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1196,7 +1244,7 @@ test -n "$YACC" || YACC="yacc"
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1200: checking for $ac_word" >&5
+echo "configure:1248: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1244,7 +1292,6 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
ac_dir=`cd $ac_aux_dir; pwd`
ac_install_sh="$ac_dir/install-sh -c"
-
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@@ -1257,7 +1304,7 @@ ac_install_sh="$ac_dir/install-sh -c"
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1261: checking for a BSD compatible install" >&5
+echo "configure:1308: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1310,7 +1357,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1314: checking whether ln -s works" >&5
+echo "configure:1361: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1331,7 +1378,7 @@ else
fi
echo $ac_n "checking for csh hash hack""... $ac_c" 1>&6
-echo "configure:1335: checking for csh hash hack" >&5
+echo "configure:1382: checking for csh hash hack" >&5
cat <<EOF >conftest.sh
#!/bin/sh
true || exit 0
@@ -1347,7 +1394,7 @@ fi
rm -f conftest.sh
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1351: checking how to run the C preprocessor" >&5
+echo "configure:1398: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1362,13 +1409,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1366 "configure"
+#line 1413 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1372: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1419: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1379,13 +1426,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1383 "configure"
+#line 1430 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1389: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1396,13 +1443,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1400 "configure"
+#line 1447 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1406: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1453: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1426,21 +1473,22 @@ else
fi
echo "$ac_t""$CPP" 1>&6
-for ac_hdr in unistd.h dirent.h limits.h sys/dir.h stdlib.h
+for ac_hdr in stdlib.h unistd.h dirent.h limits.h sys/dir.h \
+ string.h strings.h math.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1434: checking for $ac_hdr" >&5
+echo "configure:1482: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1439 "configure"
+#line 1487 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1492: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1467,7 +1515,7 @@ fi
done
echo $ac_n "checking for ISC 3.x or 4.x""... $ac_c" 1>&6
-echo "configure:1471: checking for ISC 3.x or 4.x" >&5
+echo "configure:1519: checking for ISC 3.x or 4.x" >&5
if grep '[34]\.' /usr/options/cb.name >/dev/null 2>&1
then
echo "$ac_t""yes" 1>&6
@@ -1479,7 +1527,7 @@ else
echo "$ac_t""no" 1>&6
fi
echo $ac_n "checking whether -D_POSIX_SOURCE is necessary""... $ac_c" 1>&6
-echo "configure:1483: checking whether -D_POSIX_SOURCE is necessary" >&5
+echo "configure:1531: checking whether -D_POSIX_SOURCE is necessary" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1489,7 +1537,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 1493 "configure"
+#line 1541 "configure"
#include "confdefs.h"
#include <stdio.h>
extern "C" { void fileno(int); }
@@ -1497,7 +1545,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:1501: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
#define _POSIX_SOURCE 1
@@ -1525,55 +1573,94 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking declaration of getopt in stdlib.h""... $ac_c" 1>&6
-echo "configure:1530: checking declaration of getopt in stdlib.h" >&5
+echo $ac_n "checking for return type of srand""... $ac_c" 1>&6
+echo "configure:1578: checking for return type of srand" >&5
cat > conftest.$ac_ext <<EOF
-#line 1532 "configure"
+#line 1580 "configure"
#include "confdefs.h"
#include <stdlib.h>
-extern "C" { void getopt(int); }
+extern "C" { void srand(unsigned int); }
int main() {
; return 0; }
EOF
-if { (eval echo configure:1540: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ echo "$ac_t""void" 1>&6;cat >> confdefs.h <<\EOF
+#define RET_TYPE_SRAND_IS_VOID 1
+EOF
+
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define STDLIB_H_DECLARES_GETOPT 1
-EOF
-
+ echo "$ac_t""int" 1>&6
fi
rm -f conftest*
-echo $ac_n "checking declaration of getopt in unistd.h""... $ac_c" 1>&6
-echo "configure:1554: checking declaration of getopt in unistd.h" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1556 "configure"
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether hypot must be declared""... $ac_c" 1>&6
+echo "configure:1609: checking whether hypot must be declared" >&5
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+if eval "test \"`echo '$''{'groff_cv_decl_needed_hypot'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1622 "configure"
#include "confdefs.h"
-#include <sys/types.h>
+
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
-extern "C" { void getopt(int); }
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
int main() {
-
+char *(*pfn) = (char *(*)) hypot
; return 0; }
EOF
-if { (eval echo configure:1565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ groff_cv_decl_needed_hypot=no
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define UNISTD_H_DECLARES_GETOPT 1
+ groff_cv_decl_needed_hypot=yes
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$groff_cv_decl_needed_hypot" 1>&6
+if test $groff_cv_decl_needed_hypot = yes; then
+ cat >> confdefs.h <<\EOF
+#define NEED_DECLARATION_HYPOT 1
EOF
fi
-rm -f conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
@@ -1581,6 +1668,8 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
+echo $ac_n "checking whether popen must be declared""... $ac_c" 1>&6
+echo "configure:1673: checking whether popen must be declared" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1589,30 +1678,53 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking declaration of putenv""... $ac_c" 1>&6
-echo "configure:1594: checking declaration of putenv" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1596 "configure"
+if eval "test \"`echo '$''{'groff_cv_decl_needed_popen'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1686 "configure"
#include "confdefs.h"
+
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-extern "C" { void putenv(int); }
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
int main() {
-
+char *(*pfn) = (char *(*)) popen
; return 0; }
EOF
-if { (eval echo configure:1604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1710: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ groff_cv_decl_needed_popen=no
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define STDLIB_H_DECLARES_PUTENV 1
+ groff_cv_decl_needed_popen=yes
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$groff_cv_decl_needed_popen" 1>&6
+if test $groff_cv_decl_needed_popen = yes; then
+ cat >> confdefs.h <<\EOF
+#define NEED_DECLARATION_POPEN 1
EOF
fi
-rm -f conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
@@ -1620,6 +1732,8 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
+echo $ac_n "checking whether pclose must be declared""... $ac_c" 1>&6
+echo "configure:1737: checking whether pclose must be declared" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1628,30 +1742,53 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking declaration of popen""... $ac_c" 1>&6
-echo "configure:1633: checking declaration of popen" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1635 "configure"
+if eval "test \"`echo '$''{'groff_cv_decl_needed_pclose'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1750 "configure"
#include "confdefs.h"
+
#include <stdio.h>
-extern "C" { void popen(int); }
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
int main() {
-
+char *(*pfn) = (char *(*)) pclose
; return 0; }
EOF
-if { (eval echo configure:1643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ groff_cv_decl_needed_pclose=no
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define STDIO_H_DECLARES_POPEN 1
+ groff_cv_decl_needed_pclose=yes
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$groff_cv_decl_needed_pclose" 1>&6
+if test $groff_cv_decl_needed_pclose = yes; then
+ cat >> confdefs.h <<\EOF
+#define NEED_DECLARATION_PCLOSE 1
EOF
fi
-rm -f conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
@@ -1659,6 +1796,8 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
+echo $ac_n "checking whether putenv must be declared""... $ac_c" 1>&6
+echo "configure:1801: checking whether putenv must be declared" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1667,30 +1806,53 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking declaration of pclose""... $ac_c" 1>&6
-echo "configure:1672: checking declaration of pclose" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1674 "configure"
+if eval "test \"`echo '$''{'groff_cv_decl_needed_putenv'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1814 "configure"
#include "confdefs.h"
+
#include <stdio.h>
-extern "C" { void pclose(int); }
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
int main() {
-
+char *(*pfn) = (char *(*)) putenv
; return 0; }
EOF
-if { (eval echo configure:1682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ groff_cv_decl_needed_putenv=no
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define STDIO_H_DECLARES_PCLOSE 1
+ groff_cv_decl_needed_putenv=yes
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$groff_cv_decl_needed_putenv" 1>&6
+if test $groff_cv_decl_needed_putenv = yes; then
+ cat >> confdefs.h <<\EOF
+#define NEED_DECLARATION_PUTENV 1
EOF
fi
-rm -f conftest*
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
@@ -1698,6 +1860,8 @@ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
+echo $ac_n "checking whether strncasecmp must be declared""... $ac_c" 1>&6
+echo "configure:1865: checking whether strncasecmp must be declared" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1706,30 +1870,53 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking for sys_nerr in <errno.h> or <stdio.h>""... $ac_c" 1>&6
-echo "configure:1711: checking for sys_nerr in <errno.h> or <stdio.h>" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1713 "configure"
+if eval "test \"`echo '$''{'groff_cv_decl_needed_strncasecmp'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1878 "configure"
#include "confdefs.h"
-#include <errno.h>
+
#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
int main() {
-int k; k = sys_nerr;
+char *(*pfn) = (char *(*)) strncasecmp
; return 0; }
EOF
-if { (eval echo configure:1721: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define HAVE_SYS_NERR 1
-EOF
-
+ groff_cv_decl_needed_strncasecmp=no
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ groff_cv_decl_needed_strncasecmp=yes
fi
rm -f conftest*
+fi
+
+echo "$ac_t""$groff_cv_decl_needed_strncasecmp" 1>&6
+if test $groff_cv_decl_needed_strncasecmp = yes; then
+ cat >> confdefs.h <<\EOF
+#define NEED_DECLARATION_STRNCASECMP 1
+EOF
+
+fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
@@ -1745,21 +1932,21 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking for sys_errlist in <errno.h> or <stdio.h>""... $ac_c" 1>&6
-echo "configure:1750: checking for sys_errlist in <errno.h> or <stdio.h>" >&5
+echo $ac_n "checking for sys_nerr in <errno.h> or <stdio.h>""... $ac_c" 1>&6
+echo "configure:1937: checking for sys_nerr in <errno.h> or <stdio.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 1752 "configure"
+#line 1939 "configure"
#include "confdefs.h"
#include <errno.h>
#include <stdio.h>
int main() {
-int k; k = (int)sys_errlist[0];
+int k; k = sys_nerr;
; return 0; }
EOF
-if { (eval echo configure:1760: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define HAVE_SYS_ERRLIST 1
+#define HAVE_SYS_NERR 1
EOF
else
@@ -1784,28 +1971,28 @@ ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-echo $ac_n "checking declaration of hypot""... $ac_c" 1>&6
-echo "configure:1789: checking declaration of hypot" >&5
+echo $ac_n "checking for sys_errlist in <errno.h> or <stdio.h>""... $ac_c" 1>&6
+echo "configure:1976: checking for sys_errlist in <errno.h> or <stdio.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 1791 "configure"
+#line 1978 "configure"
#include "confdefs.h"
-#include <math.h>
-extern "C" { double hypot(double,double); }
+#include <errno.h>
+#include <stdio.h>
int main() {
-
+int k; k = (int)sys_errlist[0];
; return 0; }
EOF
-if { (eval echo configure:1799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- echo "$ac_t""no" 1>&6
+ echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
+#define HAVE_SYS_ERRLIST 1
+EOF
+
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
-#define MATH_H_DECLARES_HYPOT 1
-EOF
-
+ echo "$ac_t""no" 1>&6
fi
rm -f conftest*
ac_ext=c
@@ -1824,16 +2011,16 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking C++ <osfcn.h>""... $ac_c" 1>&6
-echo "configure:1828: checking C++ <osfcn.h>" >&5
+echo "configure:2015: checking C++ <osfcn.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 1830 "configure"
+#line 2017 "configure"
#include "confdefs.h"
#include <osfcn.h>
int main() {
read(0, 0, 0); open(0, 0);
; return 0; }
EOF
-if { (eval echo configure:1837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
#define HAVE_CC_OSFCN_H 1
@@ -1862,16 +2049,16 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking C++ <limits.h>""... $ac_c" 1>&6
-echo "configure:1866: checking C++ <limits.h>" >&5
+echo "configure:2053: checking C++ <limits.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 1868 "configure"
+#line 2055 "configure"
#include "confdefs.h"
#include <limits.h>
int main() {
int x = INT_MIN; int y = INT_MAX; int z = UCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:1875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
#define HAVE_CC_LIMITS_H 1
@@ -1900,16 +2087,16 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking for declaration of time_t""... $ac_c" 1>&6
-echo "configure:1904: checking for declaration of time_t" >&5
+echo "configure:2091: checking for declaration of time_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 1906 "configure"
+#line 2093 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
time_t t = time(0); struct tm *p = localtime(&t);
; return 0; }
EOF
-if { (eval echo configure:1913: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2100: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
@@ -1930,12 +2117,12 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1934: checking return type of signal handlers" >&5
+echo "configure:2121: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1939 "configure"
+#line 2126 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -1952,7 +2139,7 @@ int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:1956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
@@ -1971,16 +2158,16 @@ EOF
echo $ac_n "checking struct exception""... $ac_c" 1>&6
-echo "configure:1975: checking struct exception" >&5
+echo "configure:2162: checking struct exception" >&5
cat > conftest.$ac_ext <<EOF
-#line 1977 "configure"
+#line 2164 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
struct exception e;
; return 0; }
EOF
-if { (eval echo configure:1984: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2171: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
#define HAVE_STRUCT_EXCEPTION 1
@@ -1994,7 +2181,7 @@ else
fi
rm -f conftest*
echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:1998: checking for sin in -lm" >&5
+echo "configure:2185: checking for sin in -lm" >&5
ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2002,7 +2189,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2006 "configure"
+#line 2193 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2013,7 +2200,7 @@ int main() {
sin()
; return 0; }
EOF
-if { (eval echo configure:2017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2034,22 +2221,21 @@ else
fi
-
for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2043: checking for $ac_hdr" >&5
+echo "configure:2229: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2048 "configure"
+#line 2234 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2053: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2239: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2078,12 +2264,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2082: checking for $ac_func" >&5
+echo "configure:2268: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2087 "configure"
+#line 2273 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2106,7 +2292,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2131,7 +2317,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:2135: checking for working mmap" >&5
+echo "configure:2321: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2139,7 +2325,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 2143 "configure"
+#line 2329 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
@@ -2279,7 +2465,7 @@ main()
}
EOF
-if { (eval echo configure:2283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@@ -2306,12 +2492,12 @@ LIBS="$LIBS -lc $LIBM"
for ac_func in fmod strtol getcwd strerror putenv
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2310: checking for $ac_func" >&5
+echo "configure:2496: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2315 "configure"
+#line 2501 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2334,7 +2520,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2361,15 +2547,15 @@ done
LIBS="$saved_libs"
-for ac_func in rename mkstemp
+for ac_func in rename mkstemp strcasecmp strncasecmp strsep strdup
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2368: checking for $ac_func" >&5
+echo "configure:2554: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2373 "configure"
+#line 2559 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2392,7 +2578,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2417,12 +2603,12 @@ fi
done
echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:2421: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:2607: checking for sys_siglist declaration in signal.h or unistd.h" >&5
if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2426 "configure"
+#line 2612 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -2434,7 +2620,7 @@ int main() {
char *msg = *(sys_siglist + 1);
; return 0; }
EOF
-if { (eval echo configure:2438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_decl_sys_siglist=yes
else
@@ -2463,16 +2649,16 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking whether ANSI array delete syntax supported""... $ac_c" 1>&6
-echo "configure:2467: checking whether ANSI array delete syntax supported" >&5
+echo "configure:2653: checking whether ANSI array delete syntax supported" >&5
cat > conftest.$ac_ext <<EOF
-#line 2469 "configure"
+#line 2655 "configure"
#include "confdefs.h"
int main() {
char *p = new char[5]; delete [] p;
; return 0; }
EOF
-if { (eval echo configure:2476: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2662: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
@@ -2501,16 +2687,16 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking traditional preprocessor""... $ac_c" 1>&6
-echo "configure:2505: checking traditional preprocessor" >&5
+echo "configure:2691: checking traditional preprocessor" >&5
cat > conftest.$ac_ext <<EOF
-#line 2507 "configure"
+#line 2693 "configure"
#include "confdefs.h"
#define name2(a,b) a/**/b
int main() {
int name2(foo,bar);
; return 0; }
EOF
-if { (eval echo configure:2514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2700: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
#define TRADITIONAL_CPP 1
@@ -2531,12 +2717,12 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking w_coredump""... $ac_c" 1>&6
-echo "configure:2535: checking w_coredump" >&5
+echo "configure:2721: checking w_coredump" >&5
if test "$cross_compiling" = yes; then
echo "$ac_t""no" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2540 "configure"
+#line 2726 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -2551,7 +2737,7 @@ main()
#endif
}
EOF
-if { (eval echo configure:2555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
echo "$ac_t""yes" 1>&6;cat >> confdefs.h <<\EOF
#define WCOREFLAG 0200
@@ -2567,12 +2753,12 @@ rm -fr conftest*
fi
echo $ac_n "checking default value for grops -b option""... $ac_c" 1>&6
-echo "configure:2571: checking default value for grops -b option" >&5
+echo "configure:2757: checking default value for grops -b option" >&5
test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=7
echo "$ac_t""$BROKEN_SPOOLER_FLAGS" 1>&6
echo $ac_n "checking default paper size""... $ac_c" 1>&6
-echo "configure:2576: checking default paper size" >&5
+echo "configure:2762: checking default paper size" >&5
if test -z "$PAGE"; then
descfile=
if test -r $prefix/share/groff/font/devps/DESC; then
@@ -2607,7 +2793,7 @@ test -n "$PAGE" || PAGE=letter
echo "$ac_t""$PAGE" 1>&6
echo $ac_n "checking for existing troff installation""... $ac_c" 1>&6
-echo "configure:2611: checking for existing troff installation" >&5
+echo "configure:2797: checking for existing troff installation" >&5
if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
echo "$ac_t""yes" 1>&6
g=g
@@ -2616,9 +2802,8 @@ else
g=
fi
-
echo $ac_n "checking for prefix of system macro packages""... $ac_c" 1>&6
-echo "configure:2622: checking for prefix of system macro packages" >&5
+echo "configure:2807: checking for prefix of system macro packages" >&5
sys_tmac_prefix=
sys_tmac_file_prefix=
for d in /usr/share/lib/tmac /usr/lib/tmac; do
@@ -2638,7 +2823,7 @@ echo "$ac_t""$sys_tmac_prefix" 1>&6
tmac_wrap=
echo $ac_n "checking which system macro packages should be made available""... $ac_c" 1>&6
-echo "configure:2642: checking which system macro packages should be made available" >&5
+echo "configure:2827: checking which system macro packages should be made available" >&5
if test "x$sys_tmac_file_prefix" = "xtmac."; then
for f in $sys_tmac_prefix*; do
suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"`
@@ -2675,7 +2860,7 @@ elif test -n "$sys_tmac_prefix"; then
fi
echo "$ac_t""$tmac_wrap" 1>&6
-
+$srcdir/mkinstalldirs src/xditview
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@@ -2749,7 +2934,11 @@ s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
-DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+if test "$groff_cv_os390" = "yes"; then
+ DEFS=`sed -f conftest.defs confdefs.h | tr '\n' ' '`
+else
+ DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+fi
rm -f conftest.defs
@@ -2789,7 +2978,7 @@ done
ac_given_srcdir=$srcdir
ac_given_INSTALL="$INSTALL"
-trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+trap 'rm -fr `echo "Makefile src/xditview/Imakefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@@ -2821,8 +3010,10 @@ s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
+s%@top_builddir@%$top_builddir%g
s%@CC@%$CC%g
s%@CXX@%$CXX%g
+s%@TTYDEVDIRS@%$TTYDEVDIRS%g
s%@LPR@%$LPR%g
s%@LP@%$LP%g
s%@LPQ@%$LPQ%g
@@ -2885,7 +3076,7 @@ EOF
cat >> $CONFIG_STATUS <<EOF
-CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+CONFIG_FILES=\${CONFIG_FILES-"Makefile src/xditview/Imakefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
diff --git a/contrib/groff/configure.in b/contrib/groff/configure.in
index bd4fdc877fd3..081df0e6c4d8 100644
--- a/contrib/groff/configure.in
+++ b/contrib/groff/configure.in
@@ -1,9 +1,13 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(groff/groff.cc)
+AC_INIT(src/roff/groff/groff.cc)
dnl checks for programs
+GROFF_SRCDIR
+GROFF_BUILDDIR
AC_PROG_CC
AC_PROG_CXX
GROFF_CXX_CHECK
+GROFF_EBCDIC
+GROFF_OS390
GROFF_PRINT
AC_PATH_PROG(PERLPATH, perl, /usr/bin/perl)
GROFF_PROG_YACC
@@ -14,16 +18,18 @@ AC_PROG_LN_S
GROFF_CSH_HACK(SH_SCRIPT_SED_CMD='1s/.*/:/', SH_SCRIPT_SED_CMD='')
AC_SUBST(SH_SCRIPT_SED_CMD)
dnl checks for headers
-AC_CHECK_HEADERS(unistd.h dirent.h limits.h sys/dir.h stdlib.h)
+AC_CHECK_HEADERS(stdlib.h unistd.h dirent.h limits.h sys/dir.h \
+ string.h strings.h math.h)
GROFF_ISC_SYSV3
GROFF_POSIX
-GROFF_GETOPT
-GROFF_PUTENV
-GROFF_POPEN
-GROFF_PCLOSE
+GROFF_SRAND
+GROFF_NEED_DECLARATION(hypot)
+GROFF_NEED_DECLARATION(popen)
+GROFF_NEED_DECLARATION(pclose)
+GROFF_NEED_DECLARATION(putenv)
+GROFF_NEED_DECLARATION(strncasecmp)
GROFF_SYS_NERR
GROFF_SYS_ERRLIST
-GROFF_HYPOT
GROFF_OSFCN_H
GROFF_LIMITS_H
dnl checks for typedefs
@@ -38,7 +44,7 @@ saved_libs="$LIBS"
LIBS="$LIBS -lc $LIBM"
AC_REPLACE_FUNCS(fmod strtol getcwd strerror putenv)
LIBS="$saved_libs"
-AC_CHECK_FUNCS(rename mkstemp)
+AC_CHECK_FUNCS(rename mkstemp strcasecmp strncasecmp strsep strdup)
AC_DECL_SYS_SIGLIST
dnl checks for compiler characteristics
GROFF_ARRAY_DELETE
@@ -50,4 +56,5 @@ GROFF_BROKEN_SPOOLER_FLAGS
GROFF_PAGE
GROFF_G
GROFF_TMAC
-AC_OUTPUT(Makefile)
+$srcdir/mkinstalldirs src/xditview
+AC_OUTPUT(Makefile src/xditview/Imakefile)
diff --git a/contrib/groff/devX100-12/CB b/contrib/groff/devX100-12/CB
index 3751184aadcc..d151ee33da26 100644
--- a/contrib/groff/devX100-12/CB
+++ b/contrib/groff/devX100-12/CB
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 10,11 0 0264
µ 10,7,3 0 0265
ps 10,11,1 0 0266
¶ "
-md 10,6 0 0267
+pc 10,6 0 0267
· "
ac 10,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/CBI b/contrib/groff/devX100-12/CBI
index d7d0145a09a9..f298973000ea 100644
--- a/contrib/groff/devX100-12/CBI
+++ b/contrib/groff/devX100-12/CBI
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 10,11 0 0264
µ 10,7,3 0 0265
ps 10,11,1 0 0266
¶ "
-md 10,6 0 0267
+pc 10,6 0 0267
· "
ac 10,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/CI b/contrib/groff/devX100-12/CI
index 804f71f779e6..3f1437f621b2 100644
--- a/contrib/groff/devX100-12/CI
+++ b/contrib/groff/devX100-12/CI
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 10,11 0 0264
µ 10,7,3 0 0265
ps 10,11,1 0 0266
¶ "
-md 10,6 0 0267
+pc 10,6 0 0267
· "
ac 10,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/CR b/contrib/groff/devX100-12/CR
index 140ec55d0756..895c5dd4cdbc 100644
--- a/contrib/groff/devX100-12/CR
+++ b/contrib/groff/devX100-12/CR
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 10,11 0 0264
µ 10,7,3 0 0265
ps 10,11,1 0 0266
¶ "
-md 10,6 0 0267
+pc 10,6 0 0267
· "
ac 10,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/HB b/contrib/groff/devX100-12/HB
index e68615e14aa1..9e91e0b9049b 100644
--- a/contrib/groff/devX100-12/HB
+++ b/contrib/groff/devX100-12/HB
@@ -4,6 +4,7 @@ charset
--- 5,1 0 040
! 6,12 0 041
" 8,12 0 042
+dq "
# 9,12 0 043
sh "
$ 9,13,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,13 0 0264
µ 10,9,3 0 0265
ps 9,12,3 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 6,0,4 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/HBI b/contrib/groff/devX100-12/HBI
index 6723ddff1286..12011ca5838a 100644
--- a/contrib/groff/devX100-12/HBI
+++ b/contrib/groff/devX100-12/HBI
@@ -4,6 +4,7 @@ charset
--- 5,1 0 040
! 6,12 0 041
" 8,12 0 042
+dq "
# 9,12 0 043
sh "
$ 9,13,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,13 0 0264
µ 10,9,4 0 0265
ps 9,12,3 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 6,0,4 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/HI b/contrib/groff/devX100-12/HI
index f002cd630433..c5be9f966f2b 100644
--- a/contrib/groff/devX100-12/HI
+++ b/contrib/groff/devX100-12/HI
@@ -4,6 +4,7 @@ charset
--- 5,1 0 040
! 5,12 0 041
" 6,12 0 042
+dq "
# 9,12 0 043
sh "
$ 9,13,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,13 0 0264
µ 9,9,4 0 0265
ps 9,12,3 0 0266
¶ "
-md 5,7 0 0267
+pc 5,7 0 0267
· "
ac 6,0,4 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/HR b/contrib/groff/devX100-12/HR
index d2b296f64e7e..55d6bf5e3a91 100644
--- a/contrib/groff/devX100-12/HR
+++ b/contrib/groff/devX100-12/HR
@@ -4,6 +4,7 @@ charset
--- 5,1 0 040
! 5,12 0 041
" 6,12 0 042
+dq "
# 9,11 0 043
sh "
$ 9,13,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,13 0 0264
µ 9,9,4 0 0265
ps 9,12,3 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 6,0,4 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/NB b/contrib/groff/devX100-12/NB
index f997df5961df..975de355780e 100644
--- a/contrib/groff/devX100-12/NB
+++ b/contrib/groff/devX100-12/NB
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,12 0 041
" 6,12 0 042
+dq "
# 10,12 0 043
sh "
$ 10,14,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,12 0 0264
µ 11,8,3 0 0265
ps 12,12 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 6,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/NBI b/contrib/groff/devX100-12/NBI
index 38c32819b37c..d67e0e42f280 100644
--- a/contrib/groff/devX100-12/NBI
+++ b/contrib/groff/devX100-12/NBI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 6,12 0 041
" 7,12 0 042
+dq "
# 10,12 0 043
sh "
$ 9,14,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,12 0 0264
µ 11,8,3 0 0265
ps 11,12 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 5,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/NI b/contrib/groff/devX100-12/NI
index 7a34f2af98e8..be54ca399069 100644
--- a/contrib/groff/devX100-12/NI
+++ b/contrib/groff/devX100-12/NI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 6,12 0 041
" 7,12 0 042
+dq "
# 9,12 0 043
sh "
$ 9,14,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,12 0 0264
µ 10,8,3 0 0265
ps 11,12 0 0266
¶ "
-md 5,5 0 0267
+pc 5,5 0 0267
· "
ac 5,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/NR b/contrib/groff/devX100-12/NR
index 0a9a0cfa8200..f4f922ef346c 100644
--- a/contrib/groff/devX100-12/NR
+++ b/contrib/groff/devX100-12/NR
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,12 0 041
" 6,12 0 042
+dq "
# 9,12 0 043
sh "
$ 9,13,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,12 0 0264
µ 10,8,3 0 0265
ps 10,12,3 0 0266
¶ "
-md 5,5 0 0267
+pc 5,5 0 0267
· "
ac 5,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/TB b/contrib/groff/devX100-12/TB
index 83073d528178..b81e0170b33b 100644
--- a/contrib/groff/devX100-12/TB
+++ b/contrib/groff/devX100-12/TB
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 6,11 0 041
" 9,11 0 042
+dq "
# 8,11 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,12 0 0264
µ 9,8,3 0 0265
ps 9,11,4 0 0266
¶ "
-md 4,6 0 0267
+pc 4,6 0 0267
· "
ac 6,0,4 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/TBI b/contrib/groff/devX100-12/TBI
index 71ca713620cb..712f7d217ca6 100644
--- a/contrib/groff/devX100-12/TBI
+++ b/contrib/groff/devX100-12/TBI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 6,11 0 041
" 9,11 0 042
+dq "
# 8,11 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,12 0 0264
µ 9,8,3 0 0265
ps 8,11,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 6,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/TI b/contrib/groff/devX100-12/TI
index fad269f92525..72ed683a9110 100644
--- a/contrib/groff/devX100-12/TI
+++ b/contrib/groff/devX100-12/TI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 6,11 0 041
" 7,10 0 042
+dq "
# 8,11 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,12 0 0264
µ 8,8,4 0 0265
ps 9,11,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 6,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100-12/TR b/contrib/groff/devX100-12/TR
index 6db573e8b221..989dd564cb29 100644
--- a/contrib/groff/devX100-12/TR
+++ b/contrib/groff/devX100-12/TR
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,11 0 041
" 7,11 0 042
+dq "
# 8,11 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,11 0 0264
µ 8,8,3 0 0265
ps 8,11,4 0 0266
¶ "
-md 4,6 0 0267
+pc 4,6 0 0267
· "
ac 6,0,4 0 0270
¸ "
diff --git a/contrib/groff/devX100/CB b/contrib/groff/devX100/CB
index 7239ed1e0dcb..7353611c15b6 100644
--- a/contrib/groff/devX100/CB
+++ b/contrib/groff/devX100/CB
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 9,9 0 0264
µ 9,7,3 0 0265
ps 9,10,1 0 0266
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267
· "
ac 9,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/CBI b/contrib/groff/devX100/CBI
index 384f91d7214b..d590a19aed92 100644
--- a/contrib/groff/devX100/CBI
+++ b/contrib/groff/devX100/CBI
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 9,10 0 0264
µ 9,7,3 0 0265
ps 9,10,1 0 0266
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267
· "
ac 9,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/CI b/contrib/groff/devX100/CI
index 07fd0a685a5b..484eeca28a43 100644
--- a/contrib/groff/devX100/CI
+++ b/contrib/groff/devX100/CI
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 9,9 0 0264
µ 9,7,3 0 0265
ps 9,9,1 0 0266
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267
· "
ac 9,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/CR b/contrib/groff/devX100/CR
index e425fa602bb2..b8b35d10ff14 100644
--- a/contrib/groff/devX100/CR
+++ b/contrib/groff/devX100/CR
@@ -4,6 +4,7 @@ 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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 9,10 0 0264
µ 9,7,3 0 0265
ps 9,9,1 0 0266
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267
· "
ac 9,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/HB b/contrib/groff/devX100/HB
index d877fd65a080..1a1d963426e3 100644
--- a/contrib/groff/devX100/HB
+++ b/contrib/groff/devX100/HB
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 4,11 0 041
" 7,11 0 042
+dq "
# 9,10 0 043
sh "
$ 8,12,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 9,8,3 0 0265
ps 8,11,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/HBI b/contrib/groff/devX100/HBI
index 1cf0e56e638d..bcfbfae401f7 100644
--- a/contrib/groff/devX100/HBI
+++ b/contrib/groff/devX100/HBI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,11 0 041
" 7,11 0 042
+dq "
# 10,10 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 9,8,3 0 0265
ps 8,11,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 5,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/HI b/contrib/groff/devX100/HI
index 7908492d431c..4be615cd8704 100644
--- a/contrib/groff/devX100/HI
+++ b/contrib/groff/devX100/HI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 4,11 0 041
" 5,11 0 042
+dq "
# 9,10 0 043
sh "
$ 8,12,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,11 0 0264
µ 8,8,3 0 0265
ps 8,11,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 3,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/HR b/contrib/groff/devX100/HR
index c2f6af390348..f462a24929e3 100644
--- a/contrib/groff/devX100/HR
+++ b/contrib/groff/devX100/HR
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 4,11 0 041
" 5,11 0 042
+dq "
# 8,10 0 043
sh "
$ 8,12,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 8,8,3 0 0265
ps 8,11,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/NB b/contrib/groff/devX100/NB
index d47fdb2e1e4c..f99169ea4e19 100644
--- a/contrib/groff/devX100/NB
+++ b/contrib/groff/devX100/NB
@@ -4,6 +4,7 @@ charset
--- 11,1 0 040
! 4,11 0 041
" 5,11 0 042
+dq "
# 8,10 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,11 0 0264
µ 10,7,3 0 0265
ps 10,11 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/NBI b/contrib/groff/devX100/NBI
index c46b945ae863..dd940afc937f 100644
--- a/contrib/groff/devX100/NBI
+++ b/contrib/groff/devX100/NBI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,11 0 041
" 6,11 0 042
+dq "
# 8,10 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 10,7,3 0 0265
ps 9,11 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/NI b/contrib/groff/devX100/NI
index 3216f64a0543..bb31b53d18a7 100644
--- a/contrib/groff/devX100/NI
+++ b/contrib/groff/devX100/NI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,11 0 041
" 6,11 0 042
+dq "
# 11,10 0 043
sh "
$ 8,12,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,11 0 0264
µ 9,7,3 0 0265
ps 9,11 0 0266
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/NR b/contrib/groff/devX100/NR
index 8e6717eef145..729f76eb0878 100644
--- a/contrib/groff/devX100/NR
+++ b/contrib/groff/devX100/NR
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 3,11 0 041
" 5,11 0 042
+dq "
# 8,11 0 043
sh "
$ 8,12,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 9,7,3 0 0265
ps 9,11,2 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 5,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/TB b/contrib/groff/devX100/TB
index ebafbac74b3a..f9f191c083e1 100644
--- a/contrib/groff/devX100/TB
+++ b/contrib/groff/devX100/TB
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,10 0 041
" 7,10 0 042
+dq "
# 7,10 0 043
sh "
$ 7,11,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 7,7,3 0 0265
ps 8,10,3 0 0266
¶ "
-md 4,6 0 0267
+pc 4,6 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/TBI b/contrib/groff/devX100/TBI
index 2297b4b2b663..76e9828bcf72 100644
--- a/contrib/groff/devX100/TBI
+++ b/contrib/groff/devX100/TBI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 7,10 0 041
" 7,10 0 042
+dq "
# 8,10 0 043
sh "
$ 7,11,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,10 0 0264
µ 7,7,3 0 0265
ps 8,10,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/TI b/contrib/groff/devX100/TI
index 80a2f1c4049d..53401e5c44d6 100644
--- a/contrib/groff/devX100/TI
+++ b/contrib/groff/devX100/TI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 5,10 0 041
" 6,10 0 042
+dq "
# 7,10 0 043
sh "
$ 7,11,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,10 0 0264
µ 7,7,3 0 0265
ps 8,10,3 0 0266
¶ "
-md 4,4 0 0267
+pc 4,4 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX100/TR b/contrib/groff/devX100/TR
index eafc811b264c..39d106a2867b 100644
--- a/contrib/groff/devX100/TR
+++ b/contrib/groff/devX100/TR
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 5,10 0 041
" 6,10 0 042
+dq "
# 7,10 0 043
sh "
$ 7,11,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,11 0 0264
µ 7,7,3 0 0265
ps 7,10,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/CB b/contrib/groff/devX75-12/CB
index a5d1baff2215..8b3766c1ebf7 100644
--- a/contrib/groff/devX75-12/CB
+++ b/contrib/groff/devX75-12/CB
@@ -4,6 +4,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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 7,9 0 0264
µ 7,6,3 0 0265
ps 7,9,1 0 0266
¶ "
-md 7,5 0 0267
+pc 7,5 0 0267
· "
ac 7,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/CBI b/contrib/groff/devX75-12/CBI
index 764eaf778410..23df8ea75060 100644
--- a/contrib/groff/devX75-12/CBI
+++ b/contrib/groff/devX75-12/CBI
@@ -4,6 +4,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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 7,9 0 0264
µ 7,6,3 0 0265
ps 7,9,1 0 0266
¶ "
-md 7,5 0 0267
+pc 7,5 0 0267
· "
ac 7,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/CI b/contrib/groff/devX75-12/CI
index acc9ec864705..04f4c46d4592 100644
--- a/contrib/groff/devX75-12/CI
+++ b/contrib/groff/devX75-12/CI
@@ -4,6 +4,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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 7,9 0 0264
µ 7,6,3 0 0265
ps 7,9,1 0 0266
¶ "
-md 7,4 0 0267
+pc 7,4 0 0267
· "
ac 7,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/CR b/contrib/groff/devX75-12/CR
index 666e837b435c..957ce6a19e3f 100644
--- a/contrib/groff/devX75-12/CR
+++ b/contrib/groff/devX75-12/CR
@@ -4,6 +4,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
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 7,9 0 0264
µ 7,6,3 0 0265
ps 7,9,1 0 0266
¶ "
-md 7,4 0 0267
+pc 7,4 0 0267
· "
ac 7,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/HB b/contrib/groff/devX75-12/HB
index b8cbb6ef55e6..f9ccd5f716bd 100644
--- a/contrib/groff/devX75-12/HB
+++ b/contrib/groff/devX75-12/HB
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 4,9 0 041
" 5,9 0 042
+dq "
# 8,8 0 043
sh "
$ 7,9,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,10 0 0264
µ 7,7,3 0 0265
ps 7,9,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 4,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/HBI b/contrib/groff/devX75-12/HBI
index 3014c9027d7c..21d43555f62f 100644
--- a/contrib/groff/devX75-12/HBI
+++ b/contrib/groff/devX75-12/HBI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 4,9 0 041
" 6,9 0 042
+dq "
# 7,8 0 043
sh "
$ 7,9,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 7,7,3 0 0265
ps 7,9,3 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 4,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/HI b/contrib/groff/devX75-12/HI
index 587e1451eb29..6051dc703593 100644
--- a/contrib/groff/devX75-12/HI
+++ b/contrib/groff/devX75-12/HI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 3,9 0 041
" 5,9 0 042
+dq "
# 7,8 0 043
sh "
$ 7,9,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 2,10 0 0264
µ 7,7,3 0 0265
ps 8,9,3 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/HR b/contrib/groff/devX75-12/HR
index 86958ed6b56f..f78bed5e9b92 100644
--- a/contrib/groff/devX75-12/HR
+++ b/contrib/groff/devX75-12/HR
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 3,9 0 041
" 5,9 0 042
+dq "
# 7,8 0 043
sh "
$ 6,9,2 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 2,10 0 0264
µ 7,7,3 0 0265
ps 7,9,3 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,1,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/NB b/contrib/groff/devX75-12/NB
index 5fea01717d2f..b5f4a08626d1 100644
--- a/contrib/groff/devX75-12/NB
+++ b/contrib/groff/devX75-12/NB
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 4,9 0 041
" 6,9 0 042
+dq "
# 8,9 0 043
sh "
$ 7,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 5,9 0 0264
µ 9,6,3 0 0265
ps 10,9 0 0266
¶ "
-md 3,5 0 0267
+pc 3,5 0 0267
· "
ac 5,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/NBI b/contrib/groff/devX75-12/NBI
index 0da124adf093..01539d5b4051 100644
--- a/contrib/groff/devX75-12/NBI
+++ b/contrib/groff/devX75-12/NBI
@@ -4,6 +4,7 @@ charset
--- 4,1 0 040
! 5,9 0 041
" 6,9 0 042
+dq "
# 8,8 0 043
sh "
$ 7,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 8,6,3 0 0265
ps 8,9 0 0266
¶ "
-md 5,5 0 0267
+pc 5,5 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/NI b/contrib/groff/devX75-12/NI
index 05ee8cdbd82e..3ffc94022ffd 100644
--- a/contrib/groff/devX75-12/NI
+++ b/contrib/groff/devX75-12/NI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,9 0 041
" 6,9 0 042
+dq "
# 8,8 0 043
sh "
$ 6,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 8,6,3 0 0265
ps 9,9 0 0266
¶ "
-md 5,5 0 0267
+pc 5,5 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/NR b/contrib/groff/devX75-12/NR
index a1df4867901a..1d91f111a51b 100644
--- a/contrib/groff/devX75-12/NR
+++ b/contrib/groff/devX75-12/NR
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,9 0 041
" 6,9 0 042
+dq "
# 8,8 0 043
sh "
$ 6,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,9 0 0264
µ 8,6,3 0 0265
ps 8,9,2 0 0266
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/TB b/contrib/groff/devX75-12/TB
index 348d388104a4..1ac16ecf7dd5 100644
--- a/contrib/groff/devX75-12/TB
+++ b/contrib/groff/devX75-12/TB
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,9 0 041
" 5,9 0 042
+dq "
# 6,9 0 043
sh "
$ 6,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 6,6,3 0 0265
ps 8,9,3 0 0266
¶ "
-md 3,5 0 0267
+pc 3,5 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/TBI b/contrib/groff/devX75-12/TBI
index 02793a58073a..68d97ed72b61 100644
--- a/contrib/groff/devX75-12/TBI
+++ b/contrib/groff/devX75-12/TBI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 5,9 0 041
" 7,9 0 042
+dq "
# 7,9 0 043
sh "
$ 7,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 7,6,3 0 0265
ps 7,9,3 0 0266
¶ "
-md 3,5 0 0267
+pc 3,5 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/TI b/contrib/groff/devX75-12/TI
index dd79bd1d5378..037cec3c1aba 100644
--- a/contrib/groff/devX75-12/TI
+++ b/contrib/groff/devX75-12/TI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,9 0 041
" 5,9 0 042
+dq "
# 6,9 0 043
sh "
$ 6,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 6,6,3 0 0265
ps 7,9,2 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75-12/TR b/contrib/groff/devX75-12/TR
index da7c961a1e93..16de8a9681e6 100644
--- a/contrib/groff/devX75-12/TR
+++ b/contrib/groff/devX75-12/TR
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 3,9 0 041
" 5,9 0 042
+dq "
# 6,8 0 043
sh "
$ 6,10,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,9 0 0264
µ 6,6,3 0 0265
ps 7,9,3 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75/CB b/contrib/groff/devX75/CB
index 5583135951a4..58e0d8b09b2b 100644
--- a/contrib/groff/devX75/CB
+++ b/contrib/groff/devX75/CB
@@ -4,6 +4,7 @@ charset
--- 6,1 0 040
! 6,7 0 041
" 6,6 0 042
+dq "
# 6,7 0 043
sh "
$ 6,7,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,8 0 0264
µ 6,5,2 0 0265
ps 6,7,1 0 0266
¶ "
-md 6,5 0 0267
+pc 6,5 0 0267
· "
ac 6,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/CBI b/contrib/groff/devX75/CBI
index e6281f44b44a..db6f6baa596a 100644
--- a/contrib/groff/devX75/CBI
+++ b/contrib/groff/devX75/CBI
@@ -4,6 +4,7 @@ charset
--- 6,1 0 040
! 6,7 0 041
" 6,7 0 042
+dq "
# 6,7 0 043
sh "
$ 6,7,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,8 0 0264
µ 6,5,2 0 0265
ps 6,7,1 0 0266
¶ "
-md 6,4 0 0267
+pc 6,4 0 0267
· "
ac 6,0,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/CI b/contrib/groff/devX75/CI
index f19be187d1ea..43d383affcf9 100644
--- a/contrib/groff/devX75/CI
+++ b/contrib/groff/devX75/CI
@@ -4,6 +4,7 @@ charset
--- 6,1 0 040
! 6,7 0 041
" 6,7 0 042
+dq "
# 6,7 0 043
sh "
$ 6,7,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,8 0 0264
µ 6,5,2 0 0265
ps 6,7,1 0 0266
¶ "
-md 6,4 0 0267
+pc 6,4 0 0267
· "
ac 6,0,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/CR b/contrib/groff/devX75/CR
index 8bb40b2753ac..900a4a0268ce 100644
--- a/contrib/groff/devX75/CR
+++ b/contrib/groff/devX75/CR
@@ -4,6 +4,7 @@ charset
--- 6,1 0 040
! 6,7 0 041
" 6,7 0 042
+dq "
# 6,7 0 043
sh "
$ 6,7,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 6,8 0 0264
µ 6,5,2 0 0265
ps 6,6,1 0 0266
¶ "
-md 6,4 0 0267
+pc 6,4 0 0267
· "
ac 6,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/HB b/contrib/groff/devX75/HB
index 26894e07f733..ab6f9798ea0e 100644
--- a/contrib/groff/devX75/HB
+++ b/contrib/groff/devX75/HB
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,8 0 041
" 5,8 0 042
+dq "
# 6,7 0 043
sh "
$ 6,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,9 0 0264
µ 6,6,2 0 0265
ps 6,8,2 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,0,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/HBI b/contrib/groff/devX75/HBI
index 6488003417a4..ec132d3d648a 100644
--- a/contrib/groff/devX75/HBI
+++ b/contrib/groff/devX75/HBI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,8 0 041
" 6,8 0 042
+dq "
# 7,7 0 043
sh "
$ 6,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,9 0 0264
µ 6,6,2 0 0265
ps 7,8,2 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/HI b/contrib/groff/devX75/HI
index 07509511fac5..324e4b712649 100644
--- a/contrib/groff/devX75/HI
+++ b/contrib/groff/devX75/HI
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 4,8 0 041
" 4,8 0 042
+dq "
# 7,7 0 043
sh "
$ 6,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,9 0 0264
µ 5,6,2 0 0265
ps 6,8,2 0 0266
¶ "
-md 3,5 0 0267
+pc 3,5 0 0267
· "
ac 3,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/HR b/contrib/groff/devX75/HR
index aeac63ed2735..fc0143d302ea 100644
--- a/contrib/groff/devX75/HR
+++ b/contrib/groff/devX75/HR
@@ -4,6 +4,7 @@ charset
--- 3,1 0 040
! 3,8 0 041
" 4,8 0 042
+dq "
# 6,7 0 043
sh "
$ 6,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,8 0 0264
µ 5,6,2 0 0265
ps 6,8,2 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,0,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/NB b/contrib/groff/devX75/NB
index d783d02b781d..9ea6576e4f03 100644
--- a/contrib/groff/devX75/NB
+++ b/contrib/groff/devX75/NB
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 3,8 0 041
" 6,8 0 042
+dq "
# 8,8 0 043
sh "
$ 6,9,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,8 0 0264
µ 7,5,2 0 0265
ps 8,8 0 0266
¶ "
-md 3,5 0 0267
+pc 3,5 0 0267
· "
ac 4,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/NBI b/contrib/groff/devX75/NBI
index bdad1059941e..9346faf2cb99 100644
--- a/contrib/groff/devX75/NBI
+++ b/contrib/groff/devX75/NBI
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 5,8 0 041
" 6,8 0 042
+dq "
# 8,7 0 043
sh "
$ 6,9,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,8 0 0264
µ 7,5,2 0 0265
ps 8,8 0 0266
¶ "
-md 3,5 0 0267
+pc 3,5 0 0267
· "
ac 4,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/NI b/contrib/groff/devX75/NI
index 20c2c4246996..d14f9ca9b8ce 100644
--- a/contrib/groff/devX75/NI
+++ b/contrib/groff/devX75/NI
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 4,8 0 041
" 6,8 0 042
+dq "
# 8,7 0 043
sh "
$ 5,9,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,8 0 0264
µ 6,5,2 0 0265
ps 8,8 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 4,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/NR b/contrib/groff/devX75/NR
index aa05125e750e..8a04d7786923 100644
--- a/contrib/groff/devX75/NR
+++ b/contrib/groff/devX75/NR
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 4,8 0 041
" 6,8 0 042
+dq "
# 8,8 0 043
sh "
$ 5,9,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,8 0 0264
µ 6,5,2 0 0265
ps 7,8,2 0 0266
¶ "
-md 4,4 0 0267
+pc 4,4 0 0267
· "
ac 3,1,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/TB b/contrib/groff/devX75/TB
index 090771428fc5..29fa10adf216 100644
--- a/contrib/groff/devX75/TB
+++ b/contrib/groff/devX75/TB
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 4,7 0 041
" 5,7 0 042
+dq "
# 6,7 0 043
sh "
$ 5,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,7 0 0264
µ 5,5,3 0 0265
ps 6,7,3 0 0266
¶ "
-md 3,4 0 0267
+pc 3,4 0 0267
· "
ac 3,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75/TBI b/contrib/groff/devX75/TBI
index 37d92b0a70c5..064d31de338b 100644
--- a/contrib/groff/devX75/TBI
+++ b/contrib/groff/devX75/TBI
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 6,7 0 041
" 6,7 0 042
+dq "
# 8,7 0 043
sh "
$ 5,7 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 4,7 0 0264
µ 5,5,3 0 0265
ps 8,7,3 0 0266
¶ "
-md 4,4 0 0267
+pc 4,4 0 0267
· "
ac 3,0,3 0 0270
¸ "
diff --git a/contrib/groff/devX75/TI b/contrib/groff/devX75/TI
index daa858e2eef0..6e091e2f2476 100644
--- a/contrib/groff/devX75/TI
+++ b/contrib/groff/devX75/TI
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 3,7 0 041
" 4,8 0 042
+dq "
# 5,7 0 043
sh "
$ 5,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,8 0 0264
µ 5,5,3 0 0265
ps 6,7,3 0 0266
¶ "
-md 3,3 0 0267
+pc 3,3 0 0267
· "
ac 3,0,2 0 0270
¸ "
diff --git a/contrib/groff/devX75/TR b/contrib/groff/devX75/TR
index c1ac847b408b..819dff4d067a 100644
--- a/contrib/groff/devX75/TR
+++ b/contrib/groff/devX75/TR
@@ -4,6 +4,7 @@ charset
--- 2,1 0 040
! 3,7 0 041
" 4,7 0 042
+dq "
# 5,7 0 043
sh "
$ 5,8,1 0 044
@@ -11,6 +12,7 @@ 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
@@ -158,7 +160,7 @@ aa 3,7 0 0264
µ 5,5,2 0 0265
ps 6,7,2 0 0266
¶ "
-md 2,3 0 0267
+pc 2,3 0 0267
· "
ac 4,0,3 0 0270
¸ "
diff --git a/contrib/groff/devascii/R.proto b/contrib/groff/devascii/R.proto
index 876c74c4a6d8..b4d090778807 100644
--- a/contrib/groff/devascii/R.proto
+++ b/contrib/groff/devascii/R.proto
@@ -4,6 +4,7 @@ spacewidth 24
charset
! 24 0 0041
" 24 0 0042
+dq "
lq "
rq "
# 24 0 0043
@@ -16,6 +17,7 @@ Do "
aa "
fm "
aq "
+cq "
( 24 0 0050
) 24 0 0051
* 24 0 0052
diff --git a/contrib/groff/devcp1047/DESC.proto b/contrib/groff/devcp1047/DESC.proto
new file mode 100644
index 000000000000..88399ab16d91
--- /dev/null
+++ b/contrib/groff/devcp1047/DESC.proto
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 000000000000..42721cb9b86e
--- /dev/null
+++ b/contrib/groff/devcp1047/Makefile.sub
@@ -0,0 +1,32 @@
+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
new file mode 100644
index 000000000000..6a624c37c771
--- /dev/null
+++ b/contrib/groff/devcp1047/R.proto
@@ -0,0 +1,356 @@
+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
index 240731a75e5e..53a2b9c86b9a 100644
--- a/contrib/groff/devdvi/B
+++ b/contrib/groff/devdvi/B
@@ -1,3 +1,6 @@
+#
+# manually added kernings for `` and ''
+#
name B
internalname cmbx10
spacewidth 401952
@@ -6,14 +9,20 @@ 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
@@ -127,6 +136,7 @@ b w -33496
c h -33496
c k -33496
f ' 114323
+f cq 114323
f ? 114323
f ! 114323
f ) 114323
@@ -243,7 +253,8 @@ Do 602928,786432,58254 3 0044
$ "
% 1004880,786432,58254 3 0045
& 937888,728178 2 0046
-' 334960,728178 2 0047
+cq 334960,728178 2 0047
+' "
( 468944,786432,262144 3 0050
) 468944,786432,262144 3 0051
* 602928,786432 2 0052
diff --git a/contrib/groff/devdvi/BI b/contrib/groff/devdvi/BI
index 16d0193c44ab..35e282469331 100644
--- a/contrib/groff/devdvi/BI
+++ b/contrib/groff/devdvi/BI
@@ -1,3 +1,6 @@
+#
+# manually added kernings for `` and ''
+#
name BI
internalname cmbxti10
spacewidth 434573
@@ -6,6 +9,7 @@ ligatures ff fi fl ffi ffl 0
checksum 1175274390
designsize 10485760
kernpairs
+ff cq 111848
ff ' 111848
ff ? 111848
ff ! 111848
@@ -13,8 +17,13 @@ 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
@@ -161,7 +170,9 @@ 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
@@ -175,6 +186,7 @@ f rB 111848
f ] 111848
l l 61749
n ' -123498
+n cq -123498
o e -61749
o a -61749
o o -61749
@@ -247,7 +259,8 @@ char163 910723,728178 2 0044
Po "
% 990312,786432,58254,134859 3 0045
& 928563,728178,0,89421 2 0046
-' 372824,728178,0,135734 2 0047
+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
diff --git a/contrib/groff/devdvi/CW b/contrib/groff/devdvi/CW
index fd94235ce8b4..2039d23e3471 100644
--- a/contrib/groff/devdvi/CW
+++ b/contrib/groff/devdvi/CW
@@ -47,14 +47,16 @@ char216 550498,699051,58254 3 0037
/O "
--- 550498,230104,116509 1 0040
! 550498,640797 2 0041
-" 550498,640797 2 0042
+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
-' 550498,640797 2 0047
+cq 550498,640797 2 0047
+' "
( 550498,728178,87379 3 0050
) 550498,728178,87379 3 0051
* 550498,546134 2 0052
diff --git a/contrib/groff/devdvi/CWI b/contrib/groff/devdvi/CWI
new file mode 100644
index 000000000000..7e7b54083eff
--- /dev/null
+++ b/contrib/groff/devdvi/CWI
@@ -0,0 +1,160 @@
+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
index b605255d4f8d..54c1302bf022 100644
--- a/contrib/groff/devdvi/DESC.in
+++ b/contrib/groff/devdvi/DESC.in
@@ -3,8 +3,8 @@ unitwidth 131072
res 57816
hor 1
vert 1
-sizes 500 600 700 800 900 1000 1100 1200 1400 1440 1600 1728 1800
+sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 1728 1800
2000 2074 2200 2400 2488 2800 3600 0
-fonts 13 R I B BI 0 0 0 0 0 MI S EX CW
+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/H b/contrib/groff/devdvi/H
index 96ae0f5fe0b1..f563c1898f27 100644
--- a/contrib/groff/devdvi/H
+++ b/contrib/groff/devdvi/H
@@ -5,13 +5,16 @@ 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
@@ -107,6 +110,7 @@ b q 29128
b r -29128
b y -29128
b w -29128
+f cq 72818
f ' 72818
f ? 72818
f ! 72818
@@ -198,7 +202,8 @@ Do 524290,786432,58254 3 0044
$ "
% 873816,786432,58254 3 0045
& 795173,728178 2 0046
-' 291272,728178 2 0047
+cq 291272,728178 2 0047
+' "
( 407781,786432,262144 3 0050
) 407781,786432,262144 3 0051
* 524290,786432 2 0052
diff --git a/contrib/groff/devdvi/HB b/contrib/groff/devdvi/HB
index aaff8968112c..c0cc6e2cd9ed 100644
--- a/contrib/groff/devdvi/HB
+++ b/contrib/groff/devdvi/HB
@@ -5,13 +5,16 @@ 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
@@ -107,6 +110,7 @@ b q 32040
b r -32040
b y -32040
b w -32040
+f cq 80101
f ' 80101
f ? 80101
f ! 80101
@@ -198,7 +202,8 @@ Do 576720,786432,58254 3 0044
$ "
% 1079109,786432,58254 3 0045
& 870906,728178 2 0046
-' 320400,728178 2 0047
+cq 320400,728178 2 0047
+' "
( 448560,786432,262144 3 0050
) 448560,786432,262144 3 0051
* 576720,786432 2 0052
diff --git a/contrib/groff/devdvi/HI b/contrib/groff/devdvi/HI
index dcfcced1a557..4f96bdb59f30 100644
--- a/contrib/groff/devdvi/HI
+++ b/contrib/groff/devdvi/HI
@@ -6,13 +6,16 @@ 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
@@ -108,6 +111,7 @@ b q 29128
b r -29128
b y -29128
b w -29128
+f cq 72818
f ' 72818
f ? 72818
f ! 72818
@@ -199,7 +203,8 @@ Do 524290,786432,58254,116982 3 0044
$ "
% 873816,786432,58254,32782 3 0045
& 795173,728178,0,32064 2 0046
-' 291272,728178,0,81960 2 0047
+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
diff --git a/contrib/groff/devdvi/I b/contrib/groff/devdvi/I
index a46501669f44..2323eed5934a 100644
--- a/contrib/groff/devdvi/I
+++ b/contrib/groff/devdvi/I
@@ -1,3 +1,6 @@
+#
+# manually added kernings for `` and ''
+#
name I
special
internalname cmti10
@@ -7,6 +10,7 @@ ligatures ff fi fl ffi ffl 0
checksum -50321606
designsize 10485760
kernpairs
+ff cq 109373
ff ' 109373
ff ? 109373
ff ! 109373
@@ -14,7 +18,12 @@ 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
@@ -162,7 +171,9 @@ 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
@@ -175,6 +186,7 @@ Fn ] 109373
f rB 109373
f ] 109373
l l 53594
+n cq -107187
n ' -107187
o e -53594
o a -53594
@@ -248,7 +260,8 @@ char163 806453,728178 2 0044
Po "
% 857498,786432,58254,143014 3 0045
& 803904,728178,0,101654 2 0046
-' 321562,728178,0,130200 2 0047
+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
diff --git a/contrib/groff/devdvi/Makefile.sub b/contrib/groff/devdvi/Makefile.sub
index 8c3248fdfca8..5f30be233452 100644
--- a/contrib/groff/devdvi/Makefile.sub
+++ b/contrib/groff/devdvi/Makefile.sub
@@ -1,5 +1,5 @@
DEV=dvi
-DEVFILES=DESC R I B BI CW MI S EX H HI HB SA SB \
+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
diff --git a/contrib/groff/devdvi/R b/contrib/groff/devdvi/R
index 3e49b938e791..2c7fe300b8f7 100644
--- a/contrib/groff/devdvi/R
+++ b/contrib/groff/devdvi/R
@@ -1,3 +1,6 @@
+#
+# manually added kernings for `` and ''
+#
name R
special
internalname cmr10
@@ -6,6 +9,7 @@ ligatures ff fi fl ffi ffl 0
checksum 1274110073
designsize 10485760
kernpairs
+ff cq 81557
ff ' 81557
ff ? 81557
ff ! 81557
@@ -13,8 +17,13 @@ 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
@@ -195,6 +204,7 @@ b w -29128
c h -29128
c k -29128
f ' 81557
+f cq 81557
f ? 81557
f ! 81557
f ) 81557
@@ -311,7 +321,8 @@ Do 524290,786432,58254 3 0044
$ "
% 873816,786432,58254 3 0045
& 815562,728178 2 0046
-' 291272,728178 2 0047
+cq 291272,728178 2 0047
+' "
( 407781,786432,262144 3 0050
) 407781,786432,262144 3 0051
* 524290,786432 2 0052
diff --git a/contrib/groff/devdvi/S b/contrib/groff/devdvi/S
index 11b79ff9c6db..75abc6c84357 100644
--- a/contrib/groff/devdvi/S
+++ b/contrib/groff/devdvi/S
@@ -8,6 +8,7 @@ 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
diff --git a/contrib/groff/devdvi/SA b/contrib/groff/devdvi/SA
index f2b258f16fd4..91879fc7cce2 100644
--- a/contrib/groff/devdvi/SA
+++ b/contrib/groff/devdvi/SA
@@ -4,39 +4,39 @@ internalname msam10
checksum -1749815603
designsize 10485760
charset
-boxdot 815562,709446 2 0000
-boxplus 815562,709446 2 0001
-boxtimes 815562,709446 2 0002
-square 815562,709446 2 0003
-blacksquare 815562,709446 2 0004
+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,728178,116509 3 0006
+lz 699053,725867,116509 3 0006
lozenge "
-blacklozenge 699053,728178,116509 3 0007
+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,709446 2 0014
-Vdash 757307,728178 2 0015
-Vvdash 932070,728178 2 0016
-vDash 640798,728178 2 0017
+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,709446,189584 3 0022
-rightrightarrows 1048579,709446,189584 3 0023
-upuparrows 873816,728178,203888 3 0024
-downdownarrows 873816,728178,203888 3 0025
-upharpoonright 436909,728178,203888 3 0026
-downharpoonright 436909,728178,203888 3 0027
-upharpoonleft 436909,728178,203888 3 0030
-downharpoonleft 436909,728178,203888 3 0031
+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,709446,189584 3 0034
-rightleftarrows 1048579,709446,189584 3 0035
-Lsh 524290,728178 2 0036
-Rsh 524290,728178 2 0037
+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
@@ -46,10 +46,10 @@ 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,728178 2 0051
+3d 699053,725867 2 0051
tf "
therefore "
-because 699053,728178 2 0052
+because 699053,725867 2 0052
doteqdot 815562,610248,85960 3 0053
triangleq 815562,961197,85960 3 0054
precsim 815562,765021,240733 3 0055
@@ -62,7 +62,7 @@ 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,709446,189584 3 0067
+lessgtr 815562,707789,189584 3 0067
backprime 288358,576570 2 0070
--- 524290,486557,-37731 2 0071
risingdotseq 815562,610248,85960 3 0072
@@ -70,14 +70,14 @@ 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,709446,189584 3 0077
+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,728178,203888 3 0106
+bigstar 990323,725867,203888 3 0106
between 524290,792549,268261 3 0107
blacktriangledown 757307,576570 2 0110
blacktriangleright 815562,576570,36882 3 0111
@@ -87,55 +87,55 @@ blacktriangleleft 815562,576570,36882 3 0112
vartriangle 757307,576570 2 0115
blacktriangle 757307,576570 2 0116
triangledown 757307,576570 2 0117
-eqcirc 815562,728178 2 0120
+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,709446,0,26214 2 0125
+char165 786434,707789,0,26214 2 0125
Ye "
yen "
Rrightarrow 1048579,667592,143304 3 0126
Lleftarrow 1048579,667592,143304 3 0127
-OK 873816,728178 2 0130
+OK 873816,725867 2 0130
checkmark "
-veebar 640798,728178,203888 3 0131
-barwedge 640798,728178,203888 3 0132
+veebar 640798,725867,203888 3 0131
+barwedge 640798,725867,203888 3 0132
doublebarwedge 640798,792549,203888 3 0133
-/_ 757307,728178 2 0134
+/_ 757307,725867 2 0134
angle "
-measuredangle 757307,728178 2 0135
+measuredangle 757307,725867 2 0135
sphericalangle 757307,547770,36882 3 0136
-varpropto 815562,728178 2 0137
-smallsmile 815562,728178,203888 3 0140
-smallfrown 815562,728178,203888 3 0141
+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,728178 2 0150
-rightthreetimes 815562,728178 2 0151
+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,728178 2 0160
-urcorner 524290,728178 2 0161
-rg 992648,709446,159430 3 0162
+ulcorner 524290,725867 2 0160
+urcorner 524290,725867 2 0161
+rg 992648,725867,163146 3 0162
char174 "
circledR "
-circledS 946045,709446,159430 3 0163
-pitchfork 699053,728178 2 0164
-dotplus 815562,728178,85960 3 0165
+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,728178 2 0172
+maltese 873816,725867 2 0172
complement 524290,865080 2 0173
intercal 582544,451470,203888 1 0174
circledcirc 815562,610248,85960 3 0175
diff --git a/contrib/groff/devdvi/SB b/contrib/groff/devdvi/SB
index a4be59db29c6..811b351a1efd 100644
--- a/contrib/groff/devdvi/SB
+++ b/contrib/groff/devdvi/SB
@@ -2,7 +2,7 @@ name SB
special
internalname msbm10
spacewidth 314576
-slant 87.709390
+slant 14.036243
checksum -2001332536
designsize 10485760
charset
diff --git a/contrib/groff/devdvi/generate/Makefile b/contrib/groff/devdvi/generate/Makefile
index aeca9774fe8f..c8cd65640d37 100644
--- a/contrib/groff/devdvi/generate/Makefile
+++ b/contrib/groff/devdvi/generate/Makefile
@@ -1,32 +1,35 @@
-#Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
+# Copyright (C) 1989-2000 Free Software Foundation, Inc.
+# Written by James Clark (jjc@jclark.com)
#
-#This file is part of groff.
+# This file is part of groff.
#
-#groff is free software; you can redistribute it and/or modify it under
-#the terms of the GNU General Public License as published by the Free
-#Software Foundation; either version 2, or (at your option) any later
-#version.
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
#
-#groff is distributed in the hope that it will be useful, but WITHOUT ANY
-#WARRANTY; without even the implied warranty of MERCHANTABILITY or
-#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-#for more details.
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
#
-#You should have 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.
+# You should have 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 MI S EX H HI HB SA SB
+FONTS=R I B BI CW CWI MI S EX H HI HB SA SB
SPECIALFLAG=-s
all: $(FONTS)
@@ -54,33 +57,44 @@ BI: $(srcdir)/texi.map
# CW is special because it contains "
CW: $(srcdir)/textt.map
- $(TFMTODIT) $(SPECIALFLAG) $(tfmdir)/cmtt10.tfm $(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 $@
+ $(TFMTODIT) $(SPECIALFLAG) -k 0177 \
+ $(tfmdir)/cmmi10.tfm $(srcdir)/texmi.map $@
S: $(srcdir)/texsy.map
- $(TFMTODIT) $(SPECIALFLAG) -k 060 $(tfmdir)/cmsy10.tfm $(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 $@
+ $(TFMTODIT) $(SPECIALFLAG) \
+ $(tfmdir)/cmex10.tfm $(srcdir)/texex.map $@
-H: $(srcdir)/texr.map
- $(TFMTODIT) -g $(gfdir)/cmss10.300gf $(tfmdir)/cmss10.tfm $(srcdir)/texb.map $@
+H: $(srcdir)/texb.map
+ $(TFMTODIT) -g $(gfdir)/cmss10.300gf \
+ $(tfmdir)/cmss10.tfm $(srcdir)/texb.map $@
-HB: $(srcdir)/texr.map
+HB: $(srcdir)/texb.map
$(TFMTODIT) -g $(gfdir)/cmssbx10.300gf \
$(tfmdir)/cmssbx10.tfm $(srcdir)/texb.map $@
-HI: $(srcdir)/texr.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 $@
+ $(TFMTODIT) $(SPECIALFLAG) \
+ $(tfmdir)/msam10.tfm $(srcdir)/msam.map $@
SB: $(srcdir)/msbm.map
- $(TFMTODIT) $(SPECIALFLAG) $(tfmdir)/msbm10.tfm $(srcdir)/msbm.map $@
+ $(TFMTODIT) $(SPECIALFLAG) \
+ $(tfmdir)/msbm10.tfm $(srcdir)/msbm.map $@
clean:
diff --git a/contrib/groff/devdvi/generate/cork.map b/contrib/groff/devdvi/generate/cork.map
index 52cac9c8b10d..4e4a35adfc75 100644
--- a/contrib/groff/devdvi/generate/cork.map
+++ b/contrib/groff/devdvi/generate/cork.map
@@ -31,12 +31,12 @@
30 Fi
31 Fl
33 !
-34 "
+34 " dq
35 # sh
36 $ Do
37 %
38 &
-39 ' aq
+39 ' aq cq
40 (
41 )
42 *
diff --git a/contrib/groff/devdvi/generate/texb.map b/contrib/groff/devdvi/generate/texb.map
index 67008339e9f7..b2bcd1536c43 100644
--- a/contrib/groff/devdvi/generate/texb.map
+++ b/contrib/groff/devdvi/generate/texb.map
@@ -36,7 +36,7 @@
36 $ Do
37 %
38 &
-39 '
+39 ' cq
40 (
41 )
42 *
diff --git a/contrib/groff/devdvi/generate/texi.map b/contrib/groff/devdvi/generate/texi.map
index 835c6421f611..4ca802a28e13 100644
--- a/contrib/groff/devdvi/generate/texi.map
+++ b/contrib/groff/devdvi/generate/texi.map
@@ -36,7 +36,7 @@
36 Po char163
37 %
38 &
-39 '
+39 ' cq
40 (
41 )
42 *
diff --git a/contrib/groff/devdvi/generate/texr.map b/contrib/groff/devdvi/generate/texr.map
index bebf67b80c31..7db0e5f71a1c 100644
--- a/contrib/groff/devdvi/generate/texr.map
+++ b/contrib/groff/devdvi/generate/texr.map
@@ -36,7 +36,7 @@
36 $ Do
37 %
38 &
-39 '
+39 ' cq
40 (
41 )
42 *
diff --git a/contrib/groff/devdvi/generate/texsy.map b/contrib/groff/devdvi/generate/texsy.map
index 2c970bc2a47e..fe98eb2508df 100644
--- a/contrib/groff/devdvi/generate/texsy.map
+++ b/contrib/groff/devdvi/generate/texsy.map
@@ -1,5 +1,5 @@
0 \- mi
-1 md
+1 md pc
2 mu char215
3 **
4 di char247
diff --git a/contrib/groff/devdvi/generate/textt.map b/contrib/groff/devdvi/generate/textt.map
index 1461d0abe9ec..80e8911e7104 100644
--- a/contrib/groff/devdvi/generate/textt.map
+++ b/contrib/groff/devdvi/generate/textt.map
@@ -31,12 +31,12 @@
30 OE
31 /O char216
33 !
-34 "
+34 " dq
35 # sh
36 $ Do
37 %
38 &
-39 '
+39 ' cq
40 (
41 )
42 *
diff --git a/contrib/groff/devhtml/CB b/contrib/groff/devhtml/CB
index 7ca40b89c0e1..b726465f0cf2 100644
--- a/contrib/groff/devhtml/CB
+++ b/contrib/groff/devhtml/CB
@@ -3,14 +3,16 @@ spacewidth 9
charset
--- 9,1 0 040
! 9,9 0 041
-" 9,10 0 042
+" 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
+& 9,8 0 046 &amp;
' 9,10 0 047
+cq "
( 9,9,2 0 050
) 9,9,2 0 051
* 9,9 0 052
@@ -32,10 +34,10 @@ sl "
9 9,10 0 071
: 9,7 0 072
; 9,7,2 0 073
-< 9,8 0 074
+< 9,8 0 074 &lt;
= 9,6 0 075
eq "
-> 9,8 0 076
+> 9,8 0 076 &gt;
? 9,9 0 077
@ 9,9 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 9,7,2 0 0241
+r! 9,7,2 0 0241 &iexcl;
¡ "
-ct 9,9,1 0 0242
+ct 9,9,1 0 0242 &cent;
¢ "
-Po 9,9 0 0243
+Po 9,9 0 0243 &pound;
£ "
-Cs 9,7 0 0244
+Cs 9,7 0 0244 &curren;
¤ "
-Ye 9,9 0 0245
+Ye 9,9 0 0245 &yen;
¥ "
-bb 9,9,2 0 0246
+bb 9,9,2 0 0246 &brvbar;
¦ "
-sc 9,10,1 0 0247
+sc 9,10,1 0 0247 &sect;
§ "
-ad 9,10 0 0250
+ad 9,10 0 0250 &uml;
¨ "
-co 9,9 0 0251
+co 9,9 0 0251 &copy;
© "
-Of 9,9 0 0252
+Of 9,9 0 0252 &ordf;
ª "
-Fo 9,6 0 0253
+Fo 9,6 0 0253 &laquo;
« "
-no 9,5 0 0254
+no 9,5 0 0254 &not;
¬ "
-- 9,5 0 055
-hy "
+- 9,5 0 055 &shy;
+hy " &shy;
­ "
-rg 9,9 0 0256
+rg 9,9 0 0256 &reg;
® "
-a- 9,9 0 0257
+a- 9,9 0 0257 &macr;
¯ "
-de 9,9 0 0260
+de 9,9 0 0260 &deg;
° "
-+- 9,8 0 0261
++- 9,8 0 0261 &plusmn;
± "
-S2 9,10 0 0262
+S2 9,10 0 0262 &sup2;
² "
-S3 9,10 0 0263
+S3 9,10 0 0263 &sup3;
³ "
-aa 9,9 0 0264
+aa 9,9 0 0264 &acute;
´ "
-µ 9,7,3 0 0265
-ps 9,10,1 0 0266
+µ 9,7,3 0 0265 &micro;
+ps 9,10,1 0 0266 &para;
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267 &middot;
· "
-ac 9,1,3 0 0270
+ac 9,1,3 0 0270 &cedil;
¸ "
-S1 9,10 0 0271
+S1 9,10 0 0271 &sup1;
¹ "
-Om 9,9 0 0272
+Om 9,9 0 0272 &ordm;
º "
-Fc 9,6 0 0273
+Fc 9,6 0 0273 &raquo;
» "
-14 9,10 0 0274
+14 9,10 0 0274 &frac14;
¼ "
-12 9,10 0 0275
+12 9,10 0 0275 &frac12;
½ "
-34 9,10 0 0276
+34 9,10 0 0276 &frac34;
¾ "
-r? 9,7,2 0 0277
+r? 9,7,2 0 0277 &iquest;
¿ "
-`A 9,12 0 0300
+`A 9,12 0 0300 &Agrave;
À "
-'A 9,12 0 0301
+'A 9,12 0 0301 &Aacute;
Á "
-^A 9,12 0 0302
+^A 9,12 0 0302 &Acirc;
 "
-~A 9,12 0 0303
+~A 9,12 0 0303 &Atilde;
à "
-:A 9,12 0 0304
+:A 9,12 0 0304 &Auml;
Ä "
-oA 9,12 0 0305
+oA 9,12 0 0305 &Aring;
Å "
-AE 9,9 0 0306
+AE 9,9 0 0306 &AElig;
Æ "
-,C 9,9,4 0 0307
+,C 9,9,4 0 0307 &Ccedil;
Ç "
-`E 9,12 0 0310
+`E 9,12 0 0310 &Egrave;
È "
-'E 9,12 0 0311
+'E 9,12 0 0311 &Eacute;
É "
-^E 9,12 0 0312
+^E 9,12 0 0312 &Ecirc;
Ê "
-:E 9,12 0 0313
+:E 9,12 0 0313 &Euml;
Ë "
-`I 9,12 0 0314
+`I 9,12 0 0314 &Igrave;
Ì "
-'I 9,12 0 0315
+'I 9,12 0 0315 &Iacute;
Í "
-^I 9,12 0 0316
+^I 9,12 0 0316 &Icirc;
Î "
-:I 9,12 0 0317
+:I 9,12 0 0317 &Iuml;
Ï "
--D 9,9 0 0320
+-D 9,9 0 0320 &ETH;
Ð "
-~N 9,12 0 0321
+~N 9,12 0 0321 &Ntilde;
Ñ "
-`O 9,12 0 0322
+`O 9,12 0 0322 &Ograve;
Ò "
-'O 9,12 0 0323
+'O 9,12 0 0323 &Oacute;
Ó "
-^O 9,12 0 0324
+^O 9,12 0 0324 &Ocirc;
Ô "
-~O 9,12 0 0325
+~O 9,12 0 0325 &Otilde;
Õ "
-:O 9,12 0 0326
+:O 9,12 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 9,10 0 0330
+/O 9,10 0 0330 &Oslash;
Ø "
-`U 9,12 0 0331
+`U 9,12 0 0331 &Ugrave;
Ù "
-'U 9,12 0 0332
+'U 9,12 0 0332 &Uacute;
Ú "
-^U 9,12 0 0333
+^U 9,12 0 0333 &Ucirc;
Û "
-:U 9,12 0 0334
+:U 9,12 0 0334 &Uuml;
Ü "
-'Y 9,12 0 0335
+'Y 9,12 0 0335 &Yacute;
Ý "
-TP 9,9 0 0336
+TP 9,9 0 0336 &THORN;
Þ "
-ss 9,9 0 0337
+ss 9,9 0 0337 &szlig;
ß "
-`a 9,10 0 0340
+`a 9,10 0 0340 &agrave;
à "
-'a 9,10 0 0341
+'a 9,10 0 0341 &aacute;
á "
-^a 9,10 0 0342
+^a 9,10 0 0342 &acirc;
â "
-~a 9,10 0 0343
+~a 9,10 0 0343 &atilde;
ã "
-:a 9,10 0 0344
+:a 9,10 0 0344 &auml;
ä "
-oa 9,10 0 0345
+oa 9,10 0 0345 &aring;
å "
-ae 9,7 0 0346
+ae 9,7 0 0346 &aelig;
æ "
-,c 9,7,4 0 0347
+,c 9,7,4 0 0347 &ccedil;
ç "
-`e 9,10 0 0350
+`e 9,10 0 0350 &egrave;
è "
-'e 9,10 0 0351
+'e 9,10 0 0351 &eacute;
é "
-^e 9,10 0 0352
+^e 9,10 0 0352 &ecirc;
ê "
-:e 9,10 0 0353
+:e 9,10 0 0353 &euml;
ë "
-`i 9,10 0 0354
+`i 9,10 0 0354 &igrave;
ì "
-'i 9,10 0 0355
+'i 9,10 0 0355 &iacute;
í "
-^i 9,10 0 0356
+^i 9,10 0 0356 &icirc;
î "
-:i 9,10 0 0357
+:i 9,10 0 0357 &iuml;
ï "
-Sd 9,10 0 0360
+Sd 9,10 0 0360 &eth;
ð "
-~n 9,10 0 0361
+~n 9,10 0 0361 &ntilde;
ñ "
-`o 9,10 0 0362
+`o 9,10 0 0362 &ograve;
ò "
-'o 9,10 0 0363
+'o 9,10 0 0363 &oacute;
ó "
-^o 9,10 0 0364
+^o 9,10 0 0364 &ocirc;
ô "
-~o 9,10 0 0365
+~o 9,10 0 0365 &otilde;
õ "
-:o 9,10 0 0366
+:o 9,10 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 9,7 0 0370
+/o 9,7 0 0370 &oslash;
ø "
-`u 9,10 0 0371
+`u 9,10 0 0371 &ugrave;
ù "
-'u 9,10 0 0372
+'u 9,10 0 0372 &uacute;
ú "
-^u 9,10 0 0373
+^u 9,10 0 0373 &ucirc;
û "
-:u 9,10 0 0374
+:u 9,10 0 0374 &uuml;
ü "
-'y 9,10,3 0 0375
+'y 9,10,3 0 0375 &yacute;
ý "
-Tp 9,9,3 0 0376
+Tp 9,9,3 0 0376 &thorn;
þ "
-:y 9,10,3 0 0377
+:y 9,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/CBI b/contrib/groff/devhtml/CBI
index 551ed26161d8..54d69b958c16 100644
--- a/contrib/groff/devhtml/CBI
+++ b/contrib/groff/devhtml/CBI
@@ -3,14 +3,16 @@ spacewidth 9
charset
--- 9,1 0 040
! 9,10 0 041
-" 9,9 0 042
+" 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
+& 9,8 0 046 &amp;
' 9,9 0 047
+cq "
( 9,9,2 0 050
) 9,9,2 0 051
* 9,10 0 052
@@ -32,10 +34,10 @@ sl "
9 9,10 0 071
: 9,7 0 072
; 9,7,2 0 073
-< 9,8 0 074
+< 9,8 0 074 &lt;
= 9,6 0 075
eq "
-> 9,8 0 076
+> 9,8 0 076 &gt;
? 9,9 0 077
@ 9,9 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 9,7,3 0 0241
+r! 9,7,3 0 0241 &iexcl;
¡ "
-ct 9,9,1 0 0242
+ct 9,9,1 0 0242 &cent;
¢ "
-Po 9,9 0 0243
+Po 9,9 0 0243 &pound;
£ "
-Cs 9,7 0 0244
+Cs 9,7 0 0244 &curren;
¤ "
-Ye 9,9 0 0245
+Ye 9,9 0 0245 &yen;
¥ "
-bb 9,10,2 0 0246
+bb 9,10,2 0 0246 &brvbar;
¦ "
-sc 9,10,1 0 0247
+sc 9,10,1 0 0247 &sect;
§ "
-ad 9,10 0 0250
+ad 9,10 0 0250 &uml;
¨ "
-co 9,9 0 0251
+co 9,9 0 0251 &copy;
© "
-Of 9,9 0 0252
+Of 9,9 0 0252 &ordf;
ª "
-Fo 9,6 0 0253
+Fo 9,6 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 9,5 0 055
-hy "
+- 9,5 0 055 &shy;
+hy " &shy;
­ "
-rg 9,9 0 0256
+rg 9,9 0 0256 &reg;
® "
-a- 9,9 0 0257
+a- 9,9 0 0257 &macr;
¯ "
-de 9,10 0 0260
+de 9,10 0 0260 &deg;
° "
-+- 9,8 0 0261
++- 9,8 0 0261 &plusmn;
± "
-S2 9,10 0 0262
+S2 9,10 0 0262 &sup2;
² "
-S3 9,10 0 0263
+S3 9,10 0 0263 &sup3;
³ "
-aa 9,10 0 0264
+aa 9,10 0 0264 &acute;
´ "
-µ 9,7,3 0 0265
-ps 9,10,1 0 0266
+µ 9,7,3 0 0265 &micro;
+ps 9,10,1 0 0266 &para;
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267 &middot;
· "
-ac 9,1,3 0 0270
+ac 9,1,3 0 0270 &cedil;
¸ "
-S1 9,10 0 0271
+S1 9,10 0 0271 &sup1;
¹ "
-Om 9,9 0 0272
+Om 9,9 0 0272 &ordm;
º "
-Fc 9,6 0 0273
+Fc 9,6 0 0273 &raquo;
» "
-14 9,10 0 0274
+14 9,10 0 0274 &frac14;
¼ "
-12 9,10 0 0275
+12 9,10 0 0275 &frac12;
½ "
-34 9,10 0 0276
+34 9,10 0 0276 &frac34;
¾ "
-r? 9,7,2 0 0277
+r? 9,7,2 0 0277 &iquest;
¿ "
-`A 9,12 0 0300
+`A 9,12 0 0300 &Agrave;
À "
-'A 9,12 0 0301
+'A 9,12 0 0301 &Aacute;
Á "
-^A 9,12 0 0302
+^A 9,12 0 0302 &Acirc;
 "
-~A 9,12 0 0303
+~A 9,12 0 0303 &Atilde;
à "
-:A 9,12 0 0304
+:A 9,12 0 0304 &Auml;
Ä "
-oA 9,12 0 0305
+oA 9,12 0 0305 &Aring;
Å "
-AE 9,9 0 0306
+AE 9,9 0 0306 &AElig;
Æ "
-,C 9,9,4 0 0307
+,C 9,9,4 0 0307 &Ccedil;
Ç "
-`E 9,12 0 0310
+`E 9,12 0 0310 &Egrave;
È "
-'E 9,12 0 0311
+'E 9,12 0 0311 &Eacute;
É "
-^E 9,12 0 0312
+^E 9,12 0 0312 &Ecirc;
Ê "
-:E 9,12 0 0313
+:E 9,12 0 0313 &Euml;
Ë "
-`I 9,12 0 0314
+`I 9,12 0 0314 &Igrave;
Ì "
-'I 9,12 0 0315
+'I 9,12 0 0315 &Iacute;
Í "
-^I 9,12 0 0316
+^I 9,12 0 0316 &Icirc;
Î "
-:I 9,12 0 0317
+:I 9,12 0 0317 &Iuml;
Ï "
--D 9,9 0 0320
+-D 9,9 0 0320 &ETH;
Ð "
-~N 9,12 0 0321
+~N 9,12 0 0321 &Ntilde;
Ñ "
-`O 9,12 0 0322
+`O 9,12 0 0322 &Ograve;
Ò "
-'O 9,12 0 0323
+'O 9,12 0 0323 &Oacute;
Ó "
-^O 9,12 0 0324
+^O 9,12 0 0324 &Ocirc;
Ô "
-~O 9,12 0 0325
+~O 9,12 0 0325 &Otilde;
Õ "
-:O 9,12 0 0326
+:O 9,12 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 9,9 0 0330
+/O 9,9 0 0330 &Oslash;
Ø "
-`U 9,12 0 0331
+`U 9,12 0 0331 &Ugrave;
Ù "
-'U 9,12 0 0332
+'U 9,12 0 0332 &Uacute;
Ú "
-^U 9,12 0 0333
+^U 9,12 0 0333 &Ucirc;
Û "
-:U 9,12 0 0334
+:U 9,12 0 0334 &Uuml;
Ü "
-'Y 9,12 0 0335
+'Y 9,12 0 0335 &Yacute;
Ý "
-TP 9,9 0 0336
+TP 9,9 0 0336 &THORN;
Þ "
-ss 9,9 0 0337
+ss 9,9 0 0337 &szlig;
ß "
-`a 9,10 0 0340
+`a 9,10 0 0340 &agrave;
à "
-'a 9,10 0 0341
+'a 9,10 0 0341 &aacute;
á "
-^a 9,10 0 0342
+^a 9,10 0 0342 &acirc;
â "
-~a 9,10 0 0343
+~a 9,10 0 0343 &atilde;
ã "
-:a 9,10 0 0344
+:a 9,10 0 0344 &auml;
ä "
-oa 9,10 0 0345
+oa 9,10 0 0345 &aring;
å "
-ae 9,7 0 0346
+ae 9,7 0 0346 &aelig;
æ "
-,c 9,7,4 0 0347
+,c 9,7,4 0 0347 &ccedil;
ç "
-`e 9,10 0 0350
+`e 9,10 0 0350 &egrave;
è "
-'e 9,10 0 0351
+'e 9,10 0 0351 &eacute;
é "
-^e 9,10 0 0352
+^e 9,10 0 0352 &ecirc;
ê "
-:e 9,10 0 0353
+:e 9,10 0 0353 &euml;
ë "
-`i 9,10 0 0354
+`i 9,10 0 0354 &igrave;
ì "
-'i 9,10 0 0355
+'i 9,10 0 0355 &iacute;
í "
-^i 9,10 0 0356
+^i 9,10 0 0356 &icirc;
î "
-:i 9,10 0 0357
+:i 9,10 0 0357 &iuml;
ï "
-Sd 9,10 0 0360
+Sd 9,10 0 0360 &eth;
ð "
-~n 9,10 0 0361
+~n 9,10 0 0361 &ntilde;
ñ "
-`o 9,10 0 0362
+`o 9,10 0 0362 &ograve;
ò "
-'o 9,10 0 0363
+'o 9,10 0 0363 &oacute;
ó "
-^o 9,10 0 0364
+^o 9,10 0 0364 &ocirc;
ô "
-~o 9,10 0 0365
+~o 9,10 0 0365 &otilde;
õ "
-:o 9,10 0 0366
+:o 9,10 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 9,8 0 0370
+/o 9,8 0 0370 &oslash;
ø "
-`u 9,10 0 0371
+`u 9,10 0 0371 &ugrave;
ù "
-'u 9,10 0 0372
+'u 9,10 0 0372 &uacute;
ú "
-^u 9,10 0 0373
+^u 9,10 0 0373 &ucirc;
û "
-:u 9,10 0 0374
+:u 9,10 0 0374 &uuml;
ü "
-'y 9,10,3 0 0375
+'y 9,10,3 0 0375 &yacute;
ý "
-Tp 9,9,3 0 0376
+Tp 9,9,3 0 0376 &thorn;
þ "
-:y 9,10,3 0 0377
+:y 9,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/CI b/contrib/groff/devhtml/CI
index 6b26256beee3..13dacff2458b 100644
--- a/contrib/groff/devhtml/CI
+++ b/contrib/groff/devhtml/CI
@@ -3,14 +3,16 @@ spacewidth 9
charset
--- 9,1 0 040
! 9,9 0 041
-" 9,10 0 042
+" 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
+& 9,8 0 046 &amp;
' 9,10 0 047
+cq "
( 9,10,3 0 050
) 9,10,3 0 051
* 9,9 0 052
@@ -32,10 +34,10 @@ sl "
9 9,10 0 071
: 9,7 0 072
; 9,7,2 0 073
-< 9,8 0 074
+< 9,8 0 074 &lt;
= 9,6 0 075
eq "
-> 9,8 0 076
+> 9,8 0 076 &gt;
? 9,9 0 077
@ 9,9 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 9,7,2 0 0241
+r! 9,7,2 0 0241 &iexcl;
¡ "
-ct 9,10 0 0242
+ct 9,10 0 0242 &cent;
¢ "
-Po 9,9 0 0243
+Po 9,9 0 0243 &pound;
£ "
-Cs 9,7 0 0244
+Cs 9,7 0 0244 &curren;
¤ "
-Ye 9,9 0 0245
+Ye 9,9 0 0245 &yen;
¥ "
-bb 9,9,2 0 0246
+bb 9,9,2 0 0246 &brvbar;
¦ "
-sc 9,9,1 0 0247
+sc 9,9,1 0 0247 &sect;
§ "
-ad 9,9 0 0250
+ad 9,9 0 0250 &uml;
¨ "
-co 9,9 0 0251
+co 9,9 0 0251 &copy;
© "
-Of 9,9 0 0252
+Of 9,9 0 0252 &ordf;
ª "
-Fo 9,7 0 0253
+Fo 9,7 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 9,5 0 055
-hy "
+- 9,5 0 055 &shy;
+hy " &shy;
­ "
-rg 9,9 0 0256
+rg 9,9 0 0256 &reg;
® "
-a- 9,9 0 0257
+a- 9,9 0 0257 &macr;
¯ "
-de 9,10 0 0260
+de 9,10 0 0260 &deg;
° "
-+- 9,8 0 0261
++- 9,8 0 0261 &plusmn;
± "
-S2 9,10 0 0262
+S2 9,10 0 0262 &sup2;
² "
-S3 9,10 0 0263
+S3 9,10 0 0263 &sup3;
³ "
-aa 9,9 0 0264
+aa 9,9 0 0264 &acute;
´ "
-µ 9,7,3 0 0265
-ps 9,9,1 0 0266
+µ 9,7,3 0 0265 &micro;
+ps 9,9,1 0 0266 &para;
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267 &middot;
· "
-ac 9,1,3 0 0270
+ac 9,1,3 0 0270 &cedil;
¸ "
-S1 9,10 0 0271
+S1 9,10 0 0271 &sup1;
¹ "
-Om 9,9 0 0272
+Om 9,9 0 0272 &ordm;
º "
-Fc 9,7 0 0273
+Fc 9,7 0 0273 &raquo;
» "
-14 9,10 0 0274
+14 9,10 0 0274 &frac14;
¼ "
-12 9,10 0 0275
+12 9,10 0 0275 &frac12;
½ "
-34 9,10 0 0276
+34 9,10 0 0276 &frac34;
¾ "
-r? 9,7,2 0 0277
+r? 9,7,2 0 0277 &iquest;
¿ "
-`A 9,12 0 0300
+`A 9,12 0 0300 &Agrave;
À "
-'A 9,12 0 0301
+'A 9,12 0 0301 &Aacute;
Á "
-^A 9,12 0 0302
+^A 9,12 0 0302 &Acirc;
 "
-~A 9,12 0 0303
+~A 9,12 0 0303 &Atilde;
à "
-:A 9,11 0 0304
+:A 9,11 0 0304 &Auml;
Ä "
-oA 9,12 0 0305
+oA 9,12 0 0305 &Aring;
Å "
-AE 9,9 0 0306
+AE 9,9 0 0306 &AElig;
Æ "
-,C 9,9,3 0 0307
+,C 9,9,3 0 0307 &Ccedil;
Ç "
-`E 9,12 0 0310
+`E 9,12 0 0310 &Egrave;
È "
-'E 9,12 0 0311
+'E 9,12 0 0311 &Eacute;
É "
-^E 9,12 0 0312
+^E 9,12 0 0312 &Ecirc;
Ê "
-:E 9,11 0 0313
+:E 9,11 0 0313 &Euml;
Ë "
-`I 9,12 0 0314
+`I 9,12 0 0314 &Igrave;
Ì "
-'I 9,12 0 0315
+'I 9,12 0 0315 &Iacute;
Í "
-^I 9,12 0 0316
+^I 9,12 0 0316 &Icirc;
Î "
-:I 9,11 0 0317
+:I 9,11 0 0317 &Iuml;
Ï "
--D 9,9 0 0320
+-D 9,9 0 0320 &ETH;
Ð "
-~N 9,12 0 0321
+~N 9,12 0 0321 &Ntilde;
Ñ "
-`O 9,12 0 0322
+`O 9,12 0 0322 &Ograve;
Ò "
-'O 9,12 0 0323
+'O 9,12 0 0323 &Oacute;
Ó "
-^O 9,12 0 0324
+^O 9,12 0 0324 &Ocirc;
Ô "
-~O 9,12 0 0325
+~O 9,12 0 0325 &Otilde;
Õ "
-:O 9,11 0 0326
+:O 9,11 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 9,9 0 0330
+/O 9,9 0 0330 &Oslash;
Ø "
-`U 9,12 0 0331
+`U 9,12 0 0331 &Ugrave;
Ù "
-'U 9,12 0 0332
+'U 9,12 0 0332 &Uacute;
Ú "
-^U 9,12 0 0333
+^U 9,12 0 0333 &Ucirc;
Û "
-:U 9,11 0 0334
+:U 9,11 0 0334 &Uuml;
Ü "
-'Y 9,12 0 0335
+'Y 9,12 0 0335 &Yacute;
Ý "
-TP 9,9 0 0336
+TP 9,9 0 0336 &THORN;
Þ "
-ss 9,9 0 0337
+ss 9,9 0 0337 &szlig;
ß "
-`a 9,10 0 0340
+`a 9,10 0 0340 &agrave;
à "
-'a 9,10 0 0341
+'a 9,10 0 0341 &aacute;
á "
-^a 9,10 0 0342
+^a 9,10 0 0342 &acirc;
â "
-~a 9,10 0 0343
+~a 9,10 0 0343 &atilde;
ã "
-:a 9,9 0 0344
+:a 9,9 0 0344 &auml;
ä "
-oa 9,11 0 0345
+oa 9,11 0 0345 &aring;
å "
-ae 9,7 0 0346
+ae 9,7 0 0346 &aelig;
æ "
-,c 9,7,3 0 0347
+,c 9,7,3 0 0347 &ccedil;
ç "
-`e 9,10 0 0350
+`e 9,10 0 0350 &egrave;
è "
-'e 9,10 0 0351
+'e 9,10 0 0351 &eacute;
é "
-^e 9,10 0 0352
+^e 9,10 0 0352 &ecirc;
ê "
-:e 9,9 0 0353
+:e 9,9 0 0353 &euml;
ë "
-`i 9,10 0 0354
+`i 9,10 0 0354 &igrave;
ì "
-'i 9,10 0 0355
+'i 9,10 0 0355 &iacute;
í "
-^i 9,10 0 0356
+^i 9,10 0 0356 &icirc;
î "
-:i 9,9 0 0357
+:i 9,9 0 0357 &iuml;
ï "
-Sd 9,10 0 0360
+Sd 9,10 0 0360 &eth;
ð "
-~n 9,10 0 0361
+~n 9,10 0 0361 &ntilde;
ñ "
-`o 9,10 0 0362
+`o 9,10 0 0362 &ograve;
ò "
-'o 9,10 0 0363
+'o 9,10 0 0363 &oacute;
ó "
-^o 9,10 0 0364
+^o 9,10 0 0364 &ocirc;
ô "
-~o 9,10 0 0365
+~o 9,10 0 0365 &otilde;
õ "
-:o 9,9 0 0366
+:o 9,9 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 9,7 0 0370
+/o 9,7 0 0370 &oslash;
ø "
-`u 9,10 0 0371
+`u 9,10 0 0371 &ugrave;
ù "
-'u 9,10 0 0372
+'u 9,10 0 0372 &uacute;
ú "
-^u 9,10 0 0373
+^u 9,10 0 0373 &ucirc;
û "
-:u 9,9 0 0374
+:u 9,9 0 0374 &uuml;
ü "
-'y 9,10,3 0 0375
+'y 9,10,3 0 0375 &yacute;
ý "
-Tp 9,9,3 0 0376
+Tp 9,9,3 0 0376 &thorn;
þ "
-:y 9,9,3 0 0377
+:y 9,9,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/CR b/contrib/groff/devhtml/CR
index d8020a1b5399..94939c983a1e 100644
--- a/contrib/groff/devhtml/CR
+++ b/contrib/groff/devhtml/CR
@@ -3,14 +3,16 @@ spacewidth 9
charset
--- 9,1 0 040
! 9,9 0 041
-" 9,10 0 042
+" 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
+& 9,8 0 046 &amp;
' 9,10 0 047
+cq "
( 9,10,2 0 050
) 9,10,2 0 051
* 9,9 0 052
@@ -32,10 +34,10 @@ sl "
9 9,10 0 071
: 9,7 0 072
; 9,7,2 0 073
-< 9,8 0 074
+< 9,8 0 074 &lt;
= 9,6 0 075
eq "
-> 9,8 0 076
+> 9,8 0 076 &gt;
? 9,9 0 077
@ 9,9,1 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 9,7,2 0 0241
+r! 9,7,2 0 0241 &iexcl;
¡ "
-ct 9,9 0 0242
+ct 9,9 0 0242 &cent;
¢ "
-Po 9,9 0 0243
+Po 9,9 0 0243 &pound;
£ "
-Cs 9,7 0 0244
+Cs 9,7 0 0244 &curren;
¤ "
-Ye 9,9 0 0245
+Ye 9,9 0 0245 &yen;
¥ "
-bb 9,9,2 0 0246
+bb 9,9,2 0 0246 &brvbar;
¦ "
-sc 9,9,1 0 0247
+sc 9,9,1 0 0247 &sect;
§ "
-ad 9,9 0 0250
+ad 9,9 0 0250 &uml;
¨ "
-co 9,9 0 0251
+co 9,9 0 0251 &copy;
© "
-Of 9,9 0 0252
+Of 9,9 0 0252 &ordf;
ª "
-Fo 9,7 0 0253
+Fo 9,7 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 9,5 0 055
-hy "
+- 9,5 0 055 &shy;
+hy " &shy;
­ "
-rg 9,9 0 0256
+rg 9,9 0 0256 &reg;
® "
-a- 9,9 0 0257
+a- 9,9 0 0257 &macr;
¯ "
-de 9,10 0 0260
+de 9,10 0 0260 &deg;
° "
-+- 9,8 0 0261
++- 9,8 0 0261 &plusmn;
± "
-S2 9,10 0 0262
+S2 9,10 0 0262 &sup2;
² "
-S3 9,10 0 0263
+S3 9,10 0 0263 &sup3;
³ "
-aa 9,10 0 0264
+aa 9,10 0 0264 &acute;
´ "
-µ 9,7,3 0 0265
-ps 9,9,1 0 0266
+µ 9,7,3 0 0265 &micro;
+ps 9,9,1 0 0266 &para;
¶ "
-md 9,5 0 0267
+pc 9,5 0 0267 &middot;
· "
-ac 9,0,3 0 0270
+ac 9,0,3 0 0270 &cedil;
¸ "
-S1 9,10 0 0271
+S1 9,10 0 0271 &sup1;
¹ "
-Om 9,9 0 0272
+Om 9,9 0 0272 &ordm;
º "
-Fc 9,7 0 0273
+Fc 9,7 0 0273 &raquo;
» "
-14 9,10 0 0274
+14 9,10 0 0274 &frac14;
¼ "
-12 9,10 0 0275
+12 9,10 0 0275 &frac12;
½ "
-34 9,10 0 0276
+34 9,10 0 0276 &frac34;
¾ "
-r? 9,7,2 0 0277
+r? 9,7,2 0 0277 &iquest;
¿ "
-`A 9,12 0 0300
+`A 9,12 0 0300 &Agrave;
À "
-'A 9,12 0 0301
+'A 9,12 0 0301 &Aacute;
Á "
-^A 9,12 0 0302
+^A 9,12 0 0302 &Acirc;
 "
-~A 9,12 0 0303
+~A 9,12 0 0303 &Atilde;
à "
-:A 9,11 0 0304
+:A 9,11 0 0304 &Auml;
Ä "
-oA 9,12 0 0305
+oA 9,12 0 0305 &Aring;
Å "
-AE 9,9 0 0306
+AE 9,9 0 0306 &AElig;
Æ "
-,C 9,9,3 0 0307
+,C 9,9,3 0 0307 &Ccedil;
Ç "
-`E 9,12 0 0310
+`E 9,12 0 0310 &Egrave;
È "
-'E 9,12 0 0311
+'E 9,12 0 0311 &Eacute;
É "
-^E 9,12 0 0312
+^E 9,12 0 0312 &Ecirc;
Ê "
-:E 9,11 0 0313
+:E 9,11 0 0313 &Euml;
Ë "
-`I 9,12 0 0314
+`I 9,12 0 0314 &Igrave;
Ì "
-'I 9,12 0 0315
+'I 9,12 0 0315 &Iacute;
Í "
-^I 9,12 0 0316
+^I 9,12 0 0316 &Icirc;
Î "
-:I 9,11 0 0317
+:I 9,11 0 0317 &Iuml;
Ï "
--D 9,9 0 0320
+-D 9,9 0 0320 &ETH;
Ð "
-~N 9,12 0 0321
+~N 9,12 0 0321 &Ntilde;
Ñ "
-`O 9,12 0 0322
+`O 9,12 0 0322 &Ograve;
Ò "
-'O 9,12 0 0323
+'O 9,12 0 0323 &Oacute;
Ó "
-^O 9,12 0 0324
+^O 9,12 0 0324 &Ocirc;
Ô "
-~O 9,12 0 0325
+~O 9,12 0 0325 &Otilde;
Õ "
-:O 9,11 0 0326
+:O 9,11 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 9,9 0 0330
+/O 9,9 0 0330 &Oslash;
Ø "
-`U 9,12 0 0331
+`U 9,12 0 0331 &Ugrave;
Ù "
-'U 9,12 0 0332
+'U 9,12 0 0332 &Uacute;
Ú "
-^U 9,12 0 0333
+^U 9,12 0 0333 &Ucirc;
Û "
-:U 9,11 0 0334
+:U 9,11 0 0334 &Uuml;
Ü "
-'Y 9,12 0 0335
+'Y 9,12 0 0335 &Yacute;
Ý "
-TP 9,9 0 0336
+TP 9,9 0 0336 &THORN;
Þ "
-ss 9,9 0 0337
+ss 9,9 0 0337 &szlig;
ß "
-`a 9,10 0 0340
+`a 9,10 0 0340 &agrave;
à "
-'a 9,10 0 0341
+'a 9,10 0 0341 &aacute;
á "
-^a 9,10 0 0342
+^a 9,10 0 0342 &acirc;
â "
-~a 9,10 0 0343
+~a 9,10 0 0343 &atilde;
ã "
-:a 9,9 0 0344
+:a 9,9 0 0344 &auml;
ä "
-oa 9,10 0 0345
+oa 9,10 0 0345 &aring;
å "
-ae 9,7 0 0346
+ae 9,7 0 0346 &aelig;
æ "
-,c 9,7,3 0 0347
+,c 9,7,3 0 0347 &ccedil;
ç "
-`e 9,10 0 0350
+`e 9,10 0 0350 &egrave;
è "
-'e 9,10 0 0351
+'e 9,10 0 0351 &eacute;
é "
-^e 9,10 0 0352
+^e 9,10 0 0352 &ecirc;
ê "
-:e 9,9 0 0353
+:e 9,9 0 0353 &euml;
ë "
-`i 9,10 0 0354
+`i 9,10 0 0354 &igrave;
ì "
-'i 9,10 0 0355
+'i 9,10 0 0355 &iacute;
í "
-^i 9,10 0 0356
+^i 9,10 0 0356 &icirc;
î "
-:i 9,9 0 0357
+:i 9,9 0 0357 &iuml;
ï "
-Sd 9,12 0 0360
+Sd 9,12 0 0360 &eth;
ð "
-~n 9,10 0 0361
+~n 9,10 0 0361 &ntilde;
ñ "
-`o 9,10 0 0362
+`o 9,10 0 0362 &ograve;
ò "
-'o 9,10 0 0363
+'o 9,10 0 0363 &oacute;
ó "
-^o 9,10 0 0364
+^o 9,10 0 0364 &ocirc;
ô "
-~o 9,10 0 0365
+~o 9,10 0 0365 &otilde;
õ "
-:o 9,9 0 0366
+:o 9,9 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 9,7 0 0370
+/o 9,7 0 0370 &oslash;
ø "
-`u 9,10 0 0371
+`u 9,10 0 0371 &ugrave;
ù "
-'u 9,10 0 0372
+'u 9,10 0 0372 &uacute;
ú "
-^u 9,10 0 0373
+^u 9,10 0 0373 &ucirc;
û "
-:u 9,9 0 0374
+:u 9,9 0 0374 &uuml;
ü "
-'y 9,10,3 0 0375
+'y 9,10,3 0 0375 &yacute;
ý "
-Tp 9,9,3 0 0376
+Tp 9,9,3 0 0376 &thorn;
þ "
-:y 9,9,3 0 0377
+:y 9,9,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/DESC b/contrib/groff/devhtml/DESC
index dcab7cd4adfa..a89775265beb 100644
--- a/contrib/groff/devhtml/DESC
+++ b/contrib/groff/devhtml/DESC
@@ -8,3 +8,5 @@ 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
index 06f2bf95f61d..0e42103d07f5 100644
--- a/contrib/groff/devhtml/HB
+++ b/contrib/groff/devhtml/HB
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 4,11 0 041
-" 7,11 0 042
+" 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
+& 11,10 0 046 &amp;
' 5,11 0 047
+cq "
( 5,11,3 0 050
) 5,11,3 0 051
* 6,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 5,8 0 072
; 5,8,1 0 073
-< 8,7 0 074
+< 8,7 0 074 &lt;
= 9,6 0 075
eq "
-> 8,7 0 076
+> 8,7 0 076 &gt;
? 9,11 0 077
@ 14,11,1 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 4,8,3 0 0241
+r! 4,8,3 0 0241 &iexcl;
¡ "
-ct 8,9,1 0 0242
+ct 8,9,1 0 0242 &cent;
¢ "
-Po 8,11 0 0243
+Po 8,11 0 0243 &pound;
£ "
-Cs 8,9 0 0244
+Cs 8,9 0 0244 &curren;
¤ "
-Ye 9,11 0 0245
+Ye 9,11 0 0245 &yen;
¥ "
-bb 4,11,3 0 0246
+bb 4,11,3 0 0246 &brvbar;
¦ "
-sc 8,11,3 0 0247
+sc 8,11,3 0 0247 &sect;
§ "
-ad 5,11 0 0250
+ad 5,11 0 0250 &uml;
¨ "
-co 12,11 0 0251
+co 12,11 0 0251 &copy;
© "
-Of 6,11 0 0252
+Of 6,11 0 0252 &ordf;
ª "
-Fo 9,7 0 0253
+Fo 9,7 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 4,5 0 055
-hy "
+- 4,5 0 055 &shy;
+hy " &shy;
­ "
-rg 12,11 0 0256
+rg 12,11 0 0256 &reg;
® "
-a- 5,10 0 0257
+a- 5,10 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 9,9 0 0261
++- 9,9 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 9,8,3 0 0265
-ps 8,11,3 0 0266
+µ 9,8,3 0 0265 &micro;
+ps 8,11,3 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 4,11 0 0271
+S1 4,11 0 0271 &sup1;
¹ "
-Om 6,11 0 0272
+Om 6,11 0 0272 &ordm;
º "
-Fc 9,7 0 0273
+Fc 9,7 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 9,8,3 0 0277
+r? 9,8,3 0 0277 &iquest;
¿ "
-`A 10,14 0 0300
+`A 10,14 0 0300 &Agrave;
À "
-'A 10,14 0 0301
+'A 10,14 0 0301 &Aacute;
Á "
-^A 10,14 0 0302
+^A 10,14 0 0302 &Acirc;
 "
-~A 10,14 0 0303
+~A 10,14 0 0303 &Atilde;
à "
-:A 10,14 0 0304
+:A 10,14 0 0304 &Auml;
Ä "
-oA 10,14 0 0305
+oA 10,14 0 0305 &Aring;
Å "
-AE 15,11 0 0306
+AE 15,11 0 0306 &AElig;
Æ "
-,C 11,11,3 0 0307
+,C 11,11,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,14 0 0313
+:E 9,14 0 0313 &Euml;
Ë "
-`I 4,14 0 0314
+`I 4,14 0 0314 &Igrave;
Ì "
-'I 4,14 0 0315
+'I 4,14 0 0315 &Iacute;
Í "
-^I 4,14 0 0316
+^I 4,14 0 0316 &Icirc;
Î "
-:I 4,14 0 0317
+:I 4,14 0 0317 &Iuml;
Ï "
--D 11,11 0 0320
+-D 11,11 0 0320 &ETH;
Ð "
-~N 11,14 0 0321
+~N 11,14 0 0321 &Ntilde;
Ñ "
-`O 12,14 0 0322
+`O 12,14 0 0322 &Ograve;
Ò "
-'O 12,14 0 0323
+'O 12,14 0 0323 &Oacute;
Ó "
-^O 12,14 0 0324
+^O 12,14 0 0324 &Ocirc;
Ô "
-~O 12,14 0 0325
+~O 12,14 0 0325 &Otilde;
Õ "
-:O 12,14 0 0326
+:O 12,14 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 12,11 0 0330
+/O 12,11 0 0330 &Oslash;
Ø "
-`U 11,14 0 0331
+`U 11,14 0 0331 &Ugrave;
Ù "
-'U 11,14 0 0332
+'U 11,14 0 0332 &Uacute;
Ú "
-^U 11,14 0 0333
+^U 11,14 0 0333 &Ucirc;
Û "
-:U 11,14 0 0334
+:U 11,14 0 0334 &Uuml;
Ü "
-'Y 10,14 0 0335
+'Y 10,14 0 0335 &Yacute;
Ý "
-TP 10,11 0 0336
+TP 10,11 0 0336 &THORN;
Þ "
-ss 8,11 0 0337
+ss 8,11 0 0337 &szlig;
ß "
-`a 8,11 0 0340
+`a 8,11 0 0340 &agrave;
à "
-'a 8,11 0 0341
+'a 8,11 0 0341 &aacute;
á "
-^a 8,11 0 0342
+^a 8,11 0 0342 &acirc;
â "
-~a 8,11 0 0343
+~a 8,11 0 0343 &atilde;
ã "
-:a 8,11 0 0344
+:a 8,11 0 0344 &auml;
ä "
-oa 8,11 0 0345
+oa 8,11 0 0345 &aring;
å "
-ae 13,8 0 0346
+ae 13,8 0 0346 &aelig;
æ "
-,c 9,8,3 0 0347
+,c 9,8,3 0 0347 &ccedil;
ç "
-`e 8,11 0 0350
+`e 8,11 0 0350 &egrave;
è "
-'e 8,11 0 0351
+'e 8,11 0 0351 &eacute;
é "
-^e 8,11 0 0352
+^e 8,11 0 0352 &ecirc;
ê "
-:e 8,11 0 0353
+:e 8,11 0 0353 &euml;
ë "
-`i 4,11 0 0354
+`i 4,11 0 0354 &igrave;
ì "
-'i 4,11 0 0355
+'i 4,11 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,11 0 0357
+:i 4,11 0 0357 &iuml;
ï "
-Sd 9,11 0 0360
+Sd 9,11 0 0360 &eth;
ð "
-~n 9,11 0 0361
+~n 9,11 0 0361 &ntilde;
ñ "
-`o 9,11 0 0362
+`o 9,11 0 0362 &ograve;
ò "
-'o 9,11 0 0363
+'o 9,11 0 0363 &oacute;
ó "
-^o 9,11 0 0364
+^o 9,11 0 0364 &ocirc;
ô "
-~o 9,11 0 0365
+~o 9,11 0 0365 &otilde;
õ "
-:o 9,11 0 0366
+:o 9,11 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 9,8 0 0370
+/o 9,8 0 0370 &oslash;
ø "
-`u 9,11 0 0371
+`u 9,11 0 0371 &ugrave;
ù "
-'u 9,11 0 0372
+'u 9,11 0 0372 &uacute;
ú "
-^u 9,11 0 0373
+^u 9,11 0 0373 &ucirc;
û "
-:u 9,11 0 0374
+:u 9,11 0 0374 &uuml;
ü "
-'y 8,11,3 0 0375
+'y 8,11,3 0 0375 &yacute;
ý "
-Tp 9,11,3 0 0376
+Tp 9,11,3 0 0376 &thorn;
þ "
-:y 8,11,3 0 0377
+:y 8,11,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/HBI b/contrib/groff/devhtml/HBI
index bb2031a06c92..a933cfb7f114 100644
--- a/contrib/groff/devhtml/HBI
+++ b/contrib/groff/devhtml/HBI
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 5,11 0 041
-" 7,11 0 042
+" 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
+& 11,10 0 046 &amp;
' 5,11 0 047
+cq "
( 5,11,3 0 050
) 6,11,3 0 051
* 6,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 5,8 0 072
; 5,8,2 0 073
-< 8,7 0 074
+< 8,7 0 074 &lt;
= 9,6 0 075
eq "
-> 9,7 0 076
+> 9,7 0 076 &gt;
? 9,11 0 077
@ 14,11,2 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 5,8,3 0 0241
+r! 5,8,3 0 0241 &iexcl;
¡ "
-ct 8,9,1 0 0242
+ct 8,9,1 0 0242 &cent;
¢ "
-Po 9,11 0 0243
+Po 9,11 0 0243 &pound;
£ "
-Cs 9,8 0 0244
+Cs 9,8 0 0244 &curren;
¤ "
-Ye 9,11 0 0245
+Ye 9,11 0 0245 &yen;
¥ "
-bb 4,11,3 0 0246
+bb 4,11,3 0 0246 &brvbar;
¦ "
-sc 9,11,3 0 0247
+sc 9,11,3 0 0247 &sect;
§ "
-ad 5,11 0 0250
+ad 5,11 0 0250 &uml;
¨ "
-co 12,11 0 0251
+co 12,11 0 0251 &copy;
© "
-Of 6,11 0 0252
+Of 6,11 0 0252 &ordf;
ª "
-Fo 11,7 0 0253
+Fo 11,7 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 5,5 0 055
-hy "
+- 5,5 0 055 &shy;
+hy " &shy;
­ "
-rg 12,11 0 0256
+rg 12,11 0 0256 &reg;
® "
-a- 5,11 0 0257
+a- 5,11 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 9,9 0 0261
++- 9,9 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 9,8,3 0 0265
-ps 8,11,3 0 0266
+µ 9,8,3 0 0265 &micro;
+ps 8,11,3 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 5,1,3 0 0270
+ac 5,1,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 6,11 0 0272
+Om 6,11 0 0272 &ordm;
º "
-Fc 11,7 0 0273
+Fc 11,7 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 13,11 0 0276
+34 13,11 0 0276 &frac34;
¾ "
-r? 8,8,3 0 0277
+r? 8,8,3 0 0277 &iquest;
¿ "
-`A 9,14 0 0300
+`A 9,14 0 0300 &Agrave;
À "
-'A 9,14 0 0301
+'A 9,14 0 0301 &Aacute;
Á "
-^A 9,14 0 0302
+^A 9,14 0 0302 &Acirc;
 "
-~A 9,14 0 0303
+~A 9,14 0 0303 &Atilde;
à "
-:A 9,14 0 0304
+:A 9,14 0 0304 &Auml;
Ä "
-oA 9,14 0 0305
+oA 9,14 0 0305 &Aring;
Å "
-AE 14,11 0 0306
+AE 14,11 0 0306 &AElig;
Æ "
-,C 11,11,3 0 0307
+,C 11,11,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,14 0 0313
+:E 9,14 0 0313 &Euml;
Ë "
-`I 4,14 0 0314
+`I 4,14 0 0314 &Igrave;
Ì "
-'I 4,14 0 0315
+'I 4,14 0 0315 &Iacute;
Í "
-^I 4,14 0 0316
+^I 4,14 0 0316 &Icirc;
Î "
-:I 4,14 0 0317
+:I 4,14 0 0317 &Iuml;
Ï "
--D 11,11 0 0320
+-D 11,11 0 0320 &ETH;
Ð "
-~N 11,14 0 0321
+~N 11,14 0 0321 &Ntilde;
Ñ "
-`O 12,14 0 0322
+`O 12,14 0 0322 &Ograve;
Ò "
-'O 12,14 0 0323
+'O 12,14 0 0323 &Oacute;
Ó "
-^O 12,14 0 0324
+^O 12,14 0 0324 &Ocirc;
Ô "
-~O 12,14 0 0325
+~O 12,14 0 0325 &Otilde;
Õ "
-:O 12,14 0 0326
+:O 12,14 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 12,11 0 0330
+/O 12,11 0 0330 &Oslash;
Ø "
-`U 11,14 0 0331
+`U 11,14 0 0331 &Ugrave;
Ù "
-'U 11,14 0 0332
+'U 11,14 0 0332 &Uacute;
Ú "
-^U 11,14 0 0333
+^U 11,14 0 0333 &Ucirc;
Û "
-:U 11,14 0 0334
+:U 11,14 0 0334 &Uuml;
Ü "
-'Y 10,14 0 0335
+'Y 10,14 0 0335 &Yacute;
Ý "
-TP 10,11 0 0336
+TP 10,11 0 0336 &THORN;
Þ "
-ss 9,11 0 0337
+ss 9,11 0 0337 &szlig;
ß "
-`a 8,11 0 0340
+`a 8,11 0 0340 &agrave;
à "
-'a 8,11 0 0341
+'a 8,11 0 0341 &aacute;
á "
-^a 8,11 0 0342
+^a 8,11 0 0342 &acirc;
â "
-~a 8,11 0 0343
+~a 8,11 0 0343 &atilde;
ã "
-:a 8,11 0 0344
+:a 8,11 0 0344 &auml;
ä "
-oa 8,11 0 0345
+oa 8,11 0 0345 &aring;
å "
-ae 13,8 0 0346
+ae 13,8 0 0346 &aelig;
æ "
-,c 8,8,3 0 0347
+,c 8,8,3 0 0347 &ccedil;
ç "
-`e 8,11 0 0350
+`e 8,11 0 0350 &egrave;
è "
-'e 8,11 0 0351
+'e 8,11 0 0351 &eacute;
é "
-^e 8,11 0 0352
+^e 8,11 0 0352 &ecirc;
ê "
-:e 8,11 0 0353
+:e 8,11 0 0353 &euml;
ë "
-`i 4,11 0 0354
+`i 4,11 0 0354 &igrave;
ì "
-'i 4,11 0 0355
+'i 4,11 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,11 0 0357
+:i 4,11 0 0357 &iuml;
ï "
-Sd 8,11 0 0360
+Sd 8,11 0 0360 &eth;
ð "
-~n 9,11 0 0361
+~n 9,11 0 0361 &ntilde;
ñ "
-`o 8,11 0 0362
+`o 8,11 0 0362 &ograve;
ò "
-'o 8,11 0 0363
+'o 8,11 0 0363 &oacute;
ó "
-^o 8,11 0 0364
+^o 8,11 0 0364 &ocirc;
ô "
-~o 8,11 0 0365
+~o 8,11 0 0365 &otilde;
õ "
-:o 8,11 0 0366
+:o 8,11 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 8,8 0 0370
+/o 8,8 0 0370 &oslash;
ø "
-`u 9,11 0 0371
+`u 9,11 0 0371 &ugrave;
ù "
-'u 9,11 0 0372
+'u 9,11 0 0372 &uacute;
ú "
-^u 9,11 0 0373
+^u 9,11 0 0373 &ucirc;
û "
-:u 9,11 0 0374
+:u 9,11 0 0374 &uuml;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 9,11,3 0 0376
+Tp 9,11,3 0 0376 &thorn;
þ "
-:y 7,11,3 0 0377
+:y 7,11,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/HI b/contrib/groff/devhtml/HI
index 1c66db735f39..7007ada5db12 100644
--- a/contrib/groff/devhtml/HI
+++ b/contrib/groff/devhtml/HI
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 4,11 0 041
-" 5,11 0 042
+" 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
+& 10,10 0 046 &amp;
' 3,11 0 047
+cq "
( 5,11,3 0 050
) 5,11,3 0 051
* 8,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 4,8 0 072
; 4,8,2 0 073
-< 9,7 0 074
+< 9,7 0 074 &lt;
= 9,6 0 075
eq "
-> 9,7 0 076
+> 9,7 0 076 &gt;
? 8,11 0 077
@ 13,11,1 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 4,8,3 0 0241
+r! 4,8,3 0 0241 &iexcl;
¡ "
-ct 8,9,1 0 0242
+ct 8,9,1 0 0242 &cent;
¢ "
-Po 9,11 0 0243
+Po 9,11 0 0243 &pound;
£ "
-Cs 8,8 0 0244
+Cs 8,8 0 0244 &curren;
¤ "
-Ye 9,11 0 0245
+Ye 9,11 0 0245 &yen;
¥ "
-bb 4,11,3 0 0246
+bb 4,11,3 0 0246 &brvbar;
¦ "
-sc 8,11,3 0 0247
+sc 8,11,3 0 0247 &sect;
§ "
-ad 5,10 0 0250
+ad 5,10 0 0250 &uml;
¨ "
-co 12,11 0 0251
+co 12,11 0 0251 &copy;
© "
-Of 5,11 0 0252
+Of 5,11 0 0252 &ordf;
ª "
-Fo 8,6 0 0253
+Fo 8,6 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 5,5 0 055
-hy "
+- 5,5 0 055 &shy;
+hy " &shy;
­ "
-rg 12,11 0 0256
+rg 12,11 0 0256 &reg;
® "
-a- 4,10 0 0257
+a- 4,10 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 9,9 0 0261
++- 9,9 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 4,11 0 0264
+aa 4,11 0 0264 &acute;
´ "
-µ 8,8,3 0 0265
-ps 8,11,3 0 0266
+µ 8,8,3 0 0265 &micro;
+ps 8,11,3 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 3,0,3 0 0270
+ac 3,0,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 5,11 0 0272
+Om 5,11 0 0272 &ordm;
º "
-Fc 8,6 0 0273
+Fc 8,6 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 8,8,3 0 0277
+r? 8,8,3 0 0277 &iquest;
¿ "
-`A 11,14 0 0300
+`A 11,14 0 0300 &Agrave;
À "
-'A 11,14 0 0301
+'A 11,14 0 0301 &Aacute;
Á "
-^A 11,14 0 0302
+^A 11,14 0 0302 &Acirc;
 "
-~A 11,14 0 0303
+~A 11,14 0 0303 &Atilde;
à "
-:A 11,13 0 0304
+:A 11,13 0 0304 &Auml;
Ä "
-oA 11,14 0 0305
+oA 11,14 0 0305 &Aring;
Å "
-AE 15,11 0 0306
+AE 15,11 0 0306 &AElig;
Æ "
-,C 10,11,3 0 0307
+,C 10,11,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,13 0 0313
+:E 9,13 0 0313 &Euml;
Ë "
-`I 5,14 0 0314
+`I 5,14 0 0314 &Igrave;
Ì "
-'I 5,14 0 0315
+'I 5,14 0 0315 &Iacute;
Í "
-^I 5,14 0 0316
+^I 5,14 0 0316 &Icirc;
Î "
-:I 5,13 0 0317
+:I 5,13 0 0317 &Iuml;
Ï "
--D 10,11 0 0320
+-D 10,11 0 0320 &ETH;
Ð "
-~N 11,14 0 0321
+~N 11,14 0 0321 &Ntilde;
Ñ "
-`O 11,14 0 0322
+`O 11,14 0 0322 &Ograve;
Ò "
-'O 11,14 0 0323
+'O 11,14 0 0323 &Oacute;
Ó "
-^O 11,14 0 0324
+^O 11,14 0 0324 &Ocirc;
Ô "
-~O 11,14 0 0325
+~O 11,14 0 0325 &Otilde;
Õ "
-:O 11,13 0 0326
+:O 11,13 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 11,11 0 0330
+/O 11,11 0 0330 &Oslash;
Ø "
-`U 11,14 0 0331
+`U 11,14 0 0331 &Ugrave;
Ù "
-'U 11,14 0 0332
+'U 11,14 0 0332 &Uacute;
Ú "
-^U 11,14 0 0333
+^U 11,14 0 0333 &Ucirc;
Û "
-:U 11,13 0 0334
+:U 11,13 0 0334 &Uuml;
Ü "
-'Y 9,14 0 0335
+'Y 9,14 0 0335 &Yacute;
Ý "
-TP 9,11 0 0336
+TP 9,11 0 0336 &THORN;
Þ "
-ss 8,11 0 0337
+ss 8,11 0 0337 &szlig;
ß "
-`a 8,11 0 0340
+`a 8,11 0 0340 &agrave;
à "
-'a 8,11 0 0341
+'a 8,11 0 0341 &aacute;
á "
-^a 8,11 0 0342
+^a 8,11 0 0342 &acirc;
â "
-~a 8,11 0 0343
+~a 8,11 0 0343 &atilde;
ã "
-:a 8,11 0 0344
+:a 8,11 0 0344 &auml;
ä "
-oa 8,11 0 0345
+oa 8,11 0 0345 &aring;
å "
-ae 12,8 0 0346
+ae 12,8 0 0346 &aelig;
æ "
-,c 7,8,3 0 0347
+,c 7,8,3 0 0347 &ccedil;
ç "
-`e 8,11 0 0350
+`e 8,11 0 0350 &egrave;
è "
-'e 8,11 0 0351
+'e 8,11 0 0351 &eacute;
é "
-^e 8,11 0 0352
+^e 8,11 0 0352 &ecirc;
ê "
-:e 8,11 0 0353
+:e 8,11 0 0353 &euml;
ë "
-`i 3,11 0 0354
+`i 3,11 0 0354 &igrave;
ì "
-'i 3,11 0 0355
+'i 3,11 0 0355 &iacute;
í "
-^i 3,11 0 0356
+^i 3,11 0 0356 &icirc;
î "
-:i 3,11 0 0357
+:i 3,11 0 0357 &iuml;
ï "
-Sd 8,11 0 0360
+Sd 8,11 0 0360 &eth;
ð "
-~n 8,11 0 0361
+~n 8,11 0 0361 &ntilde;
ñ "
-`o 8,11 0 0362
+`o 8,11 0 0362 &ograve;
ò "
-'o 8,11 0 0363
+'o 8,11 0 0363 &oacute;
ó "
-^o 8,11 0 0364
+^o 8,11 0 0364 &ocirc;
ô "
-~o 8,11 0 0365
+~o 8,11 0 0365 &otilde;
õ "
-:o 8,11 0 0366
+:o 8,11 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 8,9,1 0 0370
+/o 8,9,1 0 0370 &oslash;
ø "
-`u 8,11 0 0371
+`u 8,11 0 0371 &ugrave;
ù "
-'u 8,11 0 0372
+'u 8,11 0 0372 &uacute;
ú "
-^u 8,11 0 0373
+^u 8,11 0 0373 &ucirc;
û "
-:u 8,11 0 0374
+:u 8,11 0 0374 &uuml;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 8,11,3 0 0376
+Tp 8,11,3 0 0376 &thorn;
þ "
-:y 7,11,3 0 0377
+:y 7,11,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/HR b/contrib/groff/devhtml/HR
index 756ef71120c7..57f5603e044f 100644
--- a/contrib/groff/devhtml/HR
+++ b/contrib/groff/devhtml/HR
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 4,11 0 041
-" 5,11 0 042
+" 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
+& 10,10 0 046 &amp;
' 3,11 0 047
+cq "
( 5,11,3 0 050
) 5,11,3 0 051
* 7,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 3,8 0 072
; 4,8,2 0 073
-< 8,7 0 074
+< 8,7 0 074 &lt;
= 9,6 0 075
eq "
-> 8,7 0 076
+> 8,7 0 076 &gt;
? 8,11 0 077
@ 13,11,1 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 4,8,3 0 0241
+r! 4,8,3 0 0241 &iexcl;
¡ "
-ct 8,9,1 0 0242
+ct 8,9,1 0 0242 &cent;
¢ "
-Po 8,11 0 0243
+Po 8,11 0 0243 &pound;
£ "
-Cs 8,8 0 0244
+Cs 8,8 0 0244 &curren;
¤ "
-Ye 7,11 0 0245
+Ye 7,11 0 0245 &yen;
¥ "
-bb 3,11,3 0 0246
+bb 3,11,3 0 0246 &brvbar;
¦ "
-sc 8,11,3 0 0247
+sc 8,11,3 0 0247 &sect;
§ "
-ad 5,10 0 0250
+ad 5,10 0 0250 &uml;
¨ "
-co 12,11 0 0251
+co 12,11 0 0251 &copy;
© "
-Of 6,11 0 0252
+Of 6,11 0 0252 &ordf;
ª "
-Fo 8,7 0 0253
+Fo 8,7 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 4,5 0 055
-hy "
+- 4,5 0 055 &shy;
+hy " &shy;
­ "
-rg 12,11 0 0256
+rg 12,11 0 0256 &reg;
® "
-a- 4,10 0 0257
+a- 4,10 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 9,9 0 0261
++- 9,9 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 8,8,3 0 0265
-ps 8,11,3 0 0266
+µ 8,8,3 0 0265 &micro;
+ps 8,11,3 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 6,11 0 0272
+Om 6,11 0 0272 &ordm;
º "
-Fc 8,7 0 0273
+Fc 8,7 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 8,8,3 0 0277
+r? 8,8,3 0 0277 &iquest;
¿ "
-`A 9,14 0 0300
+`A 9,14 0 0300 &Agrave;
À "
-'A 9,14 0 0301
+'A 9,14 0 0301 &Aacute;
Á "
-^A 9,14 0 0302
+^A 9,14 0 0302 &Acirc;
 "
-~A 9,13 0 0303
+~A 9,13 0 0303 &Atilde;
à "
-:A 9,14 0 0304
+:A 9,14 0 0304 &Auml;
Ä "
-oA 9,14 0 0305
+oA 9,14 0 0305 &Aring;
Å "
-AE 14,11 0 0306
+AE 14,11 0 0306 &AElig;
Æ "
-,C 10,11,3 0 0307
+,C 10,11,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,13 0 0313
+:E 9,13 0 0313 &Euml;
Ë "
-`I 4,14 0 0314
+`I 4,14 0 0314 &Igrave;
Ì "
-'I 4,14 0 0315
+'I 4,14 0 0315 &Iacute;
Í "
-^I 4,14 0 0316
+^I 4,14 0 0316 &Icirc;
Î "
-:I 4,13 0 0317
+:I 4,13 0 0317 &Iuml;
Ï "
--D 10,11 0 0320
+-D 10,11 0 0320 &ETH;
Ð "
-~N 10,14 0 0321
+~N 10,14 0 0321 &Ntilde;
Ñ "
-`O 11,14 0 0322
+`O 11,14 0 0322 &Ograve;
Ò "
-'O 11,14 0 0323
+'O 11,14 0 0323 &Oacute;
Ó "
-^O 11,14 0 0324
+^O 11,14 0 0324 &Ocirc;
Ô "
-~O 11,14 0 0325
+~O 11,14 0 0325 &Otilde;
Õ "
-:O 11,13 0 0326
+:O 11,13 0 0326 &Ouml;
Ö "
-mu 9,8 0 0327
+mu 9,8 0 0327 &times;
× "
-/O 11,11 0 0330
+/O 11,11 0 0330 &Oslash;
Ø "
-`U 10,14 0 0331
+`U 10,14 0 0331 &Ugrave;
Ù "
-'U 10,14 0 0332
+'U 10,14 0 0332 &Uacute;
Ú "
-^U 10,14 0 0333
+^U 10,14 0 0333 &Ucirc;
Û "
-:U 10,13 0 0334
+:U 10,13 0 0334 &Uuml;
Ü "
-'Y 9,14 0 0335
+'Y 9,14 0 0335 &Yacute;
Ý "
-TP 9,11 0 0336
+TP 9,11 0 0336 &THORN;
Þ "
-ss 7,11 0 0337
+ss 7,11 0 0337 &szlig;
ß "
-`a 8,11 0 0340
+`a 8,11 0 0340 &agrave;
à "
-'a 8,11 0 0341
+'a 8,11 0 0341 &aacute;
á "
-^a 8,11 0 0342
+^a 8,11 0 0342 &acirc;
â "
-~a 8,11 0 0343
+~a 8,11 0 0343 &atilde;
ã "
-:a 8,11 0 0344
+:a 8,11 0 0344 &auml;
ä "
-oa 8,12 0 0345
+oa 8,12 0 0345 &aring;
å "
-ae 13,8 0 0346
+ae 13,8 0 0346 &aelig;
æ "
-,c 8,8,3 0 0347
+,c 8,8,3 0 0347 &ccedil;
ç "
-`e 8,11 0 0350
+`e 8,11 0 0350 &egrave;
è "
-'e 8,11 0 0351
+'e 8,11 0 0351 &eacute;
é "
-^e 8,11 0 0352
+^e 8,11 0 0352 &ecirc;
ê "
-:e 8,11 0 0353
+:e 8,11 0 0353 &euml;
ë "
-`i 3,11 0 0354
+`i 3,11 0 0354 &igrave;
ì "
-'i 3,11 0 0355
+'i 3,11 0 0355 &iacute;
í "
-^i 3,11 0 0356
+^i 3,11 0 0356 &icirc;
î "
-:i 3,11 0 0357
+:i 3,11 0 0357 &iuml;
ï "
-Sd 8,11 0 0360
+Sd 8,11 0 0360 &eth;
ð "
-~n 8,11 0 0361
+~n 8,11 0 0361 &ntilde;
ñ "
-`o 8,11 0 0362
+`o 8,11 0 0362 &ograve;
ò "
-'o 8,11 0 0363
+'o 8,11 0 0363 &oacute;
ó "
-^o 8,11 0 0364
+^o 8,11 0 0364 &ocirc;
ô "
-~o 8,11 0 0365
+~o 8,11 0 0365 &otilde;
õ "
-:o 8,11 0 0366
+:o 8,11 0 0366 &ouml;
ö "
-di 9,8 0 0367
+di 9,8 0 0367 &divide;
÷ "
-/o 8,8 0 0370
+/o 8,8 0 0370 &oslash;
ø "
-`u 8,11 0 0371
+`u 8,11 0 0371 &ugrave;
ù "
-'u 8,11 0 0372
+'u 8,11 0 0372 &uacute;
ú "
-^u 8,11 0 0373
+^u 8,11 0 0373 &ucirc;
û "
-:u 8,11 0 0374
+:u 8,11 0 0374 &uuml;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 8,11,3 0 0376
+Tp 8,11,3 0 0376 &thorn;
þ "
-:y 7,10,3 0 0377
+:y 7,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/NB b/contrib/groff/devhtml/NB
index 88ef29f0e595..63f36bd3d9a6 100644
--- a/contrib/groff/devhtml/NB
+++ b/contrib/groff/devhtml/NB
@@ -3,14 +3,16 @@ spacewidth 11
charset
--- 11,1 0 040
! 4,11 0 041
-" 5,11 0 042
+" 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
+& 13,11 0 046 &amp;
' 4,11 0 047
+cq "
( 5,11,2 0 050
) 5,11,2 0 051
* 6,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 4,7 0 072
; 4,7,2 0 073
-< 8,8 0 074
+< 8,8 0 074 &lt;
= 8,6 0 075
eq "
-> 8,8 0 076
+> 8,8 0 076 &gt;
? 7,11 0 077
@ 14,11 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 5,8,3 0 0241
+r! 5,8,3 0 0241 &iexcl;
¡ "
-ct 8,8,1 0 0242
+ct 8,8,1 0 0242 &cent;
¢ "
-Po 9,11 0 0243
+Po 9,11 0 0243 &pound;
£ "
-Cs 9,10 0 0244
+Cs 9,10 0 0244 &curren;
¤ "
-Ye 11,11 0 0245
+Ye 11,11 0 0245 &yen;
¥ "
-bb 8,11 0 0246
+bb 8,11 0 0246 &brvbar;
¦ "
-sc 7,11,2 0 0247
+sc 7,11,2 0 0247 &sect;
§ "
-ad 7,10 0 0250
+ad 7,10 0 0250 &uml;
¨ "
-co 12,11 0 0251
+co 12,11 0 0251 &copy;
© "
-Of 6,11 0 0252
+Of 6,11 0 0252 &ordf;
ª "
-Fo 8,6 0 0253
+Fo 8,6 0 0253 &laquo;
« "
-no 8,6 0 0254
+no 8,6 0 0254 &not;
¬ "
-- 5,5 0 055
-hy "
+- 5,5 0 055 &shy;
+hy " &shy;
­ "
-rg 12,11 0 0256
+rg 12,11 0 0256 &reg;
® "
-a- 7,9 0 0257
+a- 7,9 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 8,8 0 0261
++- 8,8 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 6,11 0 0264
+aa 6,11 0 0264 &acute;
´ "
-µ 10,7,3 0 0265
-ps 10,11 0 0266
+µ 10,7,3 0 0265 &micro;
+ps 10,11 0 0266 &para;
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 6,11 0 0272
+Om 6,11 0 0272 &ordm;
º "
-Fc 8,6 0 0273
+Fc 8,6 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 7,8,3 0 0277
+r? 7,8,3 0 0277 &iquest;
¿ "
-`A 11,15 0 0300
+`A 11,15 0 0300 &Agrave;
À "
-'A 11,15 0 0301
+'A 11,15 0 0301 &Aacute;
Á "
-^A 11,15 0 0302
+^A 11,15 0 0302 &Acirc;
 "
-~A 11,14 0 0303
+~A 11,14 0 0303 &Atilde;
à "
-:A 11,14 0 0304
+:A 11,14 0 0304 &Auml;
Ä "
-oA 11,15 0 0305
+oA 11,15 0 0305 &Aring;
Å "
-AE 15,11 0 0306
+AE 15,11 0 0306 &AElig;
Æ "
-,C 11,11,3 0 0307
+,C 11,11,3 0 0307 &Ccedil;
Ç "
-`E 10,15 0 0310
+`E 10,15 0 0310 &Egrave;
È "
-'E 10,15 0 0311
+'E 10,15 0 0311 &Eacute;
É "
-^E 10,15 0 0312
+^E 10,15 0 0312 &Ecirc;
Ê "
-:E 10,14 0 0313
+:E 10,14 0 0313 &Euml;
Ë "
-`I 7,15 0 0314
+`I 7,15 0 0314 &Igrave;
Ì "
-'I 7,15 0 0315
+'I 7,15 0 0315 &Iacute;
Í "
-^I 7,15 0 0316
+^I 7,15 0 0316 &Icirc;
Î "
-:I 7,14 0 0317
+:I 7,14 0 0317 &Iuml;
Ï "
--D 12,11 0 0320
+-D 12,11 0 0320 &ETH;
Ð "
-~N 12,14 0 0321
+~N 12,14 0 0321 &Ntilde;
Ñ "
-`O 12,15 0 0322
+`O 12,15 0 0322 &Ograve;
Ò "
-'O 12,15 0 0323
+'O 12,15 0 0323 &Oacute;
Ó "
-^O 12,15 0 0324
+^O 12,15 0 0324 &Ocirc;
Ô "
-~O 12,14 0 0325
+~O 12,14 0 0325 &Otilde;
Õ "
-:O 12,14 0 0326
+:O 12,14 0 0326 &Ouml;
Ö "
-mu 8,8 0 0327
+mu 8,8 0 0327 &times;
× "
-/O 12,11 0 0330
+/O 12,11 0 0330 &Oslash;
Ø "
-`U 12,15 0 0331
+`U 12,15 0 0331 &Ugrave;
Ù "
-'U 12,15 0 0332
+'U 12,15 0 0332 &Uacute;
Ú "
-^U 12,15 0 0333
+^U 12,15 0 0333 &Ucirc;
Û "
-:U 12,14 0 0334
+:U 12,14 0 0334 &Uuml;
Ü "
-'Y 11,14 0 0335
+'Y 11,14 0 0335 &Yacute;
Ý "
-TP 10,11 0 0336
+TP 10,11 0 0336 &THORN;
Þ "
-ss 9,11 0 0337
+ss 9,11 0 0337 &szlig;
ß "
-`a 9,11 0 0340
+`a 9,11 0 0340 &agrave;
à "
-'a 9,11 0 0341
+'a 9,11 0 0341 &aacute;
á "
-^a 9,11 0 0342
+^a 9,11 0 0342 &acirc;
â "
-~a 9,10 0 0343
+~a 9,10 0 0343 &atilde;
ã "
-:a 9,10 0 0344
+:a 9,10 0 0344 &auml;
ä "
-oa 9,11 0 0345
+oa 9,11 0 0345 &aring;
å "
-ae 14,7 0 0346
+ae 14,7 0 0346 &aelig;
æ "
-,c 8,7,3 0 0347
+,c 8,7,3 0 0347 &ccedil;
ç "
-`e 9,11 0 0350
+`e 9,11 0 0350 &egrave;
è "
-'e 9,11 0 0351
+'e 9,11 0 0351 &eacute;
é "
-^e 9,11 0 0352
+^e 9,11 0 0352 &ecirc;
ê "
-:e 9,10 0 0353
+:e 9,10 0 0353 &euml;
ë "
-`i 5,11 0 0354
+`i 5,11 0 0354 &igrave;
ì "
-'i 5,11 0 0355
+'i 5,11 0 0355 &iacute;
í "
-^i 5,11 0 0356
+^i 5,11 0 0356 &icirc;
î "
-:i 5,10 0 0357
+:i 5,10 0 0357 &iuml;
ï "
-Sd 9,11 0 0360
+Sd 9,11 0 0360 &eth;
ð "
-~n 10,10 0 0361
+~n 10,10 0 0361 &ntilde;
ñ "
-`o 9,11 0 0362
+`o 9,11 0 0362 &ograve;
ò "
-'o 9,11 0 0363
+'o 9,11 0 0363 &oacute;
ó "
-^o 9,11 0 0364
+^o 9,11 0 0364 &ocirc;
ô "
-~o 9,10 0 0365
+~o 9,10 0 0365 &otilde;
õ "
-:o 9,10 0 0366
+:o 9,10 0 0366 &ouml;
ö "
-di 8,8 0 0367
+di 8,8 0 0367 &divide;
÷ "
-/o 9,8,1 0 0370
+/o 9,8,1 0 0370 &oslash;
ø "
-`u 10,11 0 0371
+`u 10,11 0 0371 &ugrave;
ù "
-'u 10,11 0 0372
+'u 10,11 0 0372 &uacute;
ú "
-^u 10,11 0 0373
+^u 10,11 0 0373 &ucirc;
û "
-:u 10,10 0 0374
+:u 10,10 0 0374 &uuml;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 10,11,3 0 0376
+Tp 10,11,3 0 0376 &thorn;
þ "
-:y 7,10,3 0 0377
+:y 7,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/NBI b/contrib/groff/devhtml/NBI
index 58d9522ebde8..18379913115f 100644
--- a/contrib/groff/devhtml/NBI
+++ b/contrib/groff/devhtml/NBI
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 5,11 0 041
-" 6,11 0 042
+" 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
+& 13,11 0 046 &amp;
' 4,11 0 047
+cq "
( 5,11,2 0 050
) 6,11,2 0 051
* 7,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 4,7 0 072
; 5,7,3 0 073
-< 9,9 0 074
+< 9,9 0 074 &lt;
= 9,7 0 075
eq "
-> 9,9 0 076
+> 9,9 0 076 &gt;
? 7,11 0 077
@ 13,11 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 5,8,3 0 0241
+r! 5,8,3 0 0241 &iexcl;
¡ "
-ct 8,8,1 0 0242
+ct 8,8,1 0 0242 &cent;
¢ "
-Po 10,11 0 0243
+Po 10,11 0 0243 &pound;
£ "
-Cs 8,9 0 0244
+Cs 8,9 0 0244 &curren;
¤ "
-Ye 10,11 0 0245
+Ye 10,11 0 0245 &yen;
¥ "
-bb 8,11 0 0246
+bb 8,11 0 0246 &brvbar;
¦ "
-sc 9,11,2 0 0247
+sc 9,11,2 0 0247 &sect;
§ "
-ad 6,10 0 0250
+ad 6,10 0 0250 &uml;
¨ "
-co 12,11 0 0251
+co 12,11 0 0251 &copy;
© "
-Of 8,11 0 0252
+Of 8,11 0 0252 &ordf;
ª "
-Fo 10,7 0 0253
+Fo 10,7 0 0253 &laquo;
« "
-no 9,7 0 0254
+no 9,7 0 0254 &not;
¬ "
-- 5,5 0 055
-hy "
+- 5,5 0 055 &shy;
+hy " &shy;
­ "
-rg 12,11 0 0256
+rg 12,11 0 0256 &reg;
® "
-a- 6,9 0 0257
+a- 6,9 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 8,8 0 0261
++- 8,8 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 10,7,3 0 0265
-ps 9,11 0 0266
+µ 10,7,3 0 0265 &micro;
+ps 9,11 0 0266 &para;
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 8,11 0 0272
+Om 8,11 0 0272 &ordm;
º "
-Fc 10,7 0 0273
+Fc 10,7 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 7,8,3 0 0277
+r? 7,8,3 0 0277 &iquest;
¿ "
-`A 11,15 0 0300
+`A 11,15 0 0300 &Agrave;
À "
-'A 11,15 0 0301
+'A 11,15 0 0301 &Aacute;
Á "
-^A 11,15 0 0302
+^A 11,15 0 0302 &Acirc;
 "
-~A 11,14 0 0303
+~A 11,14 0 0303 &Atilde;
à "
-:A 11,14 0 0304
+:A 11,14 0 0304 &Auml;
Ä "
-oA 11,15 0 0305
+oA 11,15 0 0305 &Aring;
Å "
-AE 14,11 0 0306
+AE 14,11 0 0306 &AElig;
Æ "
-,C 11,11,3 0 0307
+,C 11,11,3 0 0307 &Ccedil;
Ç "
-`E 10,15 0 0310
+`E 10,15 0 0310 &Egrave;
È "
-'E 10,15 0 0311
+'E 10,15 0 0311 &Eacute;
É "
-^E 10,15 0 0312
+^E 10,15 0 0312 &Ecirc;
Ê "
-:E 10,14 0 0313
+:E 10,14 0 0313 &Euml;
Ë "
-`I 6,15 0 0314
+`I 6,15 0 0314 &Igrave;
Ì "
-'I 6,15 0 0315
+'I 6,15 0 0315 &Iacute;
Í "
-^I 6,15 0 0316
+^I 6,15 0 0316 &Icirc;
Î "
-:I 6,14 0 0317
+:I 6,14 0 0317 &Iuml;
Ï "
--D 12,11 0 0320
+-D 12,11 0 0320 &ETH;
Ð "
-~N 13,14 0 0321
+~N 13,14 0 0321 &Ntilde;
Ñ "
-`O 12,15 0 0322
+`O 12,15 0 0322 &Ograve;
Ò "
-'O 12,15 0 0323
+'O 12,15 0 0323 &Oacute;
Ó "
-^O 12,15 0 0324
+^O 12,15 0 0324 &Ocirc;
Ô "
-~O 12,14 0 0325
+~O 12,14 0 0325 &Otilde;
Õ "
-:O 12,14 0 0326
+:O 12,14 0 0326 &Ouml;
Ö "
-mu 8,8 0 0327
+mu 8,8 0 0327 &times;
× "
-/O 12,11 0 0330
+/O 12,11 0 0330 &Oslash;
Ø "
-`U 12,15 0 0331
+`U 12,15 0 0331 &Ugrave;
Ù "
-'U 12,15 0 0332
+'U 12,15 0 0332 &Uacute;
Ú "
-^U 12,15 0 0333
+^U 12,15 0 0333 &Ucirc;
Û "
-:U 12,14 0 0334
+:U 12,14 0 0334 &Uuml;
Ü "
-'Y 9,15 0 0335
+'Y 9,15 0 0335 &Yacute;
Ý "
-TP 11,11 0 0336
+TP 11,11 0 0336 &THORN;
Þ "
-ss 10,11,3 0 0337
+ss 10,11,3 0 0337 &szlig;
ß "
-`a 10,11 0 0340
+`a 10,11 0 0340 &agrave;
à "
-'a 10,11 0 0341
+'a 10,11 0 0341 &aacute;
á "
-^a 10,11 0 0342
+^a 10,11 0 0342 &acirc;
â "
-~a 10,10 0 0343
+~a 10,10 0 0343 &atilde;
ã "
-:a 10,10 0 0344
+:a 10,10 0 0344 &auml;
ä "
-oa 10,11 0 0345
+oa 10,11 0 0345 &aring;
å "
-ae 13,7 0 0346
+ae 13,7 0 0346 &aelig;
æ "
-,c 8,7,3 0 0347
+,c 8,7,3 0 0347 &ccedil;
ç "
-`e 8,11 0 0350
+`e 8,11 0 0350 &egrave;
è "
-'e 8,11 0 0351
+'e 8,11 0 0351 &eacute;
é "
-^e 8,11 0 0352
+^e 8,11 0 0352 &ecirc;
ê "
-:e 8,10 0 0353
+:e 8,10 0 0353 &euml;
ë "
-`i 5,11 0 0354
+`i 5,11 0 0354 &igrave;
ì "
-'i 5,11 0 0355
+'i 5,11 0 0355 &iacute;
í "
-^i 5,11 0 0356
+^i 5,11 0 0356 &icirc;
î "
-:i 5,10 0 0357
+:i 5,10 0 0357 &iuml;
ï "
-Sd 8,11 0 0360
+Sd 8,11 0 0360 &eth;
ð "
-~n 10,10 0 0361
+~n 10,10 0 0361 &ntilde;
ñ "
-`o 8,11 0 0362
+`o 8,11 0 0362 &ograve;
ò "
-'o 8,11 0 0363
+'o 8,11 0 0363 &oacute;
ó "
-^o 8,11 0 0364
+^o 8,11 0 0364 &ocirc;
ô "
-~o 8,10 0 0365
+~o 8,10 0 0365 &otilde;
õ "
-:o 8,10 0 0366
+:o 8,10 0 0366 &ouml;
ö "
-di 8,8 0 0367
+di 8,8 0 0367 &divide;
÷ "
-/o 8,7 0 0370
+/o 8,7 0 0370 &oslash;
ø "
-`u 10,11 0 0371
+`u 10,11 0 0371 &ugrave;
ù "
-'u 10,11 0 0372
+'u 10,11 0 0372 &uacute;
ú "
-^u 10,11 0 0373
+^u 10,11 0 0373 &ucirc;
û "
-:u 10,10 0 0374
+:u 10,10 0 0374 &uuml;
ü "
-'y 9,11,3 0 0375
+'y 9,11,3 0 0375 &yacute;
ý "
-Tp 8,11,3 0 0376
+Tp 8,11,3 0 0376 &thorn;
þ "
-:y 9,10,3 0 0377
+:y 9,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/NI b/contrib/groff/devhtml/NI
index b76ed0217895..24e824e0b2ea 100644
--- a/contrib/groff/devhtml/NI
+++ b/contrib/groff/devhtml/NI
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 5,11 0 041
-" 6,11 0 042
+" 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
+& 11,11 0 046 &amp;
' 4,11 0 047
+cq "
( 5,11,2 0 050
) 5,11,2 0 051
* 6,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 4,7 0 072
; 4,7,2 0 073
-< 9,8 0 074
+< 9,8 0 074 &lt;
= 8,6 0 075
eq "
-> 9,8 0 076
+> 9,8 0 076 &gt;
? 6,11 0 077
@ 12,11 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 4,8,3 0 0241
+r! 4,8,3 0 0241 &iexcl;
¡ "
-ct 8,9,2 0 0242
+ct 8,9,2 0 0242 &cent;
¢ "
-Po 9,11 0 0243
+Po 9,11 0 0243 &pound;
£ "
-Cs 8,9 0 0244
+Cs 8,9 0 0244 &curren;
¤ "
-Ye 9,11 0 0245
+Ye 9,11 0 0245 &yen;
¥ "
-bb 8,11 0 0246
+bb 8,11 0 0246 &brvbar;
¦ "
-sc 7,11,2 0 0247
+sc 7,11,2 0 0247 &sect;
§ "
-ad 7,10 0 0250
+ad 7,10 0 0250 &uml;
¨ "
-co 13,11 0 0251
+co 13,11 0 0251 &copy;
© "
-Of 6,11 0 0252
+Of 6,11 0 0252 &ordf;
ª "
-Fo 8,7 0 0253
+Fo 8,7 0 0253 &laquo;
« "
-no 8,6 0 0254
+no 8,6 0 0254 &not;
¬ "
-- 5,5 0 055
-hy "
+- 5,5 0 055 &shy;
+hy " &shy;
­ "
-rg 13,11 0 0256
+rg 13,11 0 0256 &reg;
® "
-a- 6,9 0 0257
+a- 6,9 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 8,8 0 0261
++- 8,8 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 4,11 0 0264
+aa 4,11 0 0264 &acute;
´ "
-µ 9,7,3 0 0265
-ps 9,11 0 0266
+µ 9,7,3 0 0265 &micro;
+ps 9,11 0 0266 &para;
¶ "
-md 5,6 0 0267
+pc 5,6 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 6,11 0 0272
+Om 6,11 0 0272 &ordm;
º "
-Fc 8,7 0 0273
+Fc 8,7 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 6,8,3 0 0277
+r? 6,8,3 0 0277 &iquest;
¿ "
-`A 11,14 0 0300
+`A 11,14 0 0300 &Agrave;
À "
-'A 11,14 0 0301
+'A 11,14 0 0301 &Aacute;
Á "
-^A 11,14 0 0302
+^A 11,14 0 0302 &Acirc;
 "
-~A 11,14 0 0303
+~A 11,14 0 0303 &Atilde;
à "
-:A 11,14 0 0304
+:A 11,14 0 0304 &Auml;
Ä "
-oA 11,14 0 0305
+oA 11,14 0 0305 &Aring;
Å "
-AE 14,11 0 0306
+AE 14,11 0 0306 &AElig;
Æ "
-,C 10,11,3 0 0307
+,C 10,11,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,14 0 0313
+:E 9,14 0 0313 &Euml;
Ë "
-`I 7,14 0 0314
+`I 7,14 0 0314 &Igrave;
Ì "
-'I 7,14 0 0315
+'I 7,14 0 0315 &Iacute;
Í "
-^I 7,14 0 0316
+^I 7,14 0 0316 &Icirc;
Î "
-:I 7,14 0 0317
+:I 7,14 0 0317 &Iuml;
Ï "
--D 11,11 0 0320
+-D 11,11 0 0320 &ETH;
Ð "
-~N 12,14 0 0321
+~N 12,14 0 0321 &Ntilde;
Ñ "
-`O 10,14 0 0322
+`O 10,14 0 0322 &Ograve;
Ò "
-'O 10,14 0 0323
+'O 10,14 0 0323 &Oacute;
Ó "
-^O 10,14 0 0324
+^O 10,14 0 0324 &Ocirc;
Ô "
-~O 10,14 0 0325
+~O 10,14 0 0325 &Otilde;
Õ "
-:O 10,14 0 0326
+:O 10,14 0 0326 &Ouml;
Ö "
-mu 8,8 0 0327
+mu 8,8 0 0327 &times;
× "
-/O 10,11 0 0330
+/O 10,11 0 0330 &Oslash;
Ø "
-`U 12,14 0 0331
+`U 12,14 0 0331 &Ugrave;
Ù "
-'U 12,14 0 0332
+'U 12,14 0 0332 &Uacute;
Ú "
-^U 12,14 0 0333
+^U 12,14 0 0333 &Ucirc;
Û "
-:U 12,14 0 0334
+:U 12,14 0 0334 &Uuml;
Ü "
-'Y 9,14 0 0335
+'Y 9,14 0 0335 &Yacute;
Ý "
-TP 10,11 0 0336
+TP 10,11 0 0336 &THORN;
Þ "
-ss 8,11,3 0 0337
+ss 8,11,3 0 0337 &szlig;
ß "
-`a 9,11 0 0340
+`a 9,11 0 0340 &agrave;
à "
-'a 9,11 0 0341
+'a 9,11 0 0341 &aacute;
á "
-^a 9,11 0 0342
+^a 9,11 0 0342 &acirc;
â "
-~a 9,10 0 0343
+~a 9,10 0 0343 &atilde;
ã "
-:a 9,10 0 0344
+:a 9,10 0 0344 &auml;
ä "
-oa 9,11 0 0345
+oa 9,11 0 0345 &aring;
å "
-ae 10,7 0 0346
+ae 10,7 0 0346 &aelig;
æ "
-,c 6,7,3 0 0347
+,c 6,7,3 0 0347 &ccedil;
ç "
-`e 6,11 0 0350
+`e 6,11 0 0350 &egrave;
è "
-'e 6,11 0 0351
+'e 6,11 0 0351 &eacute;
é "
-^e 6,11 0 0352
+^e 6,11 0 0352 &ecirc;
ê "
-:e 6,10 0 0353
+:e 6,10 0 0353 &euml;
ë "
-`i 4,11 0 0354
+`i 4,11 0 0354 &igrave;
ì "
-'i 4,11 0 0355
+'i 4,11 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,10 0 0357
+:i 4,10 0 0357 &iuml;
ï "
-Sd 7,11 0 0360
+Sd 7,11 0 0360 &eth;
ð "
-~n 9,10 0 0361
+~n 9,10 0 0361 &ntilde;
ñ "
-`o 7,11 0 0362
+`o 7,11 0 0362 &ograve;
ò "
-'o 7,11 0 0363
+'o 7,11 0 0363 &oacute;
ó "
-^o 7,11 0 0364
+^o 7,11 0 0364 &ocirc;
ô "
-~o 7,10 0 0365
+~o 7,10 0 0365 &otilde;
õ "
-:o 7,10 0 0366
+:o 7,10 0 0366 &ouml;
ö "
-di 8,8 0 0367
+di 8,8 0 0367 &divide;
÷ "
-/o 7,8,1 0 0370
+/o 7,8,1 0 0370 &oslash;
ø "
-`u 9,11 0 0371
+`u 9,11 0 0371 &ugrave;
ù "
-'u 9,11 0 0372
+'u 9,11 0 0372 &uacute;
ú "
-^u 9,11 0 0373
+^u 9,11 0 0373 &ucirc;
û "
-:u 9,10 0 0374
+:u 9,10 0 0374 &uuml;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 7,11,3 0 0376
+Tp 7,11,3 0 0376 &thorn;
þ "
-:y 7,10,3 0 0377
+:y 7,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/NR b/contrib/groff/devhtml/NR
index dd756b794bf6..92204a381e65 100644
--- a/contrib/groff/devhtml/NR
+++ b/contrib/groff/devhtml/NR
@@ -3,14 +3,16 @@ spacewidth 4
charset
--- 4,1 0 040
! 3,11 0 041
-" 5,11 0 042
+" 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
+& 13,11 0 046 &amp;
' 4,11 0 047
+cq "
( 5,11,2 0 050
) 6,11,2 0 051
* 7,11 0 052
@@ -32,10 +34,10 @@ sl "
9 8,11 0 071
: 4,7 0 072
; 4,7,2 0 073
-< 10,7 0 074
+< 10,7 0 074 &lt;
= 9,6 0 075
eq "
-> 10,7 0 076
+> 10,7 0 076 &gt;
? 6,11 0 077
@ 13,11 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 4,8,3 0 0241
+r! 4,8,3 0 0241 &iexcl;
¡ "
-ct 8,9,2 0 0242
+ct 8,9,2 0 0242 &cent;
¢ "
-Po 8,11 0 0243
+Po 8,11 0 0243 &pound;
£ "
-Cs 8,9 0 0244
+Cs 8,9 0 0244 &curren;
¤ "
-Ye 8,11 0 0245
+Ye 8,11 0 0245 &yen;
¥ "
-bb 9,11 0 0246
+bb 9,11 0 0246 &brvbar;
¦ "
-sc 7,11,2 0 0247
+sc 7,11,2 0 0247 &sect;
§ "
-ad 6,10 0 0250
+ad 6,10 0 0250 &uml;
¨ "
-co 14,11 0 0251
+co 14,11 0 0251 &copy;
© "
-Of 6,11 0 0252
+Of 6,11 0 0252 &ordf;
ª "
-Fo 7,6 0 0253
+Fo 7,6 0 0253 &laquo;
« "
-no 9,5 0 0254
+no 9,5 0 0254 &not;
¬ "
-- 5,4 0 055
-hy "
+- 5,4 0 055 &shy;
+hy " &shy;
­ "
-rg 14,11 0 0256
+rg 14,11 0 0256 &reg;
® "
-a- 5,9 0 0257
+a- 5,9 0 0257 &macr;
¯ "
-de 6,11 0 0260
+de 6,11 0 0260 &deg;
° "
-+- 9,7 0 0261
++- 9,7 0 0261 &plusmn;
± "
-S2 5,11 0 0262
+S2 5,11 0 0262 &sup2;
² "
-S3 5,11 0 0263
+S3 5,11 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 9,7,3 0 0265
-ps 9,11,2 0 0266
+µ 9,7,3 0 0265 &micro;
+ps 9,11,2 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 5,1,3 0 0270
+ac 5,1,3 0 0270 &cedil;
¸ "
-S1 5,11 0 0271
+S1 5,11 0 0271 &sup1;
¹ "
-Om 5,11 0 0272
+Om 5,11 0 0272 &ordm;
º "
-Fc 7,6 0 0273
+Fc 7,6 0 0273 &raquo;
» "
-14 12,11 0 0274
+14 12,11 0 0274 &frac14;
¼ "
-12 12,11 0 0275
+12 12,11 0 0275 &frac12;
½ "
-34 12,11 0 0276
+34 12,11 0 0276 &frac34;
¾ "
-r? 6,8,3 0 0277
+r? 6,8,3 0 0277 &iquest;
¿ "
-`A 10,14 0 0300
+`A 10,14 0 0300 &Agrave;
À "
-'A 10,14 0 0301
+'A 10,14 0 0301 &Aacute;
Á "
-^A 10,14 0 0302
+^A 10,14 0 0302 &Acirc;
 "
-~A 10,14 0 0303
+~A 10,14 0 0303 &Atilde;
à "
-:A 10,13 0 0304
+:A 10,13 0 0304 &Auml;
Ä "
-oA 10,14 0 0305
+oA 10,14 0 0305 &Aring;
Å "
-AE 15,11 0 0306
+AE 15,11 0 0306 &AElig;
Æ "
-,C 11,11,3 0 0307
+,C 11,11,3 0 0307 &Ccedil;
Ç "
-`E 10,14 0 0310
+`E 10,14 0 0310 &Egrave;
È "
-'E 10,14 0 0311
+'E 10,14 0 0311 &Eacute;
É "
-^E 10,14 0 0312
+^E 10,14 0 0312 &Ecirc;
Ê "
-:E 10,14 0 0313
+:E 10,14 0 0313 &Euml;
Ë "
-`I 6,14 0 0314
+`I 6,14 0 0314 &Igrave;
Ì "
-'I 6,14 0 0315
+'I 6,14 0 0315 &Iacute;
Í "
-^I 6,14 0 0316
+^I 6,14 0 0316 &Icirc;
Î "
-:I 6,14 0 0317
+:I 6,14 0 0317 &Iuml;
Ï "
--D 11,11 0 0320
+-D 11,11 0 0320 &ETH;
Ð "
-~N 13,14 0 0321
+~N 13,14 0 0321 &Ntilde;
Ñ "
-`O 11,14 0 0322
+`O 11,14 0 0322 &Ograve;
Ò "
-'O 11,14 0 0323
+'O 11,14 0 0323 &Oacute;
Ó "
-^O 11,14 0 0324
+^O 11,14 0 0324 &Ocirc;
Ô "
-~O 11,14 0 0325
+~O 11,14 0 0325 &Otilde;
Õ "
-:O 11,14 0 0326
+:O 11,14 0 0326 &Ouml;
Ö "
-mu 9,7 0 0327
+mu 9,7 0 0327 &times;
× "
-/O 11,11 0 0330
+/O 11,11 0 0330 &Oslash;
Ø "
-`U 13,14 0 0331
+`U 13,14 0 0331 &Ugrave;
Ù "
-'U 13,14 0 0332
+'U 13,14 0 0332 &Uacute;
Ú "
-^U 13,14 0 0333
+^U 13,14 0 0333 &Ucirc;
Û "
-:U 13,14 0 0334
+:U 13,14 0 0334 &Uuml;
Ü "
-'Y 10,14 0 0335
+'Y 10,14 0 0335 &Yacute;
Ý "
-TP 10,11 0 0336
+TP 10,11 0 0336 &THORN;
Þ "
-ss 8,11 0 0337
+ss 8,11 0 0337 &szlig;
ß "
-`a 8,11 0 0340
+`a 8,11 0 0340 &agrave;
à "
-'a 8,11 0 0341
+'a 8,11 0 0341 &aacute;
á "
-^a 8,11 0 0342
+^a 8,11 0 0342 &acirc;
â "
-~a 8,10 0 0343
+~a 8,10 0 0343 &atilde;
ã "
-:a 8,10 0 0344
+:a 8,10 0 0344 &auml;
ä "
-oa 8,11 0 0345
+oa 8,11 0 0345 &aring;
å "
-ae 12,7 0 0346
+ae 12,7 0 0346 &aelig;
æ "
-,c 7,7,3 0 0347
+,c 7,7,3 0 0347 &ccedil;
ç "
-`e 7,11 0 0350
+`e 7,11 0 0350 &egrave;
è "
-'e 7,11 0 0351
+'e 7,11 0 0351 &eacute;
é "
-^e 7,11 0 0352
+^e 7,11 0 0352 &ecirc;
ê "
-:e 7,10 0 0353
+:e 7,10 0 0353 &euml;
ë "
-`i 4,11 0 0354
+`i 4,11 0 0354 &igrave;
ì "
-'i 4,11 0 0355
+'i 4,11 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,10 0 0357
+:i 4,10 0 0357 &iuml;
ï "
-Sd 7,11 0 0360
+Sd 7,11 0 0360 &eth;
ð "
-~n 9,10 0 0361
+~n 9,10 0 0361 &ntilde;
ñ "
-`o 7,11 0 0362
+`o 7,11 0 0362 &ograve;
ò "
-'o 7,11 0 0363
+'o 7,11 0 0363 &oacute;
ó "
-^o 7,11 0 0364
+^o 7,11 0 0364 &ocirc;
ô "
-~o 7,10 0 0365
+~o 7,10 0 0365 &otilde;
õ "
-:o 7,10 0 0366
+:o 7,10 0 0366 &ouml;
ö "
-di 9,7 0 0367
+di 9,7 0 0367 &divide;
÷ "
-/o 7,8,1 0 0370
+/o 7,8,1 0 0370 &oslash;
ø "
-`u 9,11 0 0371
+`u 9,11 0 0371 &ugrave;
ù "
-'u 9,11 0 0372
+'u 9,11 0 0372 &uacute;
ú "
-^u 9,11 0 0373
+^u 9,11 0 0373 &ucirc;
û "
-:u 9,10 0 0374
+:u 9,10 0 0374 &uuml;
ü "
-'y 8,11,3 0 0375
+'y 8,11,3 0 0375 &yacute;
ý "
-Tp 8,11,3 0 0376
+Tp 8,11,3 0 0376 &thorn;
þ "
-:y 8,10,3 0 0377
+:y 8,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/TB b/contrib/groff/devhtml/TB
index fbc4c8b20e72..1ca1be4f0246 100644
--- a/contrib/groff/devhtml/TB
+++ b/contrib/groff/devhtml/TB
@@ -3,14 +3,16 @@ spacewidth 3
charset
--- 3,1 0 040
! 4,10 0 041
-" 7,10 0 042
+" 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
+& 12,10 0 046 &amp;
' 4,10 0 047
+cq "
( 5,10,3 0 050
) 5,10,3 0 051
* 7,10 0 052
@@ -32,10 +34,10 @@ sl "
9 7,10 0 071
: 4,7 0 072
; 4,7,2 0 073
-< 8,7 0 074
+< 8,7 0 074 &lt;
= 8,5 0 075
eq "
-> 8,7 0 076
+> 8,7 0 076 &gt;
? 7,10 0 077
@ 14,10,2 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 4,7,3 0 0241
+r! 4,7,3 0 0241 &iexcl;
¡ "
-ct 7,9,2 0 0242
+ct 7,9,2 0 0242 &cent;
¢ "
-Po 8,10 0 0243
+Po 8,10 0 0243 &pound;
£ "
-Cs 8,8 0 0244
+Cs 8,8 0 0244 &curren;
¤ "
-Ye 8,10 0 0245
+Ye 8,10 0 0245 &yen;
¥ "
-bb 3,10,2 0 0246
+bb 3,10,2 0 0246 &brvbar;
¦ "
-sc 7,10,2 0 0247
+sc 7,10,2 0 0247 &sect;
§ "
-ad 5,10 0 0250
+ad 5,10 0 0250 &uml;
¨ "
-co 12,10 0 0251
+co 12,10 0 0251 &copy;
© "
-Of 5,10 0 0252
+Of 5,10 0 0252 &ordf;
ª "
-Fo 9,6 0 0253
+Fo 9,6 0 0253 &laquo;
« "
-no 9,5 0 0254
+no 9,5 0 0254 &not;
¬ "
-- 4,4 0 055
-hy "
+- 4,4 0 055 &shy;
+hy " &shy;
­ "
-rg 12,10 0 0256
+rg 12,10 0 0256 &reg;
® "
-a- 5,9 0 0257
+a- 5,9 0 0257 &macr;
¯ "
-de 6,10 0 0260
+de 6,10 0 0260 &deg;
° "
-+- 8,9 0 0261
++- 8,9 0 0261 &plusmn;
± "
-S2 4,10 0 0262
+S2 4,10 0 0262 &sup2;
² "
-S3 4,10 0 0263
+S3 4,10 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 7,7,3 0 0265
-ps 8,10,3 0 0266
+µ 7,7,3 0 0265 &micro;
+ps 8,10,3 0 0266 &para;
¶ "
-md 4,6 0 0267
+pc 4,6 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 4,10 0 0271
+S1 4,10 0 0271 &sup1;
¹ "
-Om 5,10 0 0272
+Om 5,10 0 0272 &ordm;
º "
-Fc 9,6 0 0273
+Fc 9,6 0 0273 &raquo;
» "
-14 10,10 0 0274
+14 10,10 0 0274 &frac14;
¼ "
-12 10,10 0 0275
+12 10,10 0 0275 &frac12;
½ "
-34 10,10 0 0276
+34 10,10 0 0276 &frac34;
¾ "
-r? 7,7,3 0 0277
+r? 7,7,3 0 0277 &iquest;
¿ "
-`A 10,14 0 0300
+`A 10,14 0 0300 &Agrave;
À "
-'A 10,14 0 0301
+'A 10,14 0 0301 &Aacute;
Á "
-^A 10,14 0 0302
+^A 10,14 0 0302 &Acirc;
 "
-~A 10,13 0 0303
+~A 10,13 0 0303 &Atilde;
à "
-:A 10,13 0 0304
+:A 10,13 0 0304 &Auml;
Ä "
-oA 10,14 0 0305
+oA 10,14 0 0305 &Aring;
Å "
-AE 14,10 0 0306
+AE 14,10 0 0306 &AElig;
Æ "
-,C 10,10,3 0 0307
+,C 10,10,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,13 0 0313
+:E 9,13 0 0313 &Euml;
Ë "
-`I 5,14 0 0314
+`I 5,14 0 0314 &Igrave;
Ì "
-'I 5,14 0 0315
+'I 5,14 0 0315 &Iacute;
Í "
-^I 5,14 0 0316
+^I 5,14 0 0316 &Icirc;
Î "
-:I 5,13 0 0317
+:I 5,13 0 0317 &Iuml;
Ï "
--D 11,10 0 0320
+-D 11,10 0 0320 &ETH;
Ð "
-~N 10,13 0 0321
+~N 10,13 0 0321 &Ntilde;
Ñ "
-`O 11,14 0 0322
+`O 11,14 0 0322 &Ograve;
Ò "
-'O 11,14 0 0323
+'O 11,14 0 0323 &Oacute;
Ó "
-^O 11,14 0 0324
+^O 11,14 0 0324 &Ocirc;
Ô "
-~O 11,13 0 0325
+~O 11,13 0 0325 &Otilde;
Õ "
-:O 11,13 0 0326
+:O 11,13 0 0326 &Ouml;
Ö "
-mu 8,7 0 0327
+mu 8,7 0 0327 &times;
× "
-/O 11,11,1 0 0330
+/O 11,11,1 0 0330 &Oslash;
Ø "
-`U 10,14 0 0331
+`U 10,14 0 0331 &Ugrave;
Ù "
-'U 10,14 0 0332
+'U 10,14 0 0332 &Uacute;
Ú "
-^U 10,14 0 0333
+^U 10,14 0 0333 &Ucirc;
Û "
-:U 10,13 0 0334
+:U 10,13 0 0334 &Uuml;
Ü "
-'Y 10,14 0 0335
+'Y 10,14 0 0335 &Yacute;
Ý "
-TP 9,10 0 0336
+TP 9,10 0 0336 &THORN;
Þ "
-ss 8,10 0 0337
+ss 8,10 0 0337 &szlig;
ß "
-`a 7,11 0 0340
+`a 7,11 0 0340 &agrave;
à "
-'a 7,11 0 0341
+'a 7,11 0 0341 &aacute;
á "
-^a 7,11 0 0342
+^a 7,11 0 0342 &acirc;
â "
-~a 7,10 0 0343
+~a 7,10 0 0343 &atilde;
ã "
-:a 7,10 0 0344
+:a 7,10 0 0344 &auml;
ä "
-oa 7,11 0 0345
+oa 7,11 0 0345 &aring;
å "
-ae 11,7 0 0346
+ae 11,7 0 0346 &aelig;
æ "
-,c 7,7,3 0 0347
+,c 7,7,3 0 0347 &ccedil;
ç "
-`e 7,11 0 0350
+`e 7,11 0 0350 &egrave;
è "
-'e 7,11 0 0351
+'e 7,11 0 0351 &eacute;
é "
-^e 7,11 0 0352
+^e 7,11 0 0352 &ecirc;
ê "
-:e 7,10 0 0353
+:e 7,10 0 0353 &euml;
ë "
-`i 4,11 0 0354
+`i 4,11 0 0354 &igrave;
ì "
-'i 4,11 0 0355
+'i 4,11 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,10 0 0357
+:i 4,10 0 0357 &iuml;
ï "
-Sd 7,10 0 0360
+Sd 7,10 0 0360 &eth;
ð "
-~n 8,10 0 0361
+~n 8,10 0 0361 &ntilde;
ñ "
-`o 7,11 0 0362
+`o 7,11 0 0362 &ograve;
ò "
-'o 7,11 0 0363
+'o 7,11 0 0363 &oacute;
ó "
-^o 7,11 0 0364
+^o 7,11 0 0364 &ocirc;
ô "
-~o 7,10 0 0365
+~o 7,10 0 0365 &otilde;
õ "
-:o 7,10 0 0366
+:o 7,10 0 0366 &ouml;
ö "
-di 8,7 0 0367
+di 8,7 0 0367 &divide;
÷ "
-/o 7,8,1 0 0370
+/o 7,8,1 0 0370 &oslash;
ø "
-`u 7,11 0 0371
+`u 7,11 0 0371 &ugrave;
ù "
-'u 7,11 0 0372
+'u 7,11 0 0372 &uacute;
ú "
-^u 7,11 0 0373
+^u 7,11 0 0373 &ucirc;
û "
-:u 7,10 0 0374
+:u 7,10 0 0374 &uulm;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 8,10,3 0 0376
+Tp 8,10,3 0 0376 &thorn;
þ "
-:y 7,10,3 0 0377
+:y 7,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/TBI b/contrib/groff/devhtml/TBI
index 56c55cf30db3..cebeccae20c8 100644
--- a/contrib/groff/devhtml/TBI
+++ b/contrib/groff/devhtml/TBI
@@ -3,14 +3,16 @@ spacewidth 3
charset
--- 3,1 0 040
! 7,10 0 041
-" 7,10 0 042
+" 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
+& 10,10 0 046 &amp;
' 5,10 0 047
+cq "
( 6,10,3 0 050
) 6,10,3 0 051
* 7,10 0 052
@@ -32,10 +34,10 @@ sl "
9 7,10 0 071
: 5,7 0 072
; 4,7,2 0 073
-< 8,6 0 074
+< 8,6 0 074 &lt;
= 10,5 0 075
eq "
-> 8,6 0 076
+> 8,6 0 076 &gt;
? 8,10 0 077
@ 15,10,2 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 7,7,3 0 0241
+r! 7,7,3 0 0241 &iexcl;
¡ "
-ct 7,8,1 0 0242
+ct 7,8,1 0 0242 &cent;
¢ "
-Po 7,10 0 0243
+Po 7,10 0 0243 &pound;
£ "
-Cs 8,8 0 0244
+Cs 8,8 0 0244 &curren;
¤ "
-Ye 7,10 0 0245
+Ye 7,10 0 0245 &yen;
¥ "
-bb 4,10 0 0246
+bb 4,10 0 0246 &brvbar;
¦ "
-sc 8,10,3 0 0247
+sc 8,10,3 0 0247 &sect;
§ "
-ad 6,9 0 0250
+ad 6,9 0 0250 &uml;
¨ "
-co 12,10 0 0251
+co 12,10 0 0251 &copy;
© "
-Of 6,10 0 0252
+Of 6,10 0 0252 &ordf;
ª "
-Fo 8,6 0 0253
+Fo 8,6 0 0253 &laquo;
« "
-no 9,5 0 0254
+no 9,5 0 0254 &not;
¬ "
-- 5,4 0 055
-hy "
+- 5,4 0 055 &shy;
+hy " &shy;
­ "
-rg 12,10 0 0256
+rg 12,10 0 0256 &reg;
® "
-a- 6,9 0 0257
+a- 6,9 0 0257 &macr;
¯ "
-de 6,10 0 0260
+de 6,10 0 0260 &deg;
° "
-+- 9,9 0 0261
++- 9,9 0 0261 &plusmn;
± "
-S2 4,10 0 0262
+S2 4,10 0 0262 &sup2;
² "
-S3 4,10 0 0263
+S3 4,10 0 0263 &sup3;
³ "
-aa 6,10 0 0264
+aa 6,10 0 0264 &acute;
´ "
-µ 7,7,3 0 0265
-ps 8,10,3 0 0266
+µ 7,7,3 0 0265 &micro;
+ps 8,10,3 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 4,10 0 0271
+S1 4,10 0 0271 &sup1;
¹ "
-Om 6,10 0 0272
+Om 6,10 0 0272 &ordm;
º "
-Fc 8,6 0 0273
+Fc 8,6 0 0273 &raquo;
» "
-14 10,10 0 0274
+14 10,10 0 0274 &frac14;
¼ "
-12 10,10 0 0275
+12 10,10 0 0275 &frac12;
½ "
-34 10,10 0 0276
+34 10,10 0 0276 &frac34;
¾ "
-r? 8,7,3 0 0277
+r? 8,7,3 0 0277 &iquest;
¿ "
-`A 9,13 0 0300
+`A 9,13 0 0300 &Agrave;
À "
-'A 9,13 0 0301
+'A 9,13 0 0301 &Aacute;
Á "
-^A 9,13 0 0302
+^A 9,13 0 0302 &Acirc;
 "
-~A 9,13 0 0303
+~A 9,13 0 0303 &Atilde;
à "
-:A 9,13 0 0304
+:A 9,13 0 0304 &Auml;
Ä "
-oA 9,13 0 0305
+oA 9,13 0 0305 &Aring;
Å "
-AE 14,10 0 0306
+AE 14,10 0 0306 &AElig;
Æ "
-,C 9,10,3 0 0307
+,C 9,10,3 0 0307 &Ccedil;
Ç "
-`E 10,13 0 0310
+`E 10,13 0 0310 &Egrave;
È "
-'E 10,13 0 0311
+'E 10,13 0 0311 &Eacute;
É "
-^E 10,13 0 0312
+^E 10,13 0 0312 &Ecirc;
Ê "
-:E 10,13 0 0313
+:E 10,13 0 0313 &Euml;
Ë "
-`I 5,13 0 0314
+`I 5,13 0 0314 &Igrave;
Ì "
-'I 5,13 0 0315
+'I 5,13 0 0315 &Iacute;
Í "
-^I 5,13 0 0316
+^I 5,13 0 0316 &Icirc;
Î "
-:I 5,13 0 0317
+:I 5,13 0 0317 &Iuml;
Ï "
--D 10,10 0 0320
+-D 10,10 0 0320 &ETH;
Ð "
-~N 11,13 0 0321
+~N 11,13 0 0321 &Ntilde;
Ñ "
-`O 10,13 0 0322
+`O 10,13 0 0322 &Ograve;
Ò "
-'O 10,13 0 0323
+'O 10,13 0 0323 &Oacute;
Ó "
-^O 10,13 0 0324
+^O 10,13 0 0324 &Ocirc;
Ô "
-~O 10,13 0 0325
+~O 10,13 0 0325 &Otilde;
Õ "
-:O 10,13 0 0326
+:O 10,13 0 0326 &Ouml;
Ö "
-mu 9,7 0 0327
+mu 9,7 0 0327 &times;
× "
-/O 10,11,1 0 0330
+/O 10,11,1 0 0330 &Oslash;
Ø "
-`U 10,13 0 0331
+`U 10,13 0 0331 &Ugrave;
Ù "
-'U 10,13 0 0332
+'U 10,13 0 0332 &Uacute;
Ú "
-^U 10,13 0 0333
+^U 10,13 0 0333 &Ucirc;
Û "
-:U 10,13 0 0334
+:U 10,13 0 0334 &Uuml;
Ü "
-'Y 8,13 0 0335
+'Y 8,13 0 0335 &Yacute;
Ý "
-TP 9,10 0 0336
+TP 9,10 0 0336 &THORN;
Þ "
-ss 7,10,3 0 0337
+ss 7,10,3 0 0337 &szlig;
ß "
-`a 8,10 0 0340
+`a 8,10 0 0340 &agrave;
à "
-'a 8,10 0 0341
+'a 8,10 0 0341 &aacute;
á "
-^a 8,11 0 0342
+^a 8,11 0 0342 &acirc;
â "
-~a 8,10 0 0343
+~a 8,10 0 0343 &atilde;
ã "
-:a 8,10 0 0344
+:a 8,10 0 0344 &auml;
ä "
-oa 8,11 0 0345
+oa 8,11 0 0345 &aring;
å "
-ae 11,7 0 0346
+ae 11,7 0 0346 &aelig;
æ "
-,c 6,7,3 0 0347
+,c 6,7,3 0 0347 &ccedil;
ç "
-`e 7,10 0 0350
+`e 7,10 0 0350 &egrave;
è "
-'e 7,10 0 0351
+'e 7,10 0 0351 &eacute;
é "
-^e 7,11 0 0352
+^e 7,11 0 0352 &ecirc;
ê "
-:e 7,10 0 0353
+:e 7,10 0 0353 &euml;
ë "
-`i 4,10 0 0354
+`i 4,10 0 0354 &igrave;
ì "
-'i 4,10 0 0355
+'i 4,10 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,10 0 0357
+:i 4,10 0 0357 &iuml;
ï "
-Sd 7,10 0 0360
+Sd 7,10 0 0360 &eth;
ð "
-~n 8,10 0 0361
+~n 8,10 0 0361 &ntilde;
ñ "
-`o 7,10 0 0362
+`o 7,10 0 0362 &ograve;
ò "
-'o 7,10 0 0363
+'o 7,10 0 0363 &oacute;
ó "
-^o 7,11 0 0364
+^o 7,11 0 0364 &ocirc;
ô "
-~o 7,10 0 0365
+~o 7,10 0 0365 &otilde;
õ "
-:o 7,10 0 0366
+:o 7,10 0 0366 &ouml;
ö "
-di 9,7 0 0367
+di 9,7 0 0367 &divide;
÷ "
-/o 7,8,1 0 0370
+/o 7,8,1 0 0370 &oslash;
ø "
-`u 7,10 0 0371
+`u 7,10 0 0371 &ugrave;
ù "
-'u 7,10 0 0372
+'u 7,10 0 0372 &uacute;
ú "
-^u 7,11 0 0373
+^u 7,11 0 0373 &ucirc;
û "
-:u 7,10 0 0374
+:u 7,10 0 0374 &uulm;
ü "
-'y 6,10,2 0 0375
+'y 6,10,2 0 0375 &yacute;
ý "
-Tp 7,10,3 0 0376
+Tp 7,10,3 0 0376 &thorn;
þ "
-:y 6,10,2 0 0377
+:y 6,10,2 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/TI b/contrib/groff/devhtml/TI
index fddf4b74fbfe..a3f943b26499 100644
--- a/contrib/groff/devhtml/TI
+++ b/contrib/groff/devhtml/TI
@@ -3,14 +3,16 @@ spacewidth 3
charset
--- 3,1 0 040
! 5,10 0 041
-" 6,10 0 042
+" 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
+& 11,10 0 046 &amp;
' 5,10 0 047
+cq "
( 5,10,3 0 050
) 5,10,3 0 051
* 7,10 0 052
@@ -32,10 +34,10 @@ sl "
9 7,10 0 071
: 4,7 0 072
; 4,7,1 0 073
-< 10,7,1 0 074
+< 10,7,1 0 074 &lt;
= 10,5 0 075
eq "
-> 10,7,1 0 076
+> 10,7,1 0 076 &gt;
? 7,10 0 077
@ 13,10,3 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 6,7,3 0 0241
+r! 6,7,3 0 0241 &iexcl;
¡ "
-ct 7,9,2 0 0242
+ct 7,9,2 0 0242 &cent;
¢ "
-Po 7,10 0 0243
+Po 7,10 0 0243 &pound;
£ "
-Cs 7,8 0 0244
+Cs 7,8 0 0244 &curren;
¤ "
-Ye 7,10 0 0245
+Ye 7,10 0 0245 &yen;
¥ "
-bb 4,10,3 0 0246
+bb 4,10,3 0 0246 &brvbar;
¦ "
-sc 7,11,2 0 0247
+sc 7,11,2 0 0247 &sect;
§ "
-ad 5,10 0 0250
+ad 5,10 0 0250 &uml;
¨ "
-co 12,10 0 0251
+co 12,10 0 0251 &copy;
© "
-Of 5,10 0 0252
+Of 5,10 0 0252 &ordf;
ª "
-Fo 7,6 0 0253
+Fo 7,6 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 5,4 0 055
-hy "
+- 5,4 0 055 &shy;
+hy " &shy;
­ "
-rg 12,10 0 0256
+rg 12,10 0 0256 &reg;
® "
-a- 5,10 0 0257
+a- 5,10 0 0257 &macr;
¯ "
-de 6,10 0 0260
+de 6,10 0 0260 &deg;
° "
-+- 10,9 0 0261
++- 10,9 0 0261 &plusmn;
± "
-S2 4,10 0 0262
+S2 4,10 0 0262 &sup2;
² "
-S3 4,10 0 0263
+S3 4,10 0 0263 &sup3;
³ "
-aa 4,10 0 0264
+aa 4,10 0 0264 &acute;
´ "
-µ 7,7,3 0 0265
-ps 8,10,3 0 0266
+µ 7,7,3 0 0265 &micro;
+ps 8,10,3 0 0266 &para;
¶ "
-md 4,4 0 0267
+pc 4,4 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 4,10 0 0271
+S1 4,10 0 0271 &sup1;
¹ "
-Om 5,10 0 0272
+Om 5,10 0 0272 &ordm;
º "
-Fc 7,6 0 0273
+Fc 7,6 0 0273 &raquo;
» "
-14 10,10 0 0274
+14 10,10 0 0274 &frac14;
¼ "
-12 10,10 0 0275
+12 10,10 0 0275 &frac12;
½ "
-34 10,10 0 0276
+34 10,10 0 0276 &frac34;
¾ "
-r? 7,7,3 0 0277
+r? 7,7,3 0 0277 &iquest;
¿ "
-`A 9,13 0 0300
+`A 9,13 0 0300 &Agrave;
À "
-'A 9,13 0 0301
+'A 9,13 0 0301 &Aacute;
Á "
-^A 9,13 0 0302
+^A 9,13 0 0302 &Acirc;
 "
-~A 9,13 0 0303
+~A 9,13 0 0303 &Atilde;
à "
-:A 9,12 0 0304
+:A 9,12 0 0304 &Auml;
Ä "
-oA 9,13 0 0305
+oA 9,13 0 0305 &Aring;
Å "
-AE 13,10 0 0306
+AE 13,10 0 0306 &AElig;
Æ "
-,C 9,10,3 0 0307
+,C 9,10,3 0 0307 &Ccedil;
Ç "
-`E 9,13 0 0310
+`E 9,13 0 0310 &Egrave;
È "
-'E 9,13 0 0311
+'E 9,13 0 0311 &Eacute;
É "
-^E 9,13 0 0312
+^E 9,13 0 0312 &Ecirc;
Ê "
-:E 9,12 0 0313
+:E 9,12 0 0313 &Euml;
Ë "
-`I 5,13 0 0314
+`I 5,13 0 0314 &Igrave;
Ì "
-'I 5,13 0 0315
+'I 5,13 0 0315 &Iacute;
Í "
-^I 5,13 0 0316
+^I 5,13 0 0316 &Icirc;
Î "
-:I 5,12 0 0317
+:I 5,12 0 0317 &Iuml;
Ï "
--D 10,10 0 0320
+-D 10,10 0 0320 &ETH;
Ð "
-~N 11,13 0 0321
+~N 11,13 0 0321 &Ntilde;
Ñ "
-`O 10,13 0 0322
+`O 10,13 0 0322 &Ograve;
Ò "
-'O 10,13 0 0323
+'O 10,13 0 0323 &Oacute;
Ó "
-^O 10,13 0 0324
+^O 10,13 0 0324 &Ocirc;
Ô "
-~O 10,13 0 0325
+~O 10,13 0 0325 &Otilde;
Õ "
-:O 10,12 0 0326
+:O 10,12 0 0326 &Ouml;
Ö "
-mu 10,7 0 0327
+mu 10,7 0 0327 &times;
× "
-/O 10,11,1 0 0330
+/O 10,11,1 0 0330 &Oslash;
Ø "
-`U 10,13 0 0331
+`U 10,13 0 0331 &Ugrave;
Ù "
-'U 10,13 0 0332
+'U 10,13 0 0332 &Uacute;
Ú "
-^U 10,13 0 0333
+^U 10,13 0 0333 &Ucirc;
Û "
-:U 10,12 0 0334
+:U 10,12 0 0334 &Uuml;
Ü "
-'Y 8,13 0 0335
+'Y 8,13 0 0335 &Yacute;
Ý "
-TP 9,10 0 0336
+TP 9,10 0 0336 &THORN;
Þ "
-ss 7,10,3 0 0337
+ss 7,10,3 0 0337 &szlig;
ß "
-`a 7,10 0 0340
+`a 7,10 0 0340 &agrave;
à "
-'a 7,10 0 0341
+'a 7,10 0 0341 &aacute;
á "
-^a 7,11 0 0342
+^a 7,11 0 0342 &acirc;
â "
-~a 7,10 0 0343
+~a 7,10 0 0343 &atilde;
ã "
-:a 7,9 0 0344
+:a 7,9 0 0344 &auml;
ä "
-oa 7,10 0 0345
+oa 7,10 0 0345 &aring;
å "
-ae 10,7 0 0346
+ae 10,7 0 0346 &aelig;
æ "
-,c 6,7,3 0 0347
+,c 6,7,3 0 0347 &ccedil;
ç "
-`e 7,10 0 0350
+`e 7,10 0 0350 &egrave;
è "
-'e 7,10 0 0351
+'e 7,10 0 0351 &eacute;
é "
-^e 7,11 0 0352
+^e 7,11 0 0352 &ecirc;
ê "
-:e 7,9 0 0353
+:e 7,9 0 0353 &euml;
ë "
-`i 4,10 0 0354
+`i 4,10 0 0354 &igrave;
ì "
-'i 4,10 0 0355
+'i 4,10 0 0355 &iacute;
í "
-^i 4,11 0 0356
+^i 4,11 0 0356 &icirc;
î "
-:i 4,9 0 0357
+:i 4,9 0 0357 &iuml;
ï "
-Sd 7,10 0 0360
+Sd 7,10 0 0360 &eth;
ð "
-~n 7,10 0 0361
+~n 7,10 0 0361 &ntilde;
ñ "
-`o 7,10 0 0362
+`o 7,10 0 0362 &ograve;
ò "
-'o 7,10 0 0363
+'o 7,10 0 0363 &oacute;
ó "
-^o 7,11 0 0364
+^o 7,11 0 0364 &ocirc;
ô "
-~o 7,10 0 0365
+~o 7,10 0 0365 &otilde;
õ "
-:o 7,9 0 0366
+:o 7,9 0 0366 &ouml;
ö "
-di 10,7 0 0367
+di 10,7 0 0367 &divide;
÷ "
-/o 7,8,1 0 0370
+/o 7,8,1 0 0370 &oslash;
ø "
-`u 7,10 0 0371
+`u 7,10 0 0371 &ugrave;
ù "
-'u 7,10 0 0372
+'u 7,10 0 0372 &uacute;
ú "
-^u 7,11 0 0373
+^u 7,11 0 0373 &ucirc;
û "
-:u 7,9 0 0374
+:u 7,9 0 0374 &uulm;
ü "
-'y 7,10,3 0 0375
+'y 7,10,3 0 0375 &yacute;
ý "
-Tp 7,10,3 0 0376
+Tp 7,10,3 0 0376 &thorn;
þ "
-:y 7,9,3 0 0377
+:y 7,9,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devhtml/TR b/contrib/groff/devhtml/TR
index c5c5f54e6b96..fadd71f3aa65 100644
--- a/contrib/groff/devhtml/TR
+++ b/contrib/groff/devhtml/TR
@@ -3,14 +3,16 @@ spacewidth 3
charset
--- 3,1 0 040
! 5,10 0 041
-" 6,10 0 042
+" 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
+& 11,10 0 046 &amp;
' 4,10 0 047
+cq "
( 5,10,3 0 050
) 5,10,3 0 051
* 7,10 0 052
@@ -32,10 +34,10 @@ sl "
9 7,10 0 071
: 4,7 0 072
; 4,7,2 0 073
-< 8,7 0 074
+< 8,7 0 074 &lt;
= 8,5 0 075
eq "
-> 8,7 0 076
+> 8,7 0 076 &gt;
? 6,10 0 077
@ 13,10,2 0 0100
at "
@@ -114,193 +116,193 @@ rC "
a~ "
ap "
ti "
-r! 5,7,3 0 0241
+r! 5,7,3 0 0241 &iexcl;
¡ "
-ct 7,8,1 0 0242
+ct 7,8,1 0 0242 &cent;
¢ "
-Po 8,10 0 0243
+Po 8,10 0 0243 &pound;
£ "
-Cs 7,8 0 0244
+Cs 7,8 0 0244 &curren;
¤ "
-Ye 7,10 0 0245
+Ye 7,10 0 0245 &yen;
¥ "
-bb 3,10 0 0246
+bb 3,10 0 0246 &brvbar;
¦ "
-sc 7,10,3 0 0247
+sc 7,10,3 0 0247 &sect;
§ "
-ad 5,10 0 0250
+ad 5,10 0 0250 &uml;
¨ "
-co 12,10 0 0251
+co 12,10 0 0251 &copy;
© "
-Of 4,10 0 0252
+Of 4,10 0 0252 &ordf;
ª "
-Fo 7,6 0 0253
+Fo 7,6 0 0253 &laquo;
« "
-no 9,6 0 0254
+no 9,6 0 0254 &not;
¬ "
-- 4,4 0 055
-hy "
+- 4,4 0 0255 &shy;
+hy 4,4 0 0255 &shy;
­ "
-rg 12,10 0 0256
+rg 12,10 0 0256 &reg;
® "
-a- 4,9 0 0257
+a- 4,9 0 0257 &macr;
¯ "
-de 6,10 0 0260
+de 6,10 0 0260 &deg;
° "
-+- 8,7 0 0261
++- 8,7 0 0261 &plusmn;
± "
-S2 4,10 0 0262
+S2 4,10 0 0262 &sup2;
² "
-S3 4,10 0 0263
+S3 4,10 0 0263 &sup3;
³ "
-aa 5,11 0 0264
+aa 5,11 0 0264 &acute;
´ "
-µ 7,7,3 0 0265
-ps 7,10,3 0 0266
+µ 7,7,3 0 0265 &micro;
+ps 7,10,3 0 0266 &para;
¶ "
-md 4,5 0 0267
+pc 4,5 0 0267 &middot;
· "
-ac 5,0,3 0 0270
+ac 5,0,3 0 0270 &cedil;
¸ "
-S1 4,10 0 0271
+S1 4,10 0 0271 &sup1;
¹ "
-Om 5,10 0 0272
+Om 5,10 0 0272 &ordm;
º "
-Fc 7,6 0 0273
+Fc 7,6 0 0273 &raquo;
» "
-14 10,10 0 0274
+14 10,10 0 0274 &frac14;
¼ "
-12 10,10 0 0275
+12 10,10 0 0275 &frac12;
½ "
-34 10,10 0 0276
+34 10,10 0 0276 &frac34;
¾ "
-r? 6,7,3 0 0277
+r? 6,7,3 0 0277 &iquest;
¿ "
-`A 11,14 0 0300
+`A 11,14 0 0300 &Agrave;
À "
-'A 11,14 0 0301
+'A 11,14 0 0301 &Aacute;
Á "
-^A 11,14 0 0302
+^A 11,14 0 0302 &Acirc;
 "
-~A 11,14 0 0303
+~A 11,14 0 0303 &Atilde;
à "
-:A 11,13 0 0304
+:A 11,13 0 0304 &Auml;
Ä "
-oA 11,14 0 0305
+oA 11,14 0 0305 &Aring;
Å "
-AE 13,10 0 0306
+AE 13,10 0 0306 &AElig;
Æ "
-,C 10,10,3 0 0307
+,C 10,10,3 0 0307 &Ccedil;
Ç "
-`E 9,14 0 0310
+`E 9,14 0 0310 &Egrave;
È "
-'E 9,14 0 0311
+'E 9,14 0 0311 &Eacute;
É "
-^E 9,14 0 0312
+^E 9,14 0 0312 &Ecirc;
Ê "
-:E 9,13 0 0313
+:E 9,13 0 0313 &Euml;
Ë "
-`I 5,14 0 0314
+`I 5,14 0 0314 &Igrave;
Ì "
-'I 5,14 0 0315
+'I 5,14 0 0315 &Iacute;
Í "
-^I 5,14 0 0316
+^I 5,14 0 0316 &Icirc;
Î "
-:I 5,13 0 0317
+:I 5,13 0 0317 &Iuml;
Ï "
--D 10,10 0 0320
+-D 10,10 0 0320 &ETH;
Ð "
-~N 11,14 0 0321
+~N 11,14 0 0321 &Ntilde;
Ñ "
-`O 10,14 0 0322
+`O 10,14 0 0322 &Ograve;
Ò "
-'O 10,14 0 0323
+'O 10,14 0 0323 &Oacute;
Ó "
-^O 10,14 0 0324
+^O 10,14 0 0324 &Ocirc;
Ô "
-~O 10,14 0 0325
+~O 10,14 0 0325 &Otilde;
Õ "
-:O 10,13 0 0326
+:O 10,13 0 0326 &Ouml;
Ö "
-mu 8,7 0 0327
+mu 8,7 0 0327 &times;
× "
-/O 10,11,1 0 0330
+/O 10,11,1 0 0330 &Oslash;
Ø "
-`U 10,14 0 0331
+`U 10,14 0 0331 &Ugrave;
Ù "
-'U 10,14 0 0332
+'U 10,14 0 0332 &Uacute;
Ú "
-^U 10,14 0 0333
+^U 10,14 0 0333 &Ucirc;
Û "
-:U 10,13 0 0334
+:U 10,13 0 0334 &Uuml;
Ü "
-'Y 9,14 0 0335
+'Y 9,14 0 0335 &Yacute;
Ý "
-TP 8,10 0 0336
+TP 8,10 0 0336 &THORN;
Þ "
-ss 7,10 0 0337
+ss 7,10 0 0337 &szlig;
ß "
-`a 7,11 0 0340
+`a 7,11 0 0340 &agrave;
à "
-'a 7,11 0 0341
+'a 7,11 0 0341 &aacute;
á "
-^a 7,11 0 0342
+^a 7,11 0 0342 &acirc;
â "
-~a 7,11 0 0343
+~a 7,11 0 0343 &atilde;
ã "
-:a 7,10 0 0344
+:a 7,10 0 0344 &auml;
ä "
-oa 7,11 0 0345
+oa 7,11 0 0345 &aring;
å "
-ae 11,7 0 0346
+ae 11,7 0 0346 &aelig;
æ "
-,c 7,7,3 0 0347
+,c 7,7,3 0 0347 &ccedil;
ç "
-`e 7,11 0 0350
+`e 7,11 0 0350 &egrave;
è "
-'e 7,11 0 0351
+'e 7,11 0 0351 &eacute;
é "
-^e 7,11 0 0352
+^e 7,11 0 0352 &ecirc;
ê "
-:e 7,10 0 0353
+:e 7,10 0 0353 &euml;
ë "
-`i 3,11 0 0354
+`i 3,11 0 0354 &igrave;
ì "
-'i 3,11 0 0355
+'i 3,11 0 0355 &iacute;
í "
-^i 3,11 0 0356
+^i 3,11 0 0356 &icirc;
î "
-:i 3,10 0 0357
+:i 3,10 0 0357 &iuml;
ï "
-Sd 7,10 0 0360
+Sd 7,10 0 0360 &eth;
ð "
-~n 7,11 0 0361
+~n 7,11 0 0361 &ntilde;
ñ "
-`o 7,11 0 0362
+`o 7,11 0 0362 &ograve;
ò "
-'o 7,11 0 0363
+'o 7,11 0 0363 &oacute;
ó "
-^o 7,11 0 0364
+^o 7,11 0 0364 &ocirc;
ô "
-~o 7,11 0 0365
+~o 7,11 0 0365 &otilde;
õ "
-:o 7,10 0 0366
+:o 7,10 0 0366 &ouml;
ö "
-di 8,7 0 0367
+di 8,7 0 0367 &divide;
÷ "
-/o 7,8,1 0 0370
+/o 7,8,1 0 0370 &oslash;
ø "
-`u 7,11 0 0371
+`u 7,11 0 0371 &ugrave;
ù "
-'u 7,11 0 0372
+'u 7,11 0 0372 &uacute;
ú "
-^u 7,11 0 0373
+^u 7,11 0 0373 &ucirc;
û "
-:u 7,10 0 0374
+:u 7,10 0 0374 &uuml;
ü "
-'y 7,11,3 0 0375
+'y 7,11,3 0 0375 &yacute;
ý "
-Tp 7,10,3 0 0376
+Tp 7,10,3 0 0376 &thorn;
þ "
-:y 7,10,3 0 0377
+:y 7,10,3 0 0377 &yuml;
ÿ "
diff --git a/contrib/groff/devlatin1/R.proto b/contrib/groff/devlatin1/R.proto
index 29a88754ba3e..a527a9fbc60a 100644
--- a/contrib/groff/devlatin1/R.proto
+++ b/contrib/groff/devlatin1/R.proto
@@ -4,6 +4,7 @@ spacewidth 24
charset
! 24 0 0041
" 24 0 0042
+dq "
lq "
rq "
# 24 0 0043
@@ -15,6 +16,7 @@ Do "
' 24 0 0047
fm "
aq "
+cq "
( 24 0 0050
) 24 0 0051
* 24 0 0052
@@ -185,7 +187,8 @@ Fo 24 0 0253
char171 "
no 24 0 0254
char172 "
-char173 24 0 0255
+shc 24 0 0255
+char173 "
rg 24 0 0256
char174 "
a- 24 0 0257
@@ -205,7 +208,8 @@ char180 "
char181 "
ps 24 0 0266
char182 "
-md 24 0 0267
+pc 24 0 0267
+md "
char183 "
ac 24 0 0270
char184 "
diff --git a/contrib/groff/devlbp/CB b/contrib/groff/devlbp/CB
new file mode 100644
index 000000000000..5c34658f9b48
--- /dev/null
+++ b/contrib/groff/devlbp/CB
@@ -0,0 +1,272 @@
+
+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
new file mode 100644
index 000000000000..84b0ac41dab2
--- /dev/null
+++ b/contrib/groff/devlbp/CI
@@ -0,0 +1,272 @@
+
+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
new file mode 100644
index 000000000000..ef4a56b2f098
--- /dev/null
+++ b/contrib/groff/devlbp/CR
@@ -0,0 +1,272 @@
+
+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
new file mode 100644
index 000000000000..eb5d6f24ed0e
--- /dev/null
+++ b/contrib/groff/devlbp/DESC.in
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 000000000000..50c6f71f56c9
--- /dev/null
+++ b/contrib/groff/devlbp/EB
@@ -0,0 +1,272 @@
+
+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
new file mode 100644
index 000000000000..364cea69a787
--- /dev/null
+++ b/contrib/groff/devlbp/EI
@@ -0,0 +1,272 @@
+
+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
new file mode 100644
index 000000000000..f2734ccd0a97
--- /dev/null
+++ b/contrib/groff/devlbp/ER
@@ -0,0 +1,272 @@
+
+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
new file mode 100644
index 000000000000..1ad7b4ec7f9e
--- /dev/null
+++ b/contrib/groff/devlbp/HB
@@ -0,0 +1,491 @@
+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
new file mode 100644
index 000000000000..30fa995754eb
--- /dev/null
+++ b/contrib/groff/devlbp/HBI
@@ -0,0 +1,492 @@
+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
new file mode 100644
index 000000000000..59201e286c31
--- /dev/null
+++ b/contrib/groff/devlbp/HI
@@ -0,0 +1,492 @@
+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
new file mode 100644
index 000000000000..c5d8d33d0e4b
--- /dev/null
+++ b/contrib/groff/devlbp/HNB
@@ -0,0 +1,491 @@
+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
new file mode 100644
index 000000000000..14bd4e3dd9bf
--- /dev/null
+++ b/contrib/groff/devlbp/HNBI
@@ -0,0 +1,491 @@
+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
new file mode 100644
index 000000000000..578faf7c97a6
--- /dev/null
+++ b/contrib/groff/devlbp/HNI
@@ -0,0 +1,491 @@
+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
new file mode 100644
index 000000000000..d0e78afd1b3c
--- /dev/null
+++ b/contrib/groff/devlbp/HNR
@@ -0,0 +1,491 @@
+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
new file mode 100644
index 000000000000..81cfa96ed0b5
--- /dev/null
+++ b/contrib/groff/devlbp/HR
@@ -0,0 +1,491 @@
+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
new file mode 100644
index 000000000000..64d9ebd6931a
--- /dev/null
+++ b/contrib/groff/devlbp/Makefile.sub
@@ -0,0 +1,16 @@
+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
new file mode 100644
index 000000000000..70a09f2d123a
--- /dev/null
+++ b/contrib/groff/devlbp/TB
@@ -0,0 +1,513 @@
+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
new file mode 100644
index 000000000000..1c2f8fed481e
--- /dev/null
+++ b/contrib/groff/devlbp/TBI
@@ -0,0 +1,493 @@
+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
new file mode 100644
index 000000000000..7de08bc8cd62
--- /dev/null
+++ b/contrib/groff/devlbp/TI
@@ -0,0 +1,521 @@
+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
new file mode 100644
index 000000000000..9a641dfd2bd7
--- /dev/null
+++ b/contrib/groff/devlbp/TR
@@ -0,0 +1,517 @@
+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
index 0d1ea4ec2f32..9c0c71f96036 100644
--- a/contrib/groff/devlj4/ALBB
+++ b/contrib/groff/devlj4/ALBB
@@ -347,12 +347,14 @@ 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
@@ -364,23 +366,31 @@ 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
@@ -402,6 +412,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -417,8 +428,11 @@ 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
@@ -432,14 +446,16 @@ k en -486
k em -486
charset
! 9759,20130,300 2 3617
-" 15126,20130 2 3618
+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
-' 9759,20130 2 51751
+cq 9759,20130 2 51751
+' "
( 13173,20130,4365 3 3624
) 13173,20130,4365 3 3625
* 17565,20130 2 3626
@@ -729,6 +745,7 @@ 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
diff --git a/contrib/groff/devlj4/ALBR b/contrib/groff/devlj4/ALBR
index 4e384ded0514..684f29ff92a8 100644
--- a/contrib/groff/devlj4/ALBR
+++ b/contrib/groff/devlj4/ALBR
@@ -361,12 +361,14 @@ 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
@@ -378,24 +380,33 @@ 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
@@ -431,9 +442,12 @@ 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
@@ -447,14 +461,16 @@ k en -486
k em -486
charset
! 8295,20130,300 2 3617
-" 13173,20130 2 3618
+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
-' 8295,20130 2 51751
+cq 8295,20130 2 51751
+' "
( 10734,20130,4365 3 3624
) 10734,20130,4365 3 3625
* 16587,20130 2 3626
@@ -744,6 +760,7 @@ 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
diff --git a/contrib/groff/devlj4/AOB b/contrib/groff/devlj4/AOB
index 954d8afbb90d..913ca39d6e78 100644
--- a/contrib/groff/devlj4/AOB
+++ b/contrib/groff/devlj4/AOB
@@ -361,6 +361,7 @@ K , -486
k s -486
G J -1461
A f -486
+A cq -486
A ' -486
Y char173 -975
Y hy -975
@@ -403,14 +404,16 @@ en A -486
em X -486
charset
! 9759,20205,450 2 3617
-" 12198,19755 2 3618
+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
-' 6831,19755 2 51751
+cq 6831,19755 2 51751
+' "
( 8781,19755 2 3624
) 8781,19755 2 3625
* 17565,20205 2 3626
@@ -700,6 +703,7 @@ 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
diff --git a/contrib/groff/devlj4/AOI b/contrib/groff/devlj4/AOI
index f1b9ca71a248..f43a1afab728 100644
--- a/contrib/groff/devlj4/AOI
+++ b/contrib/groff/devlj4/AOI
@@ -386,12 +386,14 @@ 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
@@ -403,25 +405,35 @@ 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
@@ -443,6 +455,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -975
' s -975
char173 X -975
hy X -975
@@ -456,14 +469,16 @@ em X -975
b f -486
charset
! 7806,20160,405,1176,798,880 2 3617
-" 11709,19755,0,504,-2439,504 2 3618
+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
-' 7806,19755,0,744,-1851,744 2 51751
+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
@@ -753,6 +768,7 @@ 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
diff --git a/contrib/groff/devlj4/AOR b/contrib/groff/devlj4/AOR
index 2f2b6d796e98..b9a04852cd68 100644
--- a/contrib/groff/devlj4/AOR
+++ b/contrib/groff/devlj4/AOR
@@ -330,12 +330,14 @@ 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
@@ -347,14 +349,23 @@ 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
@@ -371,6 +382,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -975
' s -975
char173 A -1461
hy A -1461
@@ -379,14 +391,16 @@ en A -1461
b f -975
charset
! 8295,20160,405 2 3617
-" 11220,19755 2 3618
+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
-' 6831,19755 2 51751
+cq 6831,19755 2 51751
+' "
( 7806,19755,405 2 3624
) 7806,19755,405 2 3625
* 15612,20160 2 3626
@@ -676,6 +690,7 @@ 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
diff --git a/contrib/groff/devlj4/CB b/contrib/groff/devlj4/CB
index 3d060f34785e..0da67ed6f017 100644
--- a/contrib/groff/devlj4/CB
+++ b/contrib/groff/devlj4/CB
@@ -6,14 +6,16 @@ pclweight 3
pclstyle 0
charset
! 15873,15060,330 0 3617
-" 15873,15060 0 3618
+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
-' 15873,15060 0 51751
+cq 15873,15060 0 51751
+' "
( 15873,16935,2295 2 3624
) 15873,16935,2295 2 3625
* 15873,15060 0 3626
@@ -303,6 +305,7 @@ 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
diff --git a/contrib/groff/devlj4/CBI b/contrib/groff/devlj4/CBI
index 14f2aa95c9da..10f468dda5d4 100644
--- a/contrib/groff/devlj4/CBI
+++ b/contrib/groff/devlj4/CBI
@@ -7,14 +7,16 @@ pclweight 3
pclstyle 1
charset
! 15873,15060,330,0,-3018 0 3617
-" 15873,15060,0,0,-2661 0 3618
+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
-' 15873,15060,0,0,-2745 0 51751
+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
@@ -304,6 +306,7 @@ 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
diff --git a/contrib/groff/devlj4/CI b/contrib/groff/devlj4/CI
index 5e87918ba42c..8a98a362b434 100644
--- a/contrib/groff/devlj4/CI
+++ b/contrib/groff/devlj4/CI
@@ -7,14 +7,16 @@ pclweight 0
pclstyle 1
charset
! 15873,15060,330,0,-5232 0 3617
-" 15873,15060,0,0,-4632 0 3618
+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
-' 15873,15060,0,0,-5217 0 51751
+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
@@ -304,6 +306,7 @@ 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
diff --git a/contrib/groff/devlj4/CLARENDON b/contrib/groff/devlj4/CLARENDON
index f5936b591a61..86f6c00e41f1 100644
--- a/contrib/groff/devlj4/CLARENDON
+++ b/contrib/groff/devlj4/CLARENDON
@@ -7,14 +7,16 @@ pclstyle 4
ligatures fi fl ff ffi ffl 0
charset
! 6342,18300 2 3617
-" 11709,18645 2 3618
+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
-' 5856,18645 2 51751
+cq 5856,18645 2 51751
+' "
( 5856,18300,6870 3 3624
) 5856,18300,6870 3 3625
* 11709,18645 2 3626
@@ -304,6 +306,7 @@ 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
diff --git a/contrib/groff/devlj4/CORONET b/contrib/groff/devlj4/CORONET
index e892e18cdd04..9dcecce8f7b7 100644
--- a/contrib/groff/devlj4/CORONET
+++ b/contrib/groff/devlj4/CORONET
@@ -7,14 +7,16 @@ pclweight 0
pclstyle 1
charset
! 13227,18990,330 2 3617
-" 13227,18990 2 3618
+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
-' 13227,19320 2 51751
+cq 13227,19320 2 51751
+' "
( 13227,19320,1935 2 3624
) 13227,19320,1935 2 3625
* 13227,18990 2 3626
@@ -304,6 +306,7 @@ 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
diff --git a/contrib/groff/devlj4/CR b/contrib/groff/devlj4/CR
index 9a87b1a3f5ad..c6da8a640549 100644
--- a/contrib/groff/devlj4/CR
+++ b/contrib/groff/devlj4/CR
@@ -6,14 +6,16 @@ pclweight 0
pclstyle 0
charset
! 15873,15060,330 0 3617
-" 15873,15060 0 3618
+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
-' 15873,15060 0 51751
+cq 15873,15060 0 51751
+' "
( 15873,17070,2580 2 3624
) 15873,17070,2580 2 3625
* 15873,15060 0 3626
@@ -303,6 +305,7 @@ 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
diff --git a/contrib/groff/devlj4/GB b/contrib/groff/devlj4/GB
index 3c7045519d57..5433de6b751a 100644
--- a/contrib/groff/devlj4/GB
+++ b/contrib/groff/devlj4/GB
@@ -321,12 +321,14 @@ 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
@@ -338,24 +340,33 @@ 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
@@ -372,6 +383,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -486
' s -486
char173 X -1461
hy X -1461
@@ -387,18 +399,22 @@ 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
-" 10734,18987 2 3618
+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
-' 6831,18555 2 51751
+cq 6831,18555 2 51751
+' "
( 8295,20250,6705 3 3624
) 8295,20250,6705 3 3625
* 13173,18555 2 3626
@@ -688,6 +704,7 @@ 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
diff --git a/contrib/groff/devlj4/GBI b/contrib/groff/devlj4/GBI
index 9a507ce8d7a9..806237c0bd4b 100644
--- a/contrib/groff/devlj4/GBI
+++ b/contrib/groff/devlj4/GBI
@@ -311,12 +311,14 @@ 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
@@ -328,22 +330,29 @@ 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
@@ -379,14 +388,18 @@ 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
@@ -395,14 +408,16 @@ w en -486
w em -486
charset
! 6831,18717,390,2859,345,962 2 3617
-" 11220,18555,0,1827,-2346,962 2 3618
+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
-' 6831,18555,0,2763,-1368,962 2 51751
+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
@@ -692,6 +707,7 @@ 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
diff --git a/contrib/groff/devlj4/GI b/contrib/groff/devlj4/GI
index d8bb19d21f78..6ca18930f226 100644
--- a/contrib/groff/devlj4/GI
+++ b/contrib/groff/devlj4/GI
@@ -248,12 +248,14 @@ 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
@@ -265,22 +267,29 @@ 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
@@ -316,26 +325,33 @@ 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
-" 11220,18555,0,2325,-3858,910 2 3618
+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
-' 6342,18555,0,2622,-1662,910 2 51751
+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
@@ -625,6 +641,7 @@ 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
diff --git a/contrib/groff/devlj4/GR b/contrib/groff/devlj4/GR
index 448d19a952ab..169cbd1533b9 100644
--- a/contrib/groff/devlj4/GR
+++ b/contrib/groff/devlj4/GR
@@ -415,12 +415,14 @@ 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
@@ -432,24 +434,33 @@ 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
@@ -471,6 +482,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -486
' s -486
char173 X -1461
hy X -1461
@@ -486,8 +498,11 @@ 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
@@ -499,6 +514,7 @@ Z hy -975
Z - -975
Z en -975
Z em -975
+B cq -486
B ' -486
J char173 -486
J hy -486
@@ -512,14 +528,16 @@ U en -486
U em -486
charset
! 6831,18837,390 2 3617
-" 11220,18555 2 3618
+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
-' 7317,18555 2 51751
+cq 7317,18555 2 51751
+' "
( 7806,20250,6705 3 3624
) 7806,20250,6705 3 3625
* 12684,18555 2 3626
@@ -809,6 +827,7 @@ 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
diff --git a/contrib/groff/devlj4/LGB b/contrib/groff/devlj4/LGB
index 89c969152328..681116e5b1f9 100644
--- a/contrib/groff/devlj4/LGB
+++ b/contrib/groff/devlj4/LGB
@@ -6,14 +6,16 @@ pclweight 3
pclstyle 0
charset
! 13227,18990,330 2 3617
-" 13227,18990 2 3618
+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
-' 13227,19320 2 51751
+cq 13227,19320 2 51751
+' "
( 13227,19320,2325 2 3624
) 13227,19320,2325 2 3625
* 13227,18990 2 3626
@@ -303,6 +305,7 @@ 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
diff --git a/contrib/groff/devlj4/LGI b/contrib/groff/devlj4/LGI
index 492b52c0eb03..ef8fae2e2847 100644
--- a/contrib/groff/devlj4/LGI
+++ b/contrib/groff/devlj4/LGI
@@ -7,14 +7,16 @@ pclweight 0
pclstyle 1
charset
! 13227,18990,330,0,-2748 2 3617
-" 13227,18990,0,372,-3960,372 2 3618
+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
-' 13227,19320,0,0,-5469 2 51751
+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
@@ -304,6 +306,7 @@ 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
diff --git a/contrib/groff/devlj4/LGR b/contrib/groff/devlj4/LGR
index e4b1fcb888bf..6e9c476aebf6 100644
--- a/contrib/groff/devlj4/LGR
+++ b/contrib/groff/devlj4/LGR
@@ -6,14 +6,16 @@ pclweight 0
pclstyle 0
charset
! 13227,18990,330 2 3617
-" 13227,18990 2 3618
+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
-' 13227,19320 2 51751
+cq 13227,19320 2 51751
+' "
( 13227,19320,1935 2 3624
) 13227,19320,1935 2 3625
* 13227,18990 2 3626
@@ -303,6 +305,7 @@ 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
diff --git a/contrib/groff/devlj4/MARIGOLD b/contrib/groff/devlj4/MARIGOLD
index 60976ca2dc40..cc0921bdef86 100644
--- a/contrib/groff/devlj4/MARIGOLD
+++ b/contrib/groff/devlj4/MARIGOLD
@@ -7,14 +7,16 @@ pclstyle 0
ligatures fi fl ff ffi ffl 0
charset
! 7806,12570,330 0 3617
-" 6342,11790 0 3618
+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
-' 3903,11790 0 51751
+cq 3903,11790 0 51751
+' "
( 6831,16770,2235 2 3624
) 6831,16770,2235 2 3625
* 9759,11940 0 3626
@@ -304,6 +306,7 @@ 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
diff --git a/contrib/groff/devlj4/Makefile.sub b/contrib/groff/devlj4/Makefile.sub
index c4e850bff080..dd49b637d8f3 100644
--- a/contrib/groff/devlj4/Makefile.sub
+++ b/contrib/groff/devlj4/Makefile.sub
@@ -30,4 +30,4 @@ DESC: DESC.in
fonts:
$(MAKE) -f $(srcdir)/generate/Makefile srcdir=$(srcdir)/generate \
- HPFTODIT=../hpftodit/hpftodit
+ HPFTODIT=$(top_builddir)/src/utils/hpftodit/hpftodit
diff --git a/contrib/groff/devlj4/OB b/contrib/groff/devlj4/OB
index 093e0bb25ca1..8ea8f2948236 100644
--- a/contrib/groff/devlj4/OB
+++ b/contrib/groff/devlj4/OB
@@ -371,12 +371,14 @@ 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
@@ -388,25 +390,35 @@ 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
@@ -428,6 +440,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -438,16 +451,20 @@ hy 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
@@ -456,14 +473,16 @@ k en -486
k em -486
charset
! 7317,18000,375 2 3617
-" 12198,18375 2 3618
+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
-' 7317,18375 2 51751
+cq 7317,18375 2 51751
+' "
( 7317,18375,3165 2 3624
) 7317,18375,3165 2 3625
* 14637,18150 2 3626
@@ -753,6 +772,7 @@ 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
diff --git a/contrib/groff/devlj4/OBI b/contrib/groff/devlj4/OBI
index 918e0f450eef..e17fe3f44f48 100644
--- a/contrib/groff/devlj4/OBI
+++ b/contrib/groff/devlj4/OBI
@@ -366,12 +366,14 @@ 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
@@ -383,24 +385,33 @@ 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
@@ -422,6 +433,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -437,8 +449,10 @@ 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
@@ -452,14 +466,16 @@ k en -486
k em -486
charset
! 7317,18000,375,1944,753,737 2 3617
-" 12198,18375,0,1623,-2622,737 2 3618
+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
-' 7317,18375,0,2511,-531,737 2 51751
+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
@@ -749,6 +765,7 @@ 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
diff --git a/contrib/groff/devlj4/OI b/contrib/groff/devlj4/OI
index 6e17dff15175..bbe9b44617fe 100644
--- a/contrib/groff/devlj4/OI
+++ b/contrib/groff/devlj4/OI
@@ -466,12 +466,14 @@ 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
@@ -483,24 +485,33 @@ 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
@@ -527,6 +538,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -542,15 +554,18 @@ 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
@@ -564,14 +579,16 @@ U en -486
U em -486
charset
! 7317,18000,330,723,-177,586 2 3617
-" 10734,18375,0,678,-2778,586 2 3618
+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
-' 7317,18375,0,1704,-1407,586 2 51751
+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
@@ -861,6 +878,7 @@ 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
diff --git a/contrib/groff/devlj4/OR b/contrib/groff/devlj4/OR
index 140d984023bd..edea52a511b0 100644
--- a/contrib/groff/devlj4/OR
+++ b/contrib/groff/devlj4/OR
@@ -434,12 +434,14 @@ 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
@@ -451,26 +453,37 @@ 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
@@ -492,6 +505,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -507,16 +521,22 @@ 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
@@ -535,14 +555,16 @@ U en -486
U em -486
charset
! 7317,18000,330 2 3617
-" 10734,18375 2 3618
+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
-' 7317,18375 2 51751
+cq 7317,18375 2 51751
+' "
( 7317,18375,3165 2 3624
) 7317,18375,3165 2 3625
* 14637,18066 2 3626
@@ -832,6 +854,7 @@ 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
diff --git a/contrib/groff/devlj4/TB b/contrib/groff/devlj4/TB
index c352b153d712..644425aa9d89 100644
--- a/contrib/groff/devlj4/TB
+++ b/contrib/groff/devlj4/TB
@@ -520,12 +520,14 @@ 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
@@ -537,25 +539,35 @@ 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
@@ -582,6 +594,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1950
hy X -1950
@@ -597,11 +610,15 @@ 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
@@ -630,14 +647,16 @@ U en -486
U em -486
charset
! 8781,18045,405 2 3617
-" 12198,18450 2 3618
+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
-' 8781,18450 2 51751
+cq 8781,18450 2 51751
+' "
( 8781,18450,4305 2 3624
) 8781,18450,4305 2 3625
* 13173,18450 2 3626
@@ -927,6 +946,7 @@ 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
diff --git a/contrib/groff/devlj4/TBI b/contrib/groff/devlj4/TBI
index 59300fe80633..e1a30a879a16 100644
--- a/contrib/groff/devlj4/TBI
+++ b/contrib/groff/devlj4/TBI
@@ -565,12 +565,14 @@ 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
@@ -582,24 +584,33 @@ 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
@@ -616,6 +627,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -486
' s -486
char173 X -1461
hy X -1461
@@ -631,13 +643,19 @@ 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
@@ -649,6 +667,7 @@ Z hy -486
Z - -486
Z en -486
Z em -486
+J cq -975
J ' -975
J char173 -975
J hy -975
@@ -682,14 +701,16 @@ en g -486
em g -486
charset
! 10245,18450,405,963,-453,913 2 3617
-" 13662,18450,0,1380,-3414,913 2 3618
+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
-' 8781,18450,0,2001,-2790,913 2 51751
+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
@@ -979,6 +1000,7 @@ 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
diff --git a/contrib/groff/devlj4/TI b/contrib/groff/devlj4/TI
index ee43c0bc243f..6b4a3ec78369 100644
--- a/contrib/groff/devlj4/TI
+++ b/contrib/groff/devlj4/TI
@@ -635,12 +635,14 @@ 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
@@ -652,24 +654,33 @@ 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
@@ -691,6 +702,7 @@ K hy -1950
K - -1950
K en -1950
K em -1950
+cq s -486
' s -486
char173 X -1461
hy X -1461
@@ -706,32 +718,42 @@ 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
@@ -765,14 +787,16 @@ en g -486
em g -486
charset
! 8781,18225,330,1170,-693,899 2 3617
-" 12684,18225,0,945,-4194,899 2 3618
+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
-' 8781,18225,0,1434,-3582,899 2 51751
+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
@@ -1062,6 +1086,7 @@ 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
diff --git a/contrib/groff/devlj4/TR b/contrib/groff/devlj4/TR
index 03d63fb76529..64a12437fd2d 100644
--- a/contrib/groff/devlj4/TR
+++ b/contrib/groff/devlj4/TR
@@ -426,12 +426,14 @@ 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
@@ -443,26 +445,37 @@ 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
@@ -484,6 +497,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -499,6 +513,7 @@ R hy -1461
R - -1461
R en -1461
R em -1461
+K cq -486
K ' -486
t g -486
b f -975
@@ -519,14 +534,16 @@ en g -486
em g -486
charset
! 8781,18225,330 2 3617
-" 12198,18225 2 3618
+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
-' 8781,18225 2 51751
+cq 8781,18225 2 51751
+' "
( 8781,18225,4845 2 3624
) 8781,18225,4845 2 3625
* 13173,18225 2 3626
@@ -816,6 +833,7 @@ 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
diff --git a/contrib/groff/devlj4/UB b/contrib/groff/devlj4/UB
index 554e71be1797..5c1717fbb9a9 100644
--- a/contrib/groff/devlj4/UB
+++ b/contrib/groff/devlj4/UB
@@ -389,12 +389,14 @@ 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
@@ -406,25 +408,35 @@ 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
@@ -446,6 +458,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -1950
' s -1950
char173 X -1461
hy X -1461
@@ -462,20 +475,26 @@ 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
-" 13662,18135 2 3618
+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
-' 8781,18135 2 51751
+cq 8781,18135 2 51751
+' "
( 8781,18135,2355 2 3624
) 8781,18135,2355 2 3625
* 16587,18495 2 3626
@@ -765,6 +784,7 @@ 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
diff --git a/contrib/groff/devlj4/UBI b/contrib/groff/devlj4/UBI
index 3c3b77e47ea8..00ffcfcb4850 100644
--- a/contrib/groff/devlj4/UBI
+++ b/contrib/groff/devlj4/UBI
@@ -344,12 +344,14 @@ 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
@@ -361,25 +363,35 @@ 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
@@ -401,6 +413,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -1461
' s -1461
char173 X -1461
hy X -1461
@@ -412,20 +425,26 @@ 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
-" 14148,18135,0,1890,-3297,1012 2 3618
+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
-' 8781,18135,0,3414,-2601,1012 2 51751
+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
@@ -715,6 +734,7 @@ 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
diff --git a/contrib/groff/devlj4/UCB b/contrib/groff/devlj4/UCB
index c67dc51bdc59..286427895da3 100644
--- a/contrib/groff/devlj4/UCB
+++ b/contrib/groff/devlj4/UCB
@@ -358,12 +358,14 @@ 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
@@ -375,25 +377,35 @@ 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
@@ -415,6 +427,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -975
' s -975
char173 X -1461
hy X -1461
@@ -433,14 +446,16 @@ Z en -486
Z em -486
charset
! 7806,18135 2 3617
-" 10734,18135 2 3618
+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
-' 5856,18135 2 51751
+cq 5856,18135 2 51751
+' "
( 5856,18135,2430 2 3624
) 5856,18135,2430 2 3625
* 12684,18495 2 3626
@@ -730,6 +745,7 @@ 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
diff --git a/contrib/groff/devlj4/UCBI b/contrib/groff/devlj4/UCBI
index ceef7343e41b..d1876c181549 100644
--- a/contrib/groff/devlj4/UCBI
+++ b/contrib/groff/devlj4/UCBI
@@ -269,12 +269,14 @@ 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
@@ -286,25 +288,35 @@ 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
@@ -342,14 +354,16 @@ Z en -486
Z em -486
charset
! 7806,18135,0,2628,993,994 2 3617
-" 10734,18135,0,3669,-2133,994 2 3618
+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
-' 5856,18135,0,4215,-1392,994 2 51751
+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
@@ -639,6 +653,7 @@ 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
diff --git a/contrib/groff/devlj4/UCI b/contrib/groff/devlj4/UCI
index 9e26536f75a8..4214f49eb50d 100644
--- a/contrib/groff/devlj4/UCI
+++ b/contrib/groff/devlj4/UCI
@@ -395,12 +395,14 @@ 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
@@ -412,25 +414,35 @@ 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
@@ -452,6 +464,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -486
' s -486
char173 X -486
hy X -486
@@ -462,7 +475,9 @@ hy 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
@@ -481,14 +496,16 @@ C en -486
C em -486
charset
! 7806,18135,0,2241,591,996 2 3617
-" 9759,18135,0,3060,-2391,996 2 3618
+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
-' 5856,18135,0,3690,-1482,996 2 51751
+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
@@ -778,6 +795,7 @@ 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
diff --git a/contrib/groff/devlj4/UCR b/contrib/groff/devlj4/UCR
index 6684eae2cc49..3b503992b270 100644
--- a/contrib/groff/devlj4/UCR
+++ b/contrib/groff/devlj4/UCR
@@ -326,12 +326,14 @@ 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
@@ -343,25 +345,35 @@ 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
@@ -383,6 +395,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -486
' s -486
char173 X -486
hy X -486
@@ -393,6 +406,7 @@ hy A -486
en X -486
en A -486
em X -486
+K cq -486
K ' -486
Z char173 -486
Z hy -486
@@ -401,14 +415,16 @@ Z en -486
Z em -486
charset
! 7806,18135 2 3617
-" 9759,18135 2 3618
+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
-' 5856,18135 2 51751
+cq 5856,18135 2 51751
+' "
( 5856,18135,2520 2 3624
) 5856,18135,2520 2 3625
* 12198,18390 2 3626
@@ -698,6 +714,7 @@ 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
diff --git a/contrib/groff/devlj4/UI b/contrib/groff/devlj4/UI
index 00b953c7e5b1..12bcc26748de 100644
--- a/contrib/groff/devlj4/UI
+++ b/contrib/groff/devlj4/UI
@@ -446,12 +446,14 @@ 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
@@ -463,26 +465,37 @@ 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
@@ -504,6 +517,7 @@ K hy -975
K - -975
K en -975
K em -975
+cq s -1950
' s -1950
char173 X -1461
hy X -1461
@@ -514,60 +528,109 @@ hy 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
@@ -576,14 +639,16 @@ x en -486
x em -486
charset
! 8781,18165,0,1956,81,1000 2 3617
-" 13173,18246,0,2049,-4233,1000 2 3618
+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
-' 8781,18135,0,3114,-2751,1000 2 51751
+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
@@ -873,6 +938,7 @@ 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
diff --git a/contrib/groff/devlj4/UR b/contrib/groff/devlj4/UR
index a4cf9ff7b4c4..b7eba7cfca46 100644
--- a/contrib/groff/devlj4/UR
+++ b/contrib/groff/devlj4/UR
@@ -435,12 +435,14 @@ 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
@@ -452,25 +454,35 @@ 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
@@ -492,6 +504,7 @@ K hy -1461
K - -1461
K en -1461
K em -1461
+cq s -1950
' s -1950
char173 X -1461
hy X -1461
@@ -502,6 +515,7 @@ hy A -1461
en X -1461
en A -1461
em X -1461
+K cq -486
K ' -486
t g -486
b f -486
@@ -510,21 +524,28 @@ 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
-" 13173,18237 2 3618
+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
-' 8781,18135 2 51751
+cq 8781,18135 2 51751
+' "
( 8781,18135,2550 2 3624
) 8781,18135,2550 2 3625
* 16587,18495 2 3626
@@ -814,6 +835,7 @@ 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
diff --git a/contrib/groff/devlj4/generate/Makefile b/contrib/groff/devlj4/generate/Makefile
index 09c6ac0a61eb..e830e5f8237a 100644
--- a/contrib/groff/devlj4/generate/Makefile
+++ b/contrib/groff/devlj4/generate/Makefile
@@ -1,32 +1,39 @@
-#Copyright (C) 1994 Free Software Foundation, Inc.
+# Copyright (C) 1994 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
-#This file is part of groff.
+# This file is part of groff.
#
-#groff is free software; you can redistribute it and/or modify it under
-#the terms of the GNU General Public License as published by the Free
-#Software Foundation; either version 2, or (at your option) any later
-#version.
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
#
-#groff is distributed in the hope that it will be useful, but WITHOUT ANY
-#WARRANTY; without even the implied warranty of MERCHANTABILITY or
-#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-#for more details.
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
#
-#You should have 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.
+# You should have 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-boi.external.hp.com:/pub/printers/laserjet/win.dos/tfmlj4p.exe
-# This is a self-extracting MS-DOS archive.
-AUTOFONT=/u/jjc/autofont
+#
+# 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=.
+srcdir=generate
TEXTMAP=$(srcdir)/text.map
SPECIALMAP=$(srcdir)/special.map
diff --git a/contrib/groff/devlj4/generate/text.map b/contrib/groff/devlj4/generate/text.map
index fc70b63dbb69..0175cbe9a3b8 100644
--- a/contrib/groff/devlj4/generate/text.map
+++ b/contrib/groff/devlj4/generate/text.map
@@ -1,6 +1,7 @@
# Map MSL numbers to troff names for a text font.
1 !
2 "
+2 dq
3 #
3 sh
4 $
@@ -8,6 +9,7 @@
5 %
6 &
8 '
+8 cq
9 (
10 )
11 *
@@ -296,6 +298,7 @@
200 char185
201 char215
202 char247
+302 pc
302 char183
310 fm
311 sd
diff --git a/contrib/groff/devps/AB b/contrib/groff/devps/AB
index d5313f0de490..f00cf9a62b75 100644
--- a/contrib/groff/devps/AB
+++ b/contrib/groff/devps/AB
@@ -9,6 +9,7 @@ A w -65
A v -70
A u -20
A ' -90
+A cq -90
A Y -80
A W -60
A V -102
@@ -44,6 +45,7 @@ K e -40
K O -30
L y -23
L ' -30
+L cq -30
L rq -30
L Y -80
L W -55
@@ -141,6 +143,7 @@ c y -20
c l -15
c k -15
, ' -70
+, cq -70
, rq -70
e y -20
e x -20
@@ -170,6 +173,7 @@ o w -20
o v -30
p y -20
. ' -70
+. cq -70
. rq -70
lq A -50
` ` -80
@@ -179,11 +183,19 @@ 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
@@ -226,334 +238,337 @@ 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
+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
-# 560,700 0 0043 numbersign
+! 280,740 2 0041 -- exclam
+" 360,740 2 0042 -- quotedbl
+dq "
+# 560,700 0 0043 -- numbersign
sh "
-$ 560,857,86 2 0044 dollar
+$ 560,857,86 2 0044 -- dollar
Do "
-% 860,755,15 2 0045 percent
-& 680,755,15 2 0046 ampersand
-' 280,740 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 640,740,100 2 0134 -- backslash
rs "
-] 320,754,157 2 0135 bracketright
+] 320,754,157 2 0135 -- bracketright
rB "
-a^ 540,774 2 0136 circumflex
+a^ 540,774 2 0136 -- circumflex
^ "
-_ 500,0,125 0 0137 underscore
-` 280,740 2 0140 quoteleft
+_ 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
+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
+ba 600,740,100 2 0174 -- bar
| "
-rC 340,747,191 3 0175 braceright
+rC 340,747,191 3 0175 -- braceright
} "
-a~ 480,767 2 0176 tilde
+a~ 480,767 2 0176 -- tilde
~ "
-bq 280,133,141 0 0200 quotesinglbase
-Fo 460,469 0 0201 guillemotleft
+bq 280,133,141 0 0200 -- quotesinglbase
+Fo 460,469 0 0201 -- guillemotleft
char171 "
-Fc 460,469 0 0202 guillemotright
+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
+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
+ct 560,715 0 0242 -- cent
char162 "
-Po 560,755 2 0243 sterling
+Po 560,755 2 0243 -- sterling
char163 "
-Cs 560,577 0 0244 currency
+Cs 560,577 0 0244 -- currency
char164 "
-Ye 560,740 2 0245 yen
+Ye 560,740 2 0245 -- yen
char165 "
-bb 600,740,100 2 0246 brokenbar
+bb 600,740,100 2 0246 -- brokenbar
char166 "
-sc 560,755,158 2 0247 section
+sc 560,755,158 2 0247 -- section
char167 "
-ad 500,769 2 0250 dieresis
+ad 500,769 2 0250 -- dieresis
char168 "
-co 740,752,12 2 0251 copyright
+co 740,752,12 2 0251 -- copyright
char169 "
-Of 360,755 2 0252 ordfeminine
+Of 360,755 2 0252 -- ordfeminine
char170 "
-fo 240,469 0 0253 guilsinglleft
-no 600,425 0 0254 logicalnot
+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
+\- 600,313 0 0255 -- minus
+rg 740,752,12 2 0256 -- registered
char174 "
-a- 420,759 2 0257 macron
+a- 420,759 2 0257 -- macron
char175 "
-de 400,712 0 0260 degree
+de 400,712 0 0260 -- degree
char176 "
-char177 600,556,62 0 0261 plusminus
-S2 336,749 2 0262 twosuperior
+char177 600,556,62 0 0261 -- plusminus
+S2 336,749 2 0262 -- twosuperior
char178 "
-S3 336,749 2 0263 threesuperior
+S3 336,749 2 0263 -- threesuperior
char179 "
-aa 420,849 2 0264 acute
+aa 420,849 2 0264 -- acute
char180 "
-char181 576,555,187 1 0265 mu
-ps 600,740,103 2 0266 paragraph
+char181 576,555,187 1 0265 -- mu
+ps 600,740,103 2 0266 -- paragraph
char182 "
-char183 280,320 0 0267 periodcentered
-ac 340,6,251 1 0270 cedilla
+pc 280,320 0 0267 -- periodcentered
+char183 "
+ac 340,6,251 1 0270 -- cedilla
char184 "
-S1 336,740 2 0271 onesuperior
+S1 336,740 2 0271 -- onesuperior
char185 "
-Om 360,755 2 0272 ordmasculine
+Om 360,755 2 0272 -- ordmasculine
char186 "
-fc 240,469 0 0273 guilsinglright
-14 840,740 2 0274 onequarter
+fc 240,469 0 0273 -- guilsinglright
+14 840,740 2 0274 -- onequarter
char188 "
-12 840,740 2 0275 onehalf
+12 840,740 2 0275 -- onehalf
char189 "
-34 840,749 2 0276 threequarters
+34 840,749 2 0276 -- threequarters
char190 "
-r? 560,555,200 1 0277 questiondown
+r? 560,555,200 1 0277 -- questiondown
char191 "
-`A 740,1021 2 0300 Agrave
+`A 740,1021 2 0300 -- Agrave
char192 "
-'A 740,1019 2 0301 Aacute
+'A 740,1019 2 0301 -- Aacute
char193 "
-^A 740,944 2 0302 Acircumflex
+^A 740,944 2 0302 -- Acircumflex
char194 "
-~A 740,937 2 0303 Atilde
+~A 740,937 2 0303 -- Atilde
char195 "
-:A 740,939 2 0304 Adieresis
+:A 740,939 2 0304 -- Adieresis
char196 "
-oA 740,969 2 0305 Aring
+oA 740,969 2 0305 -- Aring
char197 "
-AE 900,740 2 0306 AE
+AE 900,740 2 0306 -- AE
char198 "
-,C 780,755,251 3 0307 Ccedilla
+,C 780,755,251 3 0307 -- Ccedilla
char199 "
-`E 520,1021 2 0310 Egrave
+`E 520,1021 2 0310 -- Egrave
char200 "
-'E 520,1019 2 0311 Eacute
+'E 520,1019 2 0311 -- Eacute
char201 "
-^E 520,944 2 0312 Ecircumflex
+^E 520,944 2 0312 -- Ecircumflex
char202 "
-:E 520,939 2 0313 Edieresis
+:E 520,939 2 0313 -- Edieresis
char203 "
-`I 280,1021 2 0314 Igrave
+`I 280,1021 2 0314 -- Igrave
char204 "
-'I 280,1019 2 0315 Iacute
+'I 280,1019 2 0315 -- Iacute
char205 "
-^I 280,944 2 0316 Icircumflex
+^I 280,944 2 0316 -- Icircumflex
char206 "
-:I 280,939 2 0317 Idieresis
+:I 280,939 2 0317 -- Idieresis
char207 "
--D 742,740 2 0320 Eth
+-D 742,740 2 0320 -- Eth
char208 "
-~N 740,937 2 0321 Ntilde
+~N 740,937 2 0321 -- Ntilde
char209 "
-`O 840,1021,15 2 0322 Ograve
+`O 840,1021,15 2 0322 -- Ograve
char210 "
-'O 840,1019,15 2 0323 Oacute
+'O 840,1019,15 2 0323 -- Oacute
char211 "
-^O 840,944,15 2 0324 Ocircumflex
+^O 840,944,15 2 0324 -- Ocircumflex
char212 "
-~O 840,937,15 2 0325 Otilde
+~O 840,937,15 2 0325 -- Otilde
char213 "
-:O 840,939,15 2 0326 Odieresis
+:O 840,939,15 2 0326 -- Odieresis
char214 "
-char215 600,494 0 0327 multiply
-/O 840,814,71 2 0330 Oslash
+char215 600,494 0 0327 -- multiply
+/O 840,814,71 2 0330 -- Oslash
char216 "
-`U 640,1021,15 2 0331 Ugrave
+`U 640,1021,15 2 0331 -- Ugrave
char217 "
-'U 640,1019,15 2 0332 Uacute
+'U 640,1019,15 2 0332 -- Uacute
char218 "
-^U 640,944,15 2 0333 Ucircumflex
+^U 640,944,15 2 0333 -- Ucircumflex
char219 "
-:U 640,939,15 2 0334 Udieresis
+:U 640,939,15 2 0334 -- Udieresis
char220 "
-'Y 620,1019 2 0335 Yacute
+'Y 620,1019 2 0335 -- Yacute
char221 "
-TP 560,740 2 0336 Thorn
+TP 560,740 2 0336 -- Thorn
char222 "
-ss 600,755,18 2 0337 germandbls
+ss 600,755,18 2 0337 -- germandbls
char223 "
-`a 660,851,18 2 0340 agrave
+`a 660,851,18 2 0340 -- agrave
char224 "
-'a 660,849,18 2 0341 aacute
+'a 660,849,18 2 0341 -- aacute
char225 "
-^a 660,774,18 2 0342 acircumflex
+^a 660,774,18 2 0342 -- acircumflex
char226 "
-~a 660,767,18 2 0343 atilde
+~a 660,767,18 2 0343 -- atilde
char227 "
-:a 660,769,18 2 0344 adieresis
+:a 660,769,18 2 0344 -- adieresis
char228 "
-oa 660,834,18 2 0345 aring
+oa 660,834,18 2 0345 -- aring
char229 "
-ae 1080,574,18 0 0346 ae
+ae 1080,574,18 0 0346 -- ae
char230 "
-,c 640,574,251 1 0347 ccedilla
+,c 640,574,251 1 0347 -- ccedilla
char231 "
-`e 640,851,18 2 0350 egrave
+`e 640,851,18 2 0350 -- egrave
char232 "
-'e 640,849,18 2 0351 eacute
+'e 640,849,18 2 0351 -- eacute
char233 "
-^e 640,774,18 2 0352 ecircumflex
+^e 640,774,18 2 0352 -- ecircumflex
char234 "
-:e 640,769,18 2 0353 edieresis
+:e 640,769,18 2 0353 -- edieresis
char235 "
-`i 240,851 2 0354 igrave
+`i 240,851 2 0354 -- igrave
char236 "
-'i 240,849 2 0355 iacute
+'i 240,849 2 0355 -- iacute
char237 "
-^i 240,774 2 0356 icircumflex
+^i 240,774 2 0356 -- icircumflex
char238 "
-:i 240,769 2 0357 idieresis
+:i 240,769 2 0357 -- idieresis
char239 "
-Sd 640,754,18 2 0360 eth
+Sd 640,754,18 2 0360 -- eth
char240 "
-~n 600,767 2 0361 ntilde
+~n 600,767 2 0361 -- ntilde
char241 "
-`o 640,851,18 2 0362 ograve
+`o 640,851,18 2 0362 -- ograve
char242 "
-'o 640,849,18 2 0363 oacute
+'o 640,849,18 2 0363 -- oacute
char243 "
-^o 640,774,18 2 0364 ocircumflex
+^o 640,774,18 2 0364 -- ocircumflex
char244 "
-~o 640,767,18 2 0365 otilde
+~o 640,767,18 2 0365 -- otilde
char245 "
-:o 640,769,18 2 0366 odieresis
+:o 640,769,18 2 0366 -- odieresis
char246 "
-char247 600,526,20 0 0367 divide
-/o 660,608,50 0 0370 oslash
+char247 600,526,20 0 0367 -- divide
+/o 660,608,50 0 0370 -- oslash
char248 "
-`u 600,851,18 2 0371 ugrave
+`u 600,851,18 2 0371 -- ugrave
char249 "
-'u 600,849,18 2 0372 uacute
+'u 600,849,18 2 0372 -- uacute
char250 "
-^u 600,774,18 2 0373 ucircumflex
+^u 600,774,18 2 0373 -- ucircumflex
char251 "
-:u 600,769,18 2 0374 udieresis
+:u 600,769,18 2 0374 -- udieresis
char252 "
-'y 580,849,185 3 0375 yacute
+'y 580,849,185 3 0375 -- yacute
char253 "
-Tp 660,740,185 3 0376 thorn
+Tp 660,740,185 3 0376 -- thorn
char254 "
-:y 580,769,185 3 0377 ydieresis
+:y 580,769,185 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/ABI b/contrib/groff/devps/ABI
index 000d9588589c..d236b63b9908 100644
--- a/contrib/groff/devps/ABI
+++ b/contrib/groff/devps/ABI
@@ -10,6 +10,7 @@ A w -65
A v -70
A u -20
A ' -90
+A cq -90
A Y -80
A W -60
A V -102
@@ -45,6 +46,7 @@ K e -40
K O -30
L y -23
L ' -30
+L cq -30
L rq -30
L Y -80
L W -55
@@ -142,6 +144,7 @@ c y -20
c l -15
c k -15
, ' -70
+, cq -70
, rq -70
e y -20
e x -20
@@ -171,6 +174,7 @@ o w -20
o v -30
p y -20
. ' -70
+. cq -70
. rq -70
lq A -50
` ` -80
@@ -180,11 +184,19 @@ 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
@@ -227,334 +239,337 @@ 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
+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
-# 560,700,0,108,-16,82 0 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 640,740,100,0,-183 2 0134 -- backslash
rs "
-] 320,754,157,72,43,72 2 0135 bracketright
+] 320,754,157,72,43,72 2 0135 -- bracketright
rB "
-a^ 540,774,0,98,-139,82 2 0136 circumflex
+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
+_ 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
+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
+ba 600,740,100,0,-164 2 0174 -- bar
| "
-rC 340,747,191,115,62,82 3 0175 braceright
+rC 340,747,191,115,62,82 3 0175 -- braceright
} "
-a~ 480,767,0,134,-128,82 2 0176 tilde
+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
+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
+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
+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
+ct 560,715,0,89,-60,82 0 0242 -- cent
char162 "
-Po 560,755,0,105,12,82 2 0243 sterling
+Po 560,755,0,105,12,82 2 0243 -- sterling
char163 "
-Cs 560,577,0,118,-3,82 0 0244 currency
+Cs 560,577,0,118,-3,82 0 0244 -- currency
char164 "
-Ye 560,740,0,197,-33,82 2 0245 yen
+Ye 560,740,0,197,-33,82 2 0245 -- yen
char165 "
-bb 600,740,100,0,-164 2 0246 brokenbar
+bb 600,740,100,0,-164 2 0246 -- brokenbar
char166 "
-sc 560,755,158,92,-15,82 2 0247 section
+sc 560,755,158,92,-15,82 2 0247 -- section
char167 "
-ad 500,769,0,115,-146,82 2 0250 dieresis
+ad 500,769,0,115,-146,82 2 0250 -- dieresis
char168 "
-co 740,752,12,137,0,82 2 0251 copyright
+co 740,752,12,137,0,82 2 0251 -- copyright
char169 "
-Of 360,755,0,162,-77,82 2 0252 ordfeminine
+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
+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
+\- 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
+a- 420,759,0,120,-142,82 2 0257 -- macron
char175 "
-de 400,712,0,101,-110,82 0 0260 degree
+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
+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
+S3 336,749,0,127,-37,82 2 0263 -- threesuperior
char179 "
-aa 420,849,0,138,-174,82 2 0264 acute
+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
+char181 576,555,187,116,47,82 1 0265 -- mu
+ps 600,740,103,194,-40,82 2 0266 -- paragraph
char182 "
-char183 280,320,0,35,-58,35 0 0267 periodcentered
-ac 340,6,251,0,-17 1 0270 cedilla
+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
+S1 336,740,0,74,-132,74 2 0271 -- onesuperior
char185 "
-Om 360,755,0,141,-81,82 2 0272 ordmasculine
+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
+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
+12 840,740,0,40,-107,40 2 0275 -- onehalf
char189 "
-34 840,749,0,46,-47,46 2 0276 threequarters
+34 840,749,0,46,-47,46 2 0276 -- threequarters
char190 "
-r? 560,555,200,17,-19,17 1 0277 questiondown
+r? 560,555,200,17,-19,17 1 0277 -- questiondown
char191 "
-`A 740,1021,0,42,43,42 2 0300 Agrave
+`A 740,1021,0,42,43,42 2 0300 -- Agrave
char192 "
-'A 740,1019,0,42,43,42 2 0301 Aacute
+'A 740,1019,0,42,43,42 2 0301 -- Aacute
char193 "
-^A 740,944,0,42,43,42 2 0302 Acircumflex
+^A 740,944,0,42,43,42 2 0302 -- Acircumflex
char194 "
-~A 740,937,0,42,43,42 2 0303 Atilde
+~A 740,937,0,42,43,42 2 0303 -- Atilde
char195 "
-:A 740,939,0,42,43,42 2 0304 Adieresis
+:A 740,939,0,42,43,42 2 0304 -- Adieresis
char196 "
-oA 740,969,0,42,43,42 2 0305 Aring
+oA 740,969,0,42,43,42 2 0305 -- Aring
char197 "
-AE 900,740,0,111,55,82 2 0306 AE
+AE 900,740,0,111,55,82 2 0306 -- AE
char198 "
-,C 780,755,251,134,-47,82 3 0307 Ccedilla
+,C 780,755,251,134,-47,82 3 0307 -- Ccedilla
char199 "
-`E 520,1021,0,126,-11,82 2 0310 Egrave
+`E 520,1021,0,126,-11,82 2 0310 -- Egrave
char200 "
-'E 520,1019,0,126,-11,82 2 0311 Eacute
+'E 520,1019,0,126,-11,82 2 0311 -- Eacute
char201 "
-^E 520,944,0,139,-11,82 2 0312 Ecircumflex
+^E 520,944,0,139,-11,82 2 0312 -- Ecircumflex
char202 "
-:E 520,939,0,136,-11,82 2 0313 Edieresis
+:E 520,939,0,136,-11,82 2 0313 -- Edieresis
char203 "
-`I 280,1021,0,168,-22,82 2 0314 Igrave
+`I 280,1021,0,168,-22,82 2 0314 -- Igrave
char204 "
-'I 280,1019,0,264,-22,82 2 0315 Iacute
+'I 280,1019,0,264,-22,82 2 0315 -- Iacute
char205 "
-^I 280,944,0,259,-22,82 2 0316 Icircumflex
+^I 280,944,0,259,-22,82 2 0316 -- Icircumflex
char206 "
-:I 280,939,0,256,-22,82 2 0317 Idieresis
+:I 280,939,0,256,-22,82 2 0317 -- Idieresis
char207 "
--D 742,740,0,74,-33,74 2 0320 Eth
+-D 742,740,0,74,-33,74 2 0320 -- Eth
char208 "
-~N 740,937,0,118,-20,82 2 0321 Ntilde
+~N 740,937,0,118,-20,82 2 0321 -- Ntilde
char209 "
-`O 840,1021,15,92,-45,82 2 0322 Ograve
+`O 840,1021,15,92,-45,82 2 0322 -- Ograve
char210 "
-'O 840,1019,15,92,-45,82 2 0323 Oacute
+'O 840,1019,15,92,-45,82 2 0323 -- Oacute
char211 "
-^O 840,944,15,92,-45,82 2 0324 Ocircumflex
+^O 840,944,15,92,-45,82 2 0324 -- Ocircumflex
char212 "
-~O 840,937,15,92,-45,82 2 0325 Otilde
+~O 840,937,15,92,-45,82 2 0325 -- Otilde
char213 "
-:O 840,939,15,92,-45,82 2 0326 Odieresis
+: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
+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
+`U 640,1021,15,132,-47,82 2 0331 -- Ugrave
char217 "
-'U 640,1019,15,132,-47,82 2 0332 Uacute
+'U 640,1019,15,132,-47,82 2 0332 -- Uacute
char218 "
-^U 640,944,15,132,-47,82 2 0333 Ucircumflex
+^U 640,944,15,132,-47,82 2 0333 -- Ucircumflex
char219 "
-:U 640,939,15,132,-47,82 2 0334 Udieresis
+:U 640,939,15,132,-47,82 2 0334 -- Udieresis
char220 "
-'Y 620,1019,0,189,-85,82 2 0335 Yacute
+'Y 620,1019,0,189,-85,82 2 0335 -- Yacute
char221 "
-TP 560,740,0,109,-22,82 2 0336 Thorn
+TP 560,740,0,109,-22,82 2 0336 -- Thorn
char222 "
-ss 600,755,18,79,-1,79 2 0337 germandbls
+ss 600,755,18,79,-1,79 2 0337 -- germandbls
char223 "
-`a 660,851,18,106,-23,82 2 0340 agrave
+`a 660,851,18,106,-23,82 2 0340 -- agrave
char224 "
-'a 660,849,18,106,-23,82 2 0341 aacute
+'a 660,849,18,106,-23,82 2 0341 -- aacute
char225 "
-^a 660,774,18,106,-23,82 2 0342 acircumflex
+^a 660,774,18,106,-23,82 2 0342 -- acircumflex
char226 "
-~a 660,767,18,106,-23,82 2 0343 atilde
+~a 660,767,18,106,-23,82 2 0343 -- atilde
char227 "
-:a 660,769,18,106,-23,82 2 0344 adieresis
+:a 660,769,18,106,-23,82 2 0344 -- adieresis
char228 "
-oa 660,834,18,106,-23,82 2 0345 aring
+oa 660,834,18,106,-23,82 2 0345 -- aring
char229 "
-ae 1080,574,18,75,-25,75 0 0346 ae
+ae 1080,574,18,75,-25,75 0 0346 -- ae
char230 "
-,c 640,574,251,89,-33,82 1 0347 ccedilla
+,c 640,574,251,89,-33,82 1 0347 -- ccedilla
char231 "
-`e 640,851,18,77,-27,77 2 0350 egrave
+`e 640,851,18,77,-27,77 2 0350 -- egrave
char232 "
-'e 640,849,18,77,-27,77 2 0351 eacute
+'e 640,849,18,77,-27,77 2 0351 -- eacute
char233 "
-^e 640,774,18,77,-27,77 2 0352 ecircumflex
+^e 640,774,18,77,-27,77 2 0352 -- ecircumflex
char234 "
-:e 640,769,18,77,-27,77 2 0353 edieresis
+:e 640,769,18,77,-27,77 2 0353 -- edieresis
char235 "
-`i 240,851,0,157,-3,82 2 0354 igrave
+`i 240,851,0,157,-3,82 2 0354 -- igrave
char236 "
-'i 240,849,0,253,-3,82 2 0355 iacute
+'i 240,849,0,253,-3,82 2 0355 -- iacute
char237 "
-^i 240,774,0,248,11,82 2 0356 icircumflex
+^i 240,774,0,248,11,82 2 0356 -- icircumflex
char238 "
-:i 240,769,0,245,-3,82 2 0357 idieresis
+:i 240,769,0,245,-3,82 2 0357 -- idieresis
char239 "
-Sd 640,754,18,109,-23,82 2 0360 eth
+Sd 640,754,18,109,-23,82 2 0360 -- eth
char240 "
-~n 600,767,0,74,-4,74 2 0361 ntilde
+~n 600,767,0,74,-4,74 2 0361 -- ntilde
char241 "
-`o 640,851,18,82,-21,82 2 0362 ograve
+`o 640,851,18,82,-21,82 2 0362 -- ograve
char242 "
-'o 640,849,18,82,-21,82 2 0363 oacute
+'o 640,849,18,82,-21,82 2 0363 -- oacute
char243 "
-^o 640,774,18,82,-21,82 2 0364 ocircumflex
+^o 640,774,18,82,-21,82 2 0364 -- ocircumflex
char244 "
-~o 640,767,18,82,-21,82 2 0365 otilde
+~o 640,767,18,82,-21,82 2 0365 -- otilde
char245 "
-:o 640,769,18,82,-21,82 2 0366 odieresis
+: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
+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
+`u 600,851,18,97,-37,82 2 0371 -- ugrave
char249 "
-'u 600,849,18,97,-37,82 2 0372 uacute
+'u 600,849,18,97,-37,82 2 0372 -- uacute
char250 "
-^u 600,774,18,97,-37,82 2 0373 ucircumflex
+^u 600,774,18,97,-37,82 2 0373 -- ucircumflex
char251 "
-:u 600,769,18,97,-37,82 2 0374 udieresis
+:u 600,769,18,97,-37,82 2 0374 -- udieresis
char252 "
-'y 580,849,185,144,-25,82 3 0375 yacute
+'y 580,849,185,144,-25,82 3 0375 -- yacute
char253 "
-Tp 660,740,185,76,37,76 3 0376 thorn
+Tp 660,740,185,76,37,76 3 0376 -- thorn
char254 "
-:y 580,769,185,144,-25,82 3 0377 ydieresis
+:y 580,769,185,144,-25,82 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/AI b/contrib/groff/devps/AI
index 686823706a30..be0e09950a19 100644
--- a/contrib/groff/devps/AI
+++ b/contrib/groff/devps/AI
@@ -10,6 +10,7 @@ A w -65
A v -70
A u -20
A ' -100
+A cq -100
A rq -100
A Y -92
A W -60
@@ -44,6 +45,7 @@ K e -20
K O -20
L y -23
L ' -130
+L cq -130
L rq -130
L Y -91
L W -67
@@ -139,6 +141,7 @@ b v -20
c y -20
c k -15
, ' -120
+, cq -120
, rq -120
e y -20
e w -20
@@ -167,6 +170,7 @@ o w -20
o v -30
p y -20
. ' -120
+. cq -120
. rq -120
lq ` -35
lq oq -35
@@ -178,12 +182,21 @@ 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
@@ -226,334 +239,337 @@ 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
+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
-# 554,740,0,116,-21,81 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 605,740,100,0,-205 2 0134 -- backslash
rs "
-] 351,753,179,11,69,11 2 0135 bracketright
+] 351,753,179,11,69,11 2 0135 -- bracketright
rB "
-a^ 502,764,0,94,-142,81 2 0136 circumflex
+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
+_ 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
+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
+ba 672,740,100,0,-230 2 0174 -- bar
| "
-rC 351,740,189,37,65,37 2 0175 braceright
+rC 351,740,189,37,65,37 2 0175 -- braceright
} "
-a~ 439,754,0,131,-129,81 2 0176 tilde
+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
+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
+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
+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
+ct 554,707,0,92,-65,81 0 0242 -- cent
char162 "
-Po 554,753,0,110,21,81 2 0243 sterling
+Po 554,753,0,110,21,81 2 0243 -- sterling
char163 "
-Cs 554,580,0,141,26,81 0 0244 currency
+Cs 554,580,0,141,26,81 0 0244 -- currency
char164 "
-Ye 554,740,0,183,-25,81 2 0245 yen
+Ye 554,740,0,183,-25,81 2 0245 -- yen
char165 "
-bb 672,740,100,0,-230 2 0246 brokenbar
+bb 672,740,100,0,-230 2 0246 -- brokenbar
char166 "
-sc 615,753,141,32,-68,32 2 0247 section
+sc 615,753,141,32,-68,32 2 0247 -- section
char167 "
-ad 369,765,0,118,-141,81 2 0250 dieresis
+ad 369,765,0,118,-141,81 2 0250 -- dieresis
char168 "
-co 747,752,12,133,-3,81 2 0251 copyright
+co 747,752,12,133,-3,81 2 0251 -- copyright
char169 "
-Of 369,753,0,175,-52,81 2 0252 ordfeminine
+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
+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
+\- 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
+a- 485,736,0,112,-147,81 0 0257 -- macron
char175 "
-de 400,709,0,101,-108,81 0 0260 degree
+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
+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
+S3 332,747,0,126,-48,81 2 0263 -- threesuperior
char179 "
-aa 375,786,0,119,-153,81 2 0264 acute
+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
+char181 608,547,184,70,4,70 0 0265 -- mu
+ps 564,740,110,174,-69,81 2 0266 -- paragraph
char182 "
-char183 277,316,0,8,-87,8 0 0267 periodcentered
-ac 324,0,222,0,-2 1 0270 cedilla
+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
+S1 332,740,0,53,-140,53 2 0271 -- onesuperior
char185 "
-Om 369,753,0,147,-66,81 2 0272 ordmasculine
+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
+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
+12 831,740,0,29,-114,29 2 0275 -- onehalf
char189 "
-34 831,747,0,44,-76,44 2 0276 threequarters
+34 831,747,0,44,-76,44 2 0276 -- threequarters
char190 "
-r? 591,548,205,0,-14 1 0277 questiondown
+r? 591,548,205,0,-14 1 0277 -- questiondown
char191 "
-`A 740,949,0,39,38,39 2 0300 Agrave
+`A 740,949,0,39,38,39 2 0300 -- Agrave
char192 "
-'A 740,949,0,39,38,39 2 0301 Aacute
+'A 740,949,0,39,38,39 2 0301 -- Aacute
char193 "
-^A 740,927,0,39,38,39 2 0302 Acircumflex
+^A 740,927,0,39,38,39 2 0302 -- Acircumflex
char194 "
-~A 740,917,0,39,38,39 2 0303 Atilde
+~A 740,917,0,39,38,39 2 0303 -- Atilde
char195 "
-:A 740,928,0,39,38,39 2 0304 Adieresis
+:A 740,928,0,39,38,39 2 0304 -- Adieresis
char196 "
-oA 740,955,0,39,38,39 2 0305 Aring
+oA 740,955,0,39,38,39 2 0305 -- Aring
char197 "
-AE 992,740,0,102,70,81 2 0306 AE
+AE 992,740,0,102,70,81 2 0306 -- AE
char198 "
-,C 813,752,222,107,-55,81 3 0307 Ccedilla
+,C 813,752,222,107,-55,81 3 0307 -- Ccedilla
char199 "
-`E 536,949,0,126,-20,81 2 0310 Egrave
+`E 536,949,0,126,-20,81 2 0310 -- Egrave
char200 "
-'E 536,949,0,126,-20,81 2 0311 Eacute
+'E 536,949,0,126,-20,81 2 0311 -- Eacute
char201 "
-^E 536,927,0,126,-20,81 2 0312 Ecircumflex
+^E 536,927,0,126,-20,81 2 0312 -- Ecircumflex
char202 "
-:E 536,928,0,126,-20,81 2 0313 Edieresis
+:E 536,928,0,126,-20,81 2 0313 -- Edieresis
char203 "
-`I 226,949,0,164,-26,81 2 0314 Igrave
+`I 226,949,0,164,-26,81 2 0314 -- Igrave
char204 "
-'I 226,949,0,264,-26,81 2 0315 Iacute
+'I 226,949,0,264,-26,81 2 0315 -- Iacute
char205 "
-^I 226,927,0,263,-26,81 2 0316 Icircumflex
+^I 226,927,0,263,-26,81 2 0316 -- Icircumflex
char206 "
-:I 226,928,0,220,-26,81 2 0317 Idieresis
+:I 226,928,0,220,-26,81 2 0317 -- Idieresis
char207 "
--D 790,740,0,73,-54,73 2 0320 Eth
+-D 790,740,0,73,-54,73 2 0320 -- Eth
char208 "
-~N 740,917,0,111,-25,81 2 0321 Ntilde
+~N 740,917,0,111,-25,81 2 0321 -- Ntilde
char209 "
-`O 869,949,13,82,-55,81 2 0322 Ograve
+`O 869,949,13,82,-55,81 2 0322 -- Ograve
char210 "
-'O 869,949,13,82,-55,81 2 0323 Oacute
+'O 869,949,13,82,-55,81 2 0323 -- Oacute
char211 "
-^O 869,927,13,82,-55,81 2 0324 Ocircumflex
+^O 869,927,13,82,-55,81 2 0324 -- Ocircumflex
char212 "
-~O 869,917,13,82,-55,81 2 0325 Otilde
+~O 869,917,13,82,-55,81 2 0325 -- Otilde
char213 "
-:O 869,928,13,82,-55,81 2 0326 Odieresis
+: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
+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
+`U 655,949,13,111,-68,81 2 0331 -- Ugrave
char217 "
-'U 655,949,13,111,-68,81 2 0332 Uacute
+'U 655,949,13,111,-68,81 2 0332 -- Uacute
char218 "
-^U 655,927,13,111,-68,81 2 0333 Ucircumflex
+^U 655,927,13,111,-68,81 2 0333 -- Ucircumflex
char219 "
-:U 655,928,13,111,-68,81 2 0334 Udieresis
+:U 655,928,13,111,-68,81 2 0334 -- Udieresis
char220 "
-'Y 592,949,0,187,-88,81 2 0335 Yacute
+'Y 592,949,0,187,-88,81 2 0335 -- Yacute
char221 "
-TP 592,740,0,79,-10,79 2 0336 Thorn
+TP 592,740,0,79,-10,79 2 0336 -- Thorn
char222 "
-ss 554,753,13,74,-11,74 2 0337 germandbls
+ss 554,753,13,74,-11,74 2 0337 -- germandbls
char223 "
-`a 683,786,13,89,-38,81 2 0340 agrave
+`a 683,786,13,89,-38,81 2 0340 -- agrave
char224 "
-'a 683,786,13,89,-38,81 2 0341 aacute
+'a 683,786,13,89,-38,81 2 0341 -- aacute
char225 "
-^a 683,764,13,89,-38,81 2 0342 acircumflex
+^a 683,764,13,89,-38,81 2 0342 -- acircumflex
char226 "
-~a 683,754,13,89,-38,81 2 0343 atilde
+~a 683,754,13,89,-38,81 2 0343 -- atilde
char227 "
-:a 683,765,13,89,-38,81 2 0344 adieresis
+:a 683,765,13,89,-38,81 2 0344 -- adieresis
char228 "
-oa 683,807,13,89,-38,81 2 0345 aring
+oa 683,807,13,89,-38,81 2 0345 -- aring
char229 "
-ae 1157,561,13,62,-30,62 0 0346 ae
+ae 1157,561,13,62,-30,62 0 0346 -- ae
char230 "
-,c 647,561,222,81,-37,81 1 0347 ccedilla
+,c 647,561,222,81,-37,81 1 0347 -- ccedilla
char231 "
-`e 650,786,13,64,-34,64 2 0350 egrave
+`e 650,786,13,64,-34,64 2 0350 -- egrave
char232 "
-'e 650,786,13,64,-34,64 2 0351 eacute
+'e 650,786,13,64,-34,64 2 0351 -- eacute
char233 "
-^e 650,764,13,64,-34,64 2 0352 ecircumflex
+^e 650,764,13,64,-34,64 2 0352 -- ecircumflex
char234 "
-:e 650,765,13,64,-34,64 2 0353 edieresis
+:e 650,765,13,64,-34,64 2 0353 -- edieresis
char235 "
-`i 200,786,0,146,-15,81 2 0354 igrave
+`i 200,786,0,146,-15,81 2 0354 -- igrave
char236 "
-'i 200,786,0,247,-15,81 2 0355 iacute
+'i 200,786,0,247,-15,81 2 0355 -- iacute
char237 "
-^i 200,764,0,245,9,81 2 0356 icircumflex
+^i 200,764,0,245,9,81 2 0356 -- icircumflex
char238 "
-:i 200,765,0,203,-15,81 2 0357 idieresis
+:i 200,765,0,203,-15,81 2 0357 -- idieresis
char239 "
-Sd 655,753,12,70,-38,70 2 0360 eth
+Sd 655,753,12,70,-38,70 2 0360 -- eth
char240 "
-~n 610,754,0,49,-15,49 2 0361 ntilde
+~n 610,754,0,49,-15,49 2 0361 -- ntilde
char241 "
-`o 655,786,13,64,-38,64 2 0362 ograve
+`o 655,786,13,64,-38,64 2 0362 -- ograve
char242 "
-'o 655,786,13,64,-38,64 2 0363 oacute
+'o 655,786,13,64,-38,64 2 0363 -- oacute
char243 "
-^o 655,764,13,64,-38,64 2 0364 ocircumflex
+^o 655,764,13,64,-38,64 2 0364 -- ocircumflex
char244 "
-~o 655,754,13,64,-38,64 2 0365 otilde
+~o 655,754,13,64,-38,64 2 0365 -- otilde
char245 "
-:o 655,765,13,64,-38,64 2 0366 odieresis
+: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
+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
+`u 608,786,13,84,-50,81 2 0371 -- ugrave
char249 "
-'u 608,786,13,84,-50,81 2 0372 uacute
+'u 608,786,13,84,-50,81 2 0372 -- uacute
char250 "
-^u 608,764,13,84,-50,81 2 0373 ucircumflex
+^u 608,764,13,84,-50,81 2 0373 -- ucircumflex
char251 "
-:u 608,765,13,84,-50,81 2 0374 udieresis
+:u 608,765,13,84,-50,81 2 0374 -- udieresis
char252 "
-'y 536,786,192,138,-47,81 3 0375 yacute
+'y 536,786,192,138,-47,81 3 0375 -- yacute
char253 "
-Tp 682,740,192,67,22,67 3 0376 thorn
+Tp 682,740,192,67,22,67 3 0376 -- thorn
char254 "
-:y 536,765,192,138,-47,81 3 0377 ydieresis
+:y 536,765,192,138,-47,81 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/AR b/contrib/groff/devps/AR
index 00fd6320b16b..9dff2dc08a3e 100644
--- a/contrib/groff/devps/AR
+++ b/contrib/groff/devps/AR
@@ -9,6 +9,7 @@ A w -65
A v -70
A u -20
A ' -100
+A cq -100
A rq -100
A Y -92
A W -60
@@ -43,6 +44,7 @@ K e -20
K O -20
L y -23
L ' -130
+L cq -130
L rq -130
L Y -91
L W -67
@@ -138,6 +140,7 @@ b v -20
c y -20
c k -15
, ' -120
+, cq -120
, rq -120
e y -20
e w -20
@@ -166,6 +169,7 @@ o w -20
o v -30
p y -20
. ' -120
+. cq -120
. rq -120
lq ` -35
lq oq -35
@@ -177,12 +181,21 @@ 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
@@ -225,334 +238,337 @@ 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
+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
-# 554,740 2 0043 numbersign
+! 295,740 2 0041 -- exclam
+" 309,740 2 0042 -- quotedbl
+dq "
+# 554,740 2 0043 -- numbersign
sh "
-$ 554,811,70 2 0044 dollar
+$ 554,811,70 2 0044 -- dollar
Do "
-% 775,751,13 2 0045 percent
-& 757,753,12 2 0046 ampersand
-' 351,740 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 605,740,100 2 0134 -- backslash
rs "
-] 351,753,179 2 0135 bracketright
+] 351,753,179 2 0135 -- bracketright
rB "
-a^ 502,764 2 0136 circumflex
+a^ 502,764 2 0136 -- circumflex
^ "
-_ 500,0,125 0 0137 underscore
-` 351,740 2 0140 quoteleft
+_ 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
+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
+ba 672,740,100 2 0174 -- bar
| "
-rC 351,740,189 2 0175 braceright
+rC 351,740,189 2 0175 -- braceright
} "
-a~ 439,754 2 0176 tilde
+a~ 439,754 2 0176 -- tilde
~ "
-bq 354,126,68 0 0200 quotesinglbase
-Fo 425,481 0 0201 guillemotleft
+bq 354,126,68 0 0200 -- quotesinglbase
+Fo 425,481 0 0201 -- guillemotleft
char171 "
-Fc 425,481 0 0202 guillemotright
+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
+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
+ct 554,707 0 0242 -- cent
char162 "
-Po 554,753 2 0243 sterling
+Po 554,753 2 0243 -- sterling
char163 "
-Cs 554,580 0 0244 currency
+Cs 554,580 0 0244 -- currency
char164 "
-Ye 554,740 2 0245 yen
+Ye 554,740 2 0245 -- yen
char165 "
-bb 672,740,100 2 0246 brokenbar
+bb 672,740,100 2 0246 -- brokenbar
char166 "
-sc 615,753,141 2 0247 section
+sc 615,753,141 2 0247 -- section
char167 "
-ad 369,765 2 0250 dieresis
+ad 369,765 2 0250 -- dieresis
char168 "
-co 747,752,12 2 0251 copyright
+co 747,752,12 2 0251 -- copyright
char169 "
-Of 369,753 2 0252 ordfeminine
+Of 369,753 2 0252 -- ordfeminine
char170 "
-fo 251,481 0 0253 guilsinglleft
-no 606,388 0 0254 logicalnot
+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
+\- 606,287 0 0255 -- minus
+rg 747,752,12 2 0256 -- registered
char174 "
-a- 485,736 0 0257 macron
+a- 485,736 0 0257 -- macron
char175 "
-de 400,709 0 0260 degree
+de 400,709 0 0260 -- degree
char176 "
-char177 606,518,24 0 0261 plusminus
-S2 332,747 2 0262 twosuperior
+char177 606,518,24 0 0261 -- plusminus
+S2 332,747 2 0262 -- twosuperior
char178 "
-S3 332,747 2 0263 threesuperior
+S3 332,747 2 0263 -- threesuperior
char179 "
-aa 375,786 2 0264 acute
+aa 375,786 2 0264 -- acute
char180 "
-char181 608,547,184 0 0265 mu
-ps 564,740,110 2 0266 paragraph
+char181 608,547,184 0 0265 -- mu
+ps 564,740,110 2 0266 -- paragraph
char182 "
-char183 277,316 0 0267 periodcentered
-ac 324,0,222 1 0270 cedilla
+pc 277,316 0 0267 -- periodcentered
+char183 "
+ac 324,0,222 1 0270 -- cedilla
char184 "
-S1 332,740 2 0271 onesuperior
+S1 332,740 2 0271 -- onesuperior
char185 "
-Om 369,753 2 0272 ordmasculine
+Om 369,753 2 0272 -- ordmasculine
char186 "
-fc 251,481 0 0273 guilsinglright
-14 831,740 2 0274 onequarter
+fc 251,481 0 0273 -- guilsinglright
+14 831,740 2 0274 -- onequarter
char188 "
-12 831,740 2 0275 onehalf
+12 831,740 2 0275 -- onehalf
char189 "
-34 831,747 2 0276 threequarters
+34 831,747 2 0276 -- threequarters
char190 "
-r? 591,548,205 1 0277 questiondown
+r? 591,548,205 1 0277 -- questiondown
char191 "
-`A 740,949 2 0300 Agrave
+`A 740,949 2 0300 -- Agrave
char192 "
-'A 740,949 2 0301 Aacute
+'A 740,949 2 0301 -- Aacute
char193 "
-^A 740,927 2 0302 Acircumflex
+^A 740,927 2 0302 -- Acircumflex
char194 "
-~A 740,917 2 0303 Atilde
+~A 740,917 2 0303 -- Atilde
char195 "
-:A 740,928 2 0304 Adieresis
+:A 740,928 2 0304 -- Adieresis
char196 "
-oA 740,955 2 0305 Aring
+oA 740,955 2 0305 -- Aring
char197 "
-AE 992,740 2 0306 AE
+AE 992,740 2 0306 -- AE
char198 "
-,C 813,752,222 3 0307 Ccedilla
+,C 813,752,222 3 0307 -- Ccedilla
char199 "
-`E 536,949 2 0310 Egrave
+`E 536,949 2 0310 -- Egrave
char200 "
-'E 536,949 2 0311 Eacute
+'E 536,949 2 0311 -- Eacute
char201 "
-^E 536,927 2 0312 Ecircumflex
+^E 536,927 2 0312 -- Ecircumflex
char202 "
-:E 536,928 2 0313 Edieresis
+:E 536,928 2 0313 -- Edieresis
char203 "
-`I 226,949 2 0314 Igrave
+`I 226,949 2 0314 -- Igrave
char204 "
-'I 226,949 2 0315 Iacute
+'I 226,949 2 0315 -- Iacute
char205 "
-^I 226,927 2 0316 Icircumflex
+^I 226,927 2 0316 -- Icircumflex
char206 "
-:I 226,928 2 0317 Idieresis
+:I 226,928 2 0317 -- Idieresis
char207 "
--D 790,740 2 0320 Eth
+-D 790,740 2 0320 -- Eth
char208 "
-~N 740,917 2 0321 Ntilde
+~N 740,917 2 0321 -- Ntilde
char209 "
-`O 869,949,13 2 0322 Ograve
+`O 869,949,13 2 0322 -- Ograve
char210 "
-'O 869,949,13 2 0323 Oacute
+'O 869,949,13 2 0323 -- Oacute
char211 "
-^O 869,927,13 2 0324 Ocircumflex
+^O 869,927,13 2 0324 -- Ocircumflex
char212 "
-~O 869,917,13 2 0325 Otilde
+~O 869,917,13 2 0325 -- Otilde
char213 "
-:O 869,928,13 2 0326 Odieresis
+:O 869,928,13 2 0326 -- Odieresis
char214 "
-char215 606,482 0 0327 multiply
-/O 868,819,83 2 0330 Oslash
+char215 606,482 0 0327 -- multiply
+/O 868,819,83 2 0330 -- Oslash
char216 "
-`U 655,949,13 2 0331 Ugrave
+`U 655,949,13 2 0331 -- Ugrave
char217 "
-'U 655,949,13 2 0332 Uacute
+'U 655,949,13 2 0332 -- Uacute
char218 "
-^U 655,927,13 2 0333 Ucircumflex
+^U 655,927,13 2 0333 -- Ucircumflex
char219 "
-:U 655,928,13 2 0334 Udieresis
+:U 655,928,13 2 0334 -- Udieresis
char220 "
-'Y 592,949 2 0335 Yacute
+'Y 592,949 2 0335 -- Yacute
char221 "
-TP 592,740 2 0336 Thorn
+TP 592,740 2 0336 -- Thorn
char222 "
-ss 554,753,13 2 0337 germandbls
+ss 554,753,13 2 0337 -- germandbls
char223 "
-`a 683,786,13 2 0340 agrave
+`a 683,786,13 2 0340 -- agrave
char224 "
-'a 683,786,13 2 0341 aacute
+'a 683,786,13 2 0341 -- aacute
char225 "
-^a 683,764,13 2 0342 acircumflex
+^a 683,764,13 2 0342 -- acircumflex
char226 "
-~a 683,754,13 2 0343 atilde
+~a 683,754,13 2 0343 -- atilde
char227 "
-:a 683,765,13 2 0344 adieresis
+:a 683,765,13 2 0344 -- adieresis
char228 "
-oa 683,807,13 2 0345 aring
+oa 683,807,13 2 0345 -- aring
char229 "
-ae 1157,561,13 0 0346 ae
+ae 1157,561,13 0 0346 -- ae
char230 "
-,c 647,561,222 1 0347 ccedilla
+,c 647,561,222 1 0347 -- ccedilla
char231 "
-`e 650,786,13 2 0350 egrave
+`e 650,786,13 2 0350 -- egrave
char232 "
-'e 650,786,13 2 0351 eacute
+'e 650,786,13 2 0351 -- eacute
char233 "
-^e 650,764,13 2 0352 ecircumflex
+^e 650,764,13 2 0352 -- ecircumflex
char234 "
-:e 650,765,13 2 0353 edieresis
+:e 650,765,13 2 0353 -- edieresis
char235 "
-`i 200,786 2 0354 igrave
+`i 200,786 2 0354 -- igrave
char236 "
-'i 200,786 2 0355 iacute
+'i 200,786 2 0355 -- iacute
char237 "
-^i 200,764 2 0356 icircumflex
+^i 200,764 2 0356 -- icircumflex
char238 "
-:i 200,765 2 0357 idieresis
+:i 200,765 2 0357 -- idieresis
char239 "
-Sd 655,753,12 2 0360 eth
+Sd 655,753,12 2 0360 -- eth
char240 "
-~n 610,754 2 0361 ntilde
+~n 610,754 2 0361 -- ntilde
char241 "
-`o 655,786,13 2 0362 ograve
+`o 655,786,13 2 0362 -- ograve
char242 "
-'o 655,786,13 2 0363 oacute
+'o 655,786,13 2 0363 -- oacute
char243 "
-^o 655,764,13 2 0364 ocircumflex
+^o 655,764,13 2 0364 -- ocircumflex
char244 "
-~o 655,754,13 2 0365 otilde
+~o 655,754,13 2 0365 -- otilde
char245 "
-:o 655,765,13 2 0366 odieresis
+:o 655,765,13 2 0366 -- odieresis
char246 "
-char247 606,519,13 0 0367 divide
-/o 653,614,64 0 0370 oslash
+char247 606,519,13 0 0367 -- divide
+/o 653,614,64 0 0370 -- oslash
char248 "
-`u 608,786,13 2 0371 ugrave
+`u 608,786,13 2 0371 -- ugrave
char249 "
-'u 608,786,13 2 0372 uacute
+'u 608,786,13 2 0372 -- uacute
char250 "
-^u 608,764,13 2 0373 ucircumflex
+^u 608,764,13 2 0373 -- ucircumflex
char251 "
-:u 608,765,13 2 0374 udieresis
+:u 608,765,13 2 0374 -- udieresis
char252 "
-'y 536,786,192 3 0375 yacute
+'y 536,786,192 3 0375 -- yacute
char253 "
-Tp 682,740,192 3 0376 thorn
+Tp 682,740,192 3 0376 -- thorn
char254 "
-:y 536,765,192 3 0377 ydieresis
+:y 536,765,192 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/BMB b/contrib/groff/devps/BMB
index 270f7db5623f..186ec7bb42e4 100644
--- a/contrib/groff/devps/BMB
+++ b/contrib/groff/devps/BMB
@@ -105,334 +105,337 @@ 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
+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
-# 660,681 2 0043 numbersign
+! 360,698,8 2 0041 -- exclam
+" 420,698 2 0042 -- quotedbl
+dq "
+# 660,681 2 0043 -- numbersign
sh "
-$ 660,805,119 2 0044 dollar
+$ 660,805,119 2 0044 -- dollar
Do "
-% 940,698,8 2 0045 percent
-& 800,698,17 2 0046 ampersand
-' 320,698 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 600,725 2 0134 -- backslash
rs "
-] 300,725,138 2 0135 bracketright
+] 300,725,138 2 0135 -- bracketright
rB "
-a^ 500,731 2 0136 circumflex
+a^ 500,731 2 0136 -- circumflex
^ "
-_ 500,0,155 0 0137 underscore
-` 320,698 2 0140 quoteleft
+_ 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
+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,725 2 0174 bar
+ba 600,750,250 3 0174 -- bar
| "
-rC 320,726,139 2 0175 braceright
+rC 320,725,140 2 0175 -- braceright
} "
-a~ 480,691 2 0176 tilde
+a~ 480,691 2 0176 -- tilde
~ "
-bq 320,144,114 0 0200 quotesinglbase
-Fo 400,457 0 0201 guillemotleft
+bq 320,144,114 0 0200 -- quotesinglbase
+Fo 400,457 0 0201 -- guillemotleft
char171 "
-Fc 400,457 0 0202 guillemotright
+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
+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
+ct 660,674 2 0242 -- cent
char162 "
-Po 660,698,17 2 0243 sterling
+Po 660,698,17 2 0243 -- sterling
char163 "
-Cs 660,593 0 0244 currency
+Cs 660,593 0 0244 -- currency
char164 "
-Ye 660,681 2 0245 yen
+Ye 660,681 2 0245 -- yen
char165 "
-bb 600,725 2 0246 brokenbar
+bb 600,675,175 2 0246 -- brokenbar
char166 "
-sc 600,698,153 2 0247 section
+sc 600,698,153 2 0247 -- section
char167 "
-ad 500,698 2 0250 dieresis
+ad 500,698 2 0250 -- dieresis
char168 "
-co 740,698,17 2 0251 copyright
+co 740,698,17 2 0251 -- copyright
char169 "
-Of 400,698 2 0252 ordfeminine
+Of 400,698 2 0252 -- ordfeminine
char170 "
-fo 220,457 0 0253 guilsinglleft
-no 600,421 0 0254 logicalnot
+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
+\- 600,323 0 0255 -- minus
+rg 740,698,17 2 0256 -- registered
char174 "
-a- 460,663 2 0257 macron
+a- 460,663 2 0257 -- macron
char175 "
-de 400,698 2 0260 degree
+de 400,698 2 0260 -- degree
char176 "
-char177 600,514 0 0261 plusminus
-S2 396,698 2 0262 twosuperior
+char177 600,514 0 0261 -- plusminus
+S2 396,698 2 0262 -- twosuperior
char178 "
-S3 396,698 2 0263 threesuperior
+S3 396,698 2 0263 -- threesuperior
char179 "
-aa 400,731 2 0264 acute
+aa 400,731 2 0264 -- acute
char180 "
-char181 660,502,221 1 0265 mu
-ps 800,681,101 2 0266 paragraph
+char181 660,502,221 1 0265 -- mu
+ps 800,681 2 0266 -- paragraph
char182 "
-char183 340,355 0 0267 periodcentered
-ac 360,0,213 1 0270 cedilla
+pc 340,355 0 0267 -- periodcentered
+char183 "
+ac 360,0,213 1 0270 -- cedilla
char184 "
-S1 396,687 2 0271 onesuperior
+S1 396,687 2 0271 -- onesuperior
char185 "
-Om 400,698 2 0272 ordmasculine
+Om 400,698 2 0272 -- ordmasculine
char186 "
-fc 220,457 0 0273 guilsinglright
-14 990,681 2 0274 onequarter
+fc 220,457 0 0273 -- guilsinglright
+14 990,681 2 0274 -- onequarter
char188 "
-12 990,681 2 0275 onehalf
+12 990,681 2 0275 -- onehalf
char189 "
-34 990,692 2 0276 threequarters
+34 990,692 2 0276 -- threequarters
char190 "
-r? 660,515,191 0 0277 questiondown
+r? 660,515,191 0 0277 -- questiondown
char191 "
-`A 720,909 2 0300 Agrave
+`A 720,909 2 0300 -- Agrave
char192 "
-'A 720,910 2 0301 Aacute
+'A 720,910 2 0301 -- Aacute
char193 "
-^A 720,910 2 0302 Acircumflex
+^A 720,910 2 0302 -- Acircumflex
char194 "
-~A 720,870 2 0303 Atilde
+~A 720,870 2 0303 -- Atilde
char195 "
-:A 720,877 2 0304 Adieresis
+:A 720,877 2 0304 -- Adieresis
char196 "
-oA 720,934 2 0305 Aring
+oA 720,934 2 0305 -- Aring
char197 "
-AE 1140,681 2 0306 AE
+AE 1140,681 2 0306 -- AE
char198 "
-,C 740,698,213 3 0307 Ccedilla
+,C 740,698,213 3 0307 -- Ccedilla
char199 "
-`E 720,909 2 0310 Egrave
+`E 720,909 2 0310 -- Egrave
char200 "
-'E 720,910 2 0311 Eacute
+'E 720,910 2 0311 -- Eacute
char201 "
-^E 720,910 2 0312 Ecircumflex
+^E 720,910 2 0312 -- Ecircumflex
char202 "
-:E 720,877 2 0313 Edieresis
+:E 720,877 2 0313 -- Edieresis
char203 "
-`I 400,909 2 0314 Igrave
+`I 400,909 2 0314 -- Igrave
char204 "
-'I 400,910 2 0315 Iacute
+'I 400,910 2 0315 -- Iacute
char205 "
-^I 400,910 2 0316 Icircumflex
+^I 400,910 2 0316 -- Icircumflex
char206 "
-:I 400,877 2 0317 Idieresis
+:I 400,877 2 0317 -- Idieresis
char207 "
--D 780,681 2 0320 Eth
+-D 780,681 2 0320 -- Eth
char208 "
-~N 740,870 2 0321 Ntilde
+~N 740,870 2 0321 -- Ntilde
char209 "
-`O 800,909,17 2 0322 Ograve
+`O 800,909,17 2 0322 -- Ograve
char210 "
-'O 800,910,17 2 0323 Oacute
+'O 800,910,17 2 0323 -- Oacute
char211 "
-^O 800,910,17 2 0324 Ocircumflex
+^O 800,910,17 2 0324 -- Ocircumflex
char212 "
-~O 800,870,17 2 0325 Otilde
+~O 800,870,17 2 0325 -- Otilde
char213 "
-:O 800,877,17 2 0326 Odieresis
+:O 800,877,17 2 0326 -- Odieresis
char214 "
-char215 600,514 0 0327 multiply
-/O 800,781,110 2 0330 Oslash
+char215 600,514 0 0327 -- multiply
+/O 800,781,110 2 0330 -- Oslash
char216 "
-`U 740,909,17 2 0331 Ugrave
+`U 740,909,17 2 0331 -- Ugrave
char217 "
-'U 740,910,17 2 0332 Uacute
+'U 740,910,17 2 0332 -- Uacute
char218 "
-^U 740,910,17 2 0333 Ucircumflex
+^U 740,910,17 2 0333 -- Ucircumflex
char219 "
-:U 740,877,17 2 0334 Udieresis
+:U 740,877,17 2 0334 -- Udieresis
char220 "
-'Y 700,910 2 0335 Yacute
+'Y 700,910 2 0335 -- Yacute
char221 "
-TP 660,681 2 0336 Thorn
+TP 660,681 2 0336 -- Thorn
char222 "
-ss 660,699,91 2 0337 germandbls
+ss 660,699,91 2 0337 -- germandbls
char223 "
-`a 580,730,8 2 0340 agrave
+`a 580,730,8 2 0340 -- agrave
char224 "
-'a 580,731,8 2 0341 aacute
+'a 580,731,8 2 0341 -- aacute
char225 "
-^a 580,731,8 2 0342 acircumflex
+^a 580,731,8 2 0342 -- acircumflex
char226 "
-~a 580,691,8 2 0343 atilde
+~a 580,691,8 2 0343 -- atilde
char227 "
-:a 580,698,8 2 0344 adieresis
+:a 580,698,8 2 0344 -- adieresis
char228 "
-oa 580,755,8 2 0345 aring
+oa 580,755,8 2 0345 -- aring
char229 "
-ae 880,515,8 0 0346 ae
+ae 880,515,8 0 0346 -- ae
char230 "
-,c 580,515,213 1 0347 ccedilla
+,c 580,515,213 1 0347 -- ccedilla
char231 "
-`e 580,730,8 2 0350 egrave
+`e 580,730,8 2 0350 -- egrave
char232 "
-'e 580,731,8 2 0351 eacute
+'e 580,731,8 2 0351 -- eacute
char233 "
-^e 580,731,8 2 0352 ecircumflex
+^e 580,731,8 2 0352 -- ecircumflex
char234 "
-:e 580,698,8 2 0353 edieresis
+:e 580,698,8 2 0353 -- edieresis
char235 "
-`i 360,730 2 0354 igrave
+`i 360,730 2 0354 -- igrave
char236 "
-'i 360,731 2 0355 iacute
+'i 360,731 2 0355 -- iacute
char237 "
-^i 360,731 2 0356 icircumflex
+^i 360,731 2 0356 -- icircumflex
char238 "
-:i 360,698 2 0357 idieresis
+:i 360,698 2 0357 -- idieresis
char239 "
-Sd 620,741,8 2 0360 eth
+Sd 620,741,8 2 0360 -- eth
char240 "
-~n 680,691 2 0361 ntilde
+~n 680,691 2 0361 -- ntilde
char241 "
-`o 620,730,8 2 0362 ograve
+`o 620,730,8 2 0362 -- ograve
char242 "
-'o 620,731,8 2 0363 oacute
+'o 620,731,8 2 0363 -- oacute
char243 "
-^o 620,731,8 2 0364 ocircumflex
+^o 620,731,8 2 0364 -- ocircumflex
char244 "
-~o 620,691,8 2 0365 otilde
+~o 620,691,8 2 0365 -- otilde
char245 "
-:o 620,698,8 2 0366 odieresis
+:o 620,698,8 2 0366 -- odieresis
char246 "
-char247 600,521 0 0367 divide
-/o 620,551,40 0 0370 oslash
+char247 600,521 0 0367 -- divide
+/o 620,551,40 0 0370 -- oslash
char248 "
-`u 660,730,8 2 0371 ugrave
+`u 660,730,8 2 0371 -- ugrave
char249 "
-'u 660,731,8 2 0372 uacute
+'u 660,731,8 2 0372 -- uacute
char250 "
-^u 660,731,8 2 0373 ucircumflex
+^u 660,731,8 2 0373 -- ucircumflex
char251 "
-:u 660,698,8 2 0374 udieresis
+:u 660,698,8 2 0374 -- udieresis
char252 "
-'y 620,731,221 3 0375 yacute
+'y 620,731,221 3 0375 -- yacute
char253 "
-Tp 640,725,212 3 0376 thorn
+Tp 640,725,212 3 0376 -- thorn
char254 "
-:y 620,698,221 3 0377 ydieresis
+:y 620,698,221 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/BMBI b/contrib/groff/devps/BMBI
index 0670451a9a50..43d2bdd9628b 100644
--- a/contrib/groff/devps/BMBI
+++ b/contrib/groff/devps/BMBI
@@ -108,334 +108,337 @@ 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
+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
-# 680,681,0,19,-107,19 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 580,741,0,45,-23,45 2 0134 -- backslash
rs "
-] 260,741,118,137,68,73 2 0135 bracketright
+] 260,741,118,137,68,73 2 0135 -- bracketright
rB "
-a^ 480,749,0,93,-133,73 2 0136 circumflex
+a^ 480,749,0,93,-133,73 2 0136 -- circumflex
^ "
-_ 500,0,155,50,50,50 0 0137 underscore
-` 320,698,0,63,-105,63 2 0140 quoteleft
+_ 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,159,-3,73 2 0173 braceleft
+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,741,0,0,-253 2 0174 bar
+ba 620,750,250,0,-253 3 0174 -- bar
| "
-rC 300,742,123,102,54,73 2 0175 braceright
+rC 300,751,114,106,58,73 2 0175 -- braceright
} "
-a~ 480,709,0,103,-128,73 2 0176 tilde
+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
+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
+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
+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
+ct 680,718,0,0,-111 2 0242 -- cent
char162 "
-Po 680,698,17,157,50,73 2 0243 sterling
+Po 680,698,17,157,50,73 2 0243 -- sterling
char163 "
-Cs 680,571,0,7,-98,7 0 0244 currency
+Cs 680,571,0,7,-98,7 0 0244 -- currency
char164 "
-Ye 680,681,0,152,-42,73 2 0245 yen
+Ye 680,681,0,152,-42,73 2 0245 -- yen
char165 "
-bb 620,741,0,0,-253 2 0246 brokenbar
+bb 620,675,175,0,-253 2 0246 -- brokenbar
char166 "
-sc 620,698,137,68,4,68 2 0247 section
+sc 620,698,137,68,4,68 2 0247 -- section
char167 "
-ad 520,734,0,99,-130,73 2 0250 dieresis
+ad 520,734,0,99,-130,73 2 0250 -- dieresis
char168 "
-co 780,698,17,53,-33,53 2 0251 copyright
+co 780,698,17,53,-33,53 2 0251 -- copyright
char169 "
-Of 440,685,0,105,-5,73 2 0252 ordfeminine
+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
+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
+\- 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
+a- 480,691,0,101,-127,73 2 0257 -- macron
char175 "
-de 400,698,0,80,-80,73 2 0260 degree
+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
+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
+S3 408,698,0,125,-36,73 2 0263 -- threesuperior
char179 "
-aa 340,771,0,117,-126,73 2 0264 acute
+aa 340,771,0,117,-126,73 2 0264 -- acute
char180 "
-char181 680,507,213,90,-4,73 1 0265 mu
-ps 680,681,204,96,-20,73 2 0266 paragraph
+char181 680,507,213,90,-4,73 1 0265 -- mu
+ps 680,681,0,85,-87,73 2 0266 -- paragraph
char182 "
-char183 340,358,0,26,-76,26 0 0267 periodcentered
-ac 360,0,220,0,-18 1 0270 cedilla
+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
+S1 408,688,0,48,-68,48 2 0271 -- onesuperior
char185 "
-Om 440,685,0,77,3,73 2 0272 ordmasculine
+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
+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
+12 1020,681,0,66,-68,66 2 0275 -- onehalf
char189 "
-34 1020,691,0,84,-36,73 2 0276 threequarters
+34 1020,691,0,84,-36,73 2 0276 -- threequarters
char190 "
-r? 620,515,189,36,-33,36 0 0277 questiondown
+r? 620,515,189,36,-33,36 0 0277 -- questiondown
char191 "
-`A 720,937,0,99,77,73 2 0300 Agrave
+`A 720,937,0,99,77,73 2 0300 -- Agrave
char192 "
-'A 720,937,0,99,77,73 2 0301 Aacute
+'A 720,937,0,99,77,73 2 0301 -- Aacute
char193 "
-^A 720,915,0,99,77,73 2 0302 Acircumflex
+^A 720,915,0,99,77,73 2 0302 -- Acircumflex
char194 "
-~A 720,875,0,99,77,73 2 0303 Atilde
+~A 720,875,0,99,77,73 2 0303 -- Atilde
char195 "
-:A 720,900,0,99,77,73 2 0304 Adieresis
+:A 720,900,0,99,77,73 2 0304 -- Adieresis
char196 "
-oA 720,941,0,99,77,73 2 0305 Aring
+oA 720,941,0,99,77,73 2 0305 -- Aring
char197 "
-AE 1140,681,0,117,77,73 2 0306 AE
+AE 1140,681,0,117,77,73 2 0306 -- AE
char198 "
-,C 700,698,220,104,-28,73 3 0307 Ccedilla
+,C 700,698,220,104,-28,73 3 0307 -- Ccedilla
char199 "
-`E 720,937,0,107,36,73 2 0310 Egrave
+`E 720,937,0,107,36,73 2 0310 -- Egrave
char200 "
-'E 720,937,0,107,36,73 2 0311 Eacute
+'E 720,937,0,107,36,73 2 0311 -- Eacute
char201 "
-^E 720,915,0,107,36,73 2 0312 Ecircumflex
+^E 720,915,0,107,36,73 2 0312 -- Ecircumflex
char202 "
-:E 720,900,0,107,36,73 2 0313 Edieresis
+:E 720,900,0,107,36,73 2 0313 -- Edieresis
char203 "
-`I 380,937,0,155,36,73 2 0314 Igrave
+`I 380,937,0,155,36,73 2 0314 -- Igrave
char204 "
-'I 380,937,0,155,36,73 2 0315 Iacute
+'I 380,937,0,155,36,73 2 0315 -- Iacute
char205 "
-^I 380,915,0,163,36,73 2 0316 Icircumflex
+^I 380,915,0,163,36,73 2 0316 -- Icircumflex
char206 "
-:I 380,900,0,169,36,73 2 0317 Idieresis
+:I 380,900,0,169,36,73 2 0317 -- Idieresis
char207 "
--D 760,681,0,95,36,73 2 0320 Eth
+-D 760,681,0,95,36,73 2 0320 -- Eth
char208 "
-~N 740,875,0,155,36,73 2 0321 Ntilde
+~N 740,875,0,155,36,73 2 0321 -- Ntilde
char209 "
-`O 760,937,17,96,-28,73 2 0322 Ograve
+`O 760,937,17,96,-28,73 2 0322 -- Ograve
char210 "
-'O 760,937,17,96,-28,73 2 0323 Oacute
+'O 760,937,17,96,-28,73 2 0323 -- Oacute
char211 "
-^O 760,915,17,96,-28,73 2 0324 Ocircumflex
+^O 760,915,17,96,-28,73 2 0324 -- Ocircumflex
char212 "
-~O 760,875,17,96,-28,73 2 0325 Otilde
+~O 760,875,17,96,-28,73 2 0325 -- Otilde
char213 "
-:O 760,900,17,96,-28,73 2 0326 Odieresis
+: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
+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
+`U 740,937,17,165,-62,73 2 0331 -- Ugrave
char217 "
-'U 740,937,17,165,-62,73 2 0332 Uacute
+'U 740,937,17,165,-62,73 2 0332 -- Uacute
char218 "
-^U 740,915,17,165,-62,73 2 0333 Ucircumflex
+^U 740,915,17,165,-62,73 2 0333 -- Ucircumflex
char219 "
-:U 740,900,17,165,-62,73 2 0334 Udieresis
+:U 740,900,17,165,-62,73 2 0334 -- Udieresis
char220 "
-'Y 660,937,0,207,-22,73 2 0335 Yacute
+'Y 660,937,0,207,-22,73 2 0335 -- Yacute
char221 "
-TP 640,681,0,111,56,73 2 0336 Thorn
+TP 640,681,0,111,56,73 2 0336 -- Thorn
char222 "
-ss 660,741,213,92,281,73 3 0337 germandbls
+ss 660,741,213,92,281,73 3 0337 -- germandbls
char223 "
-`a 680,771,8,105,-34,73 2 0340 agrave
+`a 680,771,8,105,-34,73 2 0340 -- agrave
char224 "
-'a 680,771,8,105,-34,73 2 0341 aacute
+'a 680,771,8,105,-34,73 2 0341 -- aacute
char225 "
-^a 680,749,8,105,-34,73 2 0342 acircumflex
+^a 680,749,8,105,-34,73 2 0342 -- acircumflex
char226 "
-~a 680,709,8,105,-34,73 2 0343 atilde
+~a 680,709,8,105,-34,73 2 0343 -- atilde
char227 "
-:a 680,734,8,105,-34,73 2 0344 adieresis
+:a 680,734,8,105,-34,73 2 0344 -- adieresis
char228 "
-oa 680,775,8,105,-34,73 2 0345 aring
+oa 680,775,8,105,-34,73 2 0345 -- aring
char229 "
-ae 880,515,8,83,11,73 0 0346 ae
+ae 880,515,8,83,11,73 0 0346 -- ae
char230 "
-,c 560,515,220,87,-8,73 1 0347 ccedilla
+,c 560,515,220,87,-8,73 1 0347 -- ccedilla
char231 "
-`e 560,771,8,86,-9,73 2 0350 egrave
+`e 560,771,8,86,-9,73 2 0350 -- egrave
char232 "
-'e 560,771,8,86,-9,73 2 0351 eacute
+'e 560,771,8,86,-9,73 2 0351 -- eacute
char233 "
-^e 560,749,8,86,-9,73 2 0352 ecircumflex
+^e 560,749,8,86,-9,73 2 0352 -- ecircumflex
char234 "
-:e 560,734,8,86,-9,73 2 0353 edieresis
+:e 560,734,8,86,-9,73 2 0353 -- edieresis
char235 "
-`i 380,771,8,94,-33,73 2 0354 igrave
+`i 380,771,8,94,-33,73 2 0354 -- igrave
char236 "
-'i 380,771,8,90,-33,73 2 0355 iacute
+'i 380,771,8,90,-33,73 2 0355 -- iacute
char237 "
-^i 380,749,8,103,-33,73 2 0356 icircumflex
+^i 380,749,8,103,-33,73 2 0356 -- icircumflex
char238 "
-:i 380,734,8,149,-33,73 2 0357 idieresis
+:i 380,734,8,149,-33,73 2 0357 -- idieresis
char239 "
-Sd 600,741,8,112,-9,73 2 0360 eth
+Sd 600,741,8,112,-9,73 2 0360 -- eth
char240 "
-~n 680,709,8,85,-33,73 2 0361 ntilde
+~n 680,709,8,85,-33,73 2 0361 -- ntilde
char241 "
-`o 600,771,8,77,-9,73 2 0362 ograve
+`o 600,771,8,77,-9,73 2 0362 -- ograve
char242 "
-'o 600,771,8,77,-9,73 2 0363 oacute
+'o 600,771,8,77,-9,73 2 0363 -- oacute
char243 "
-^o 600,749,8,77,-9,73 2 0364 ocircumflex
+^o 600,749,8,77,-9,73 2 0364 -- ocircumflex
char244 "
-~o 600,709,8,77,-9,73 2 0365 otilde
+~o 600,709,8,77,-9,73 2 0365 -- otilde
char245 "
-:o 600,734,8,77,-9,73 2 0366 odieresis
+: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
+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
+`u 680,771,8,90,-33,73 2 0371 -- ugrave
char249 "
-'u 680,771,8,90,-33,73 2 0372 uacute
+'u 680,771,8,90,-33,73 2 0372 -- uacute
char250 "
-^u 680,749,8,90,-33,73 2 0373 ucircumflex
+^u 680,749,8,90,-33,73 2 0373 -- ucircumflex
char251 "
-:u 680,734,8,90,-33,73 2 0374 udieresis
+:u 680,734,8,90,-33,73 2 0374 -- udieresis
char252 "
-'y 600,771,213,92,25,73 3 0375 yacute
+'y 600,771,213,92,25,73 3 0375 -- yacute
char253 "
-Tp 660,732,213,72,74,72 3 0376 thorn
+Tp 660,732,213,72,74,72 3 0376 -- thorn
char254 "
-:y 600,734,213,92,25,73 3 0377 ydieresis
+:y 600,734,213,92,25,73 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/BMI b/contrib/groff/devps/BMI
index 7eaa3f1f6b34..9b90a6592168 100644
--- a/contrib/groff/devps/BMI
+++ b/contrib/groff/devps/BMI
@@ -101,334 +101,337 @@ 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,871,17,78,-11,70 2 0002 Scaron
-vZ 580,871,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,875,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
+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
-# 620,681,0,28,-57,28 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 600,717,0,0,-34 2 0134 -- backslash
rs "
-] 260,717,136,99,35,70 2 0135 bracketright
+] 260,717,136,99,35,70 2 0135 -- bracketright
rB "
-a^ 440,685,0,89,-126,70 2 0136 circumflex
+a^ 440,685,0,89,-126,70 2 0136 -- circumflex
^ "
-_ 500,0,155,50,50,50 0 0137 underscore
-` 280,698,0,100,-141,70 2 0140 quoteleft
+_ 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,129,-75,70 2 0173 braceleft
+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,717,0,0,-244 2 0174 bar
+ba 600,750,250,0,-244 3 0174 -- bar
| "
-rC 380,717,191,0,35 2 0175 braceright
+rC 380,717,191,3,37,3 2 0175 -- braceright
} "
-a~ 440,671,0,98,-130,70 2 0176 tilde
+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
+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
+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
+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
+ct 620,715,29,26,-98,26 2 0242 -- cent
char162 "
-Po 620,698,17,132,46,70 2 0243 sterling
+Po 620,698,17,132,46,70 2 0243 -- sterling
char163 "
-Cs 620,591,0,35,-50,35 0 0244 currency
+Cs 620,591,0,35,-50,35 0 0244 -- currency
char164 "
-Ye 620,681,0,165,-21,70 2 0245 yen
+Ye 620,681,0,165,-21,70 2 0245 -- yen
char165 "
-bb 600,717,0,0,-244 2 0246 brokenbar
+bb 600,675,175,0,-244 2 0246 -- brokenbar
char166 "
-sc 620,698,178,68,12,68 2 0247 section
+sc 620,698,178,68,12,68 2 0247 -- section
char167 "
-ad 420,688,0,97,-135,70 2 0250 dieresis
+ad 420,688,0,97,-135,70 2 0250 -- dieresis
char168 "
-co 740,698,17,94,-34,70 2 0251 copyright
+co 740,698,17,94,-34,70 2 0251 -- copyright
char169 "
-Of 440,698,0,123,-44,70 2 0252 ordfeminine
+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
+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
+\- 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
+a- 440,658,0,94,-128,70 0 0257 -- macron
char175 "
-de 400,698,0,70,-70,70 2 0260 degree
+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
+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
+S3 372,698,0,117,-20,70 2 0263 -- threesuperior
char179 "
-aa 320,706,0,103,-128,70 2 0264 acute
+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
+char181 620,484,221,116,-3,70 1 0265 -- mu
+ps 620,681,0,148,-62,70 2 0266 -- paragraph
char182 "
-char183 300,364,0,22,-87,22 0 0267 periodcentered
-ac 320,0,178,0,5 0 0270 cedilla
+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
+S1 372,688,0,17,-64,17 2 0271 -- onesuperior
char185 "
-Om 400,698,0,105,-44,70 2 0272 ordmasculine
+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
+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
+12 930,681,0,45,-41,45 2 0275 -- onehalf
char189 "
-34 930,691,0,33,-49,33 2 0276 threequarters
+34 930,691,0,33,-49,33 2 0276 -- threequarters
char190 "
-r? 540,494,212,18,32,18 1 0277 questiondown
+r? 540,494,212,18,32,18 1 0277 -- questiondown
char191 "
-`A 700,893,0,70,75,70 2 0300 Agrave
+`A 700,883,0,70,75,70 2 0300 -- Agrave
char192 "
-'A 700,893,0,70,75,70 2 0301 Aacute
+'A 700,883,0,70,75,70 2 0301 -- Aacute
char193 "
-^A 700,872,0,70,75,70 2 0302 Acircumflex
+^A 700,862,0,70,75,70 2 0302 -- Acircumflex
char194 "
-~A 700,858,0,70,75,70 2 0303 Atilde
+~A 700,848,0,70,75,70 2 0303 -- Atilde
char195 "
-:A 700,875,0,70,75,70 2 0304 Adieresis
+:A 700,865,0,70,75,70 2 0304 -- Adieresis
char196 "
-oA 700,893,0,70,75,70 2 0305 Aring
+oA 700,883,0,70,75,70 2 0305 -- Aring
char197 "
-AE 1220,681,0,99,95,70 2 0306 AE
+AE 1220,681,0,99,95,70 2 0306 -- AE
char198 "
-,C 720,698,178,76,-38,70 2 0307 Ccedilla
+,C 720,698,178,76,-38,70 2 0307 -- Ccedilla
char199 "
-`E 680,893,0,106,29,70 2 0310 Egrave
+`E 680,883,0,106,29,70 2 0310 -- Egrave
char200 "
-'E 680,893,0,106,29,70 2 0311 Eacute
+'E 680,883,0,106,29,70 2 0311 -- Eacute
char201 "
-^E 680,872,0,106,29,70 2 0312 Ecircumflex
+^E 680,862,0,106,29,70 2 0312 -- Ecircumflex
char202 "
-:E 680,875,0,106,29,70 2 0313 Edieresis
+:E 680,865,0,106,29,70 2 0313 -- Edieresis
char203 "
-`I 320,893,0,142,29,70 2 0314 Igrave
+`I 320,883,0,142,29,70 2 0314 -- Igrave
char204 "
-'I 320,893,0,142,29,70 2 0315 Iacute
+'I 320,883,0,142,29,70 2 0315 -- Iacute
char205 "
-^I 320,872,0,149,29,70 2 0316 Icircumflex
+^I 320,862,0,179,29,70 2 0316 -- Icircumflex
char206 "
-:I 320,875,0,147,29,70 2 0317 Idieresis
+:I 320,865,0,177,29,70 2 0317 -- Idieresis
char207 "
--D 740,681,0,92,29,70 2 0320 Eth
+-D 740,681,0,92,29,70 2 0320 -- Eth
char208 "
-~N 720,858,0,153,32,70 2 0321 Ntilde
+~N 720,848,0,153,32,70 2 0321 -- Ntilde
char209 "
-`O 760,893,17,89,-38,70 2 0322 Ograve
+`O 760,883,17,89,-38,70 2 0322 -- Ograve
char210 "
-'O 760,893,17,89,-38,70 2 0323 Oacute
+'O 760,883,17,89,-38,70 2 0323 -- Oacute
char211 "
-^O 760,872,17,89,-38,70 2 0324 Ocircumflex
+^O 760,862,17,89,-38,70 2 0324 -- Ocircumflex
char212 "
-~O 760,858,17,89,-38,70 2 0325 Otilde
+~O 760,848,17,89,-38,70 2 0325 -- Otilde
char213 "
-:O 760,875,17,89,-38,70 2 0326 Odieresis
+: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
+char215 600,548,0,45,-41,45 0 0327 -- multiply
+/O 760,777,95,89,-38,70 2 0330 -- Oslash
char216 "
-`U 720,893,17,172,-68,70 2 0331 Ugrave
+`U 720,883,17,172,-68,70 2 0331 -- Ugrave
char217 "
-'U 720,893,17,172,-68,70 2 0332 Uacute
+'U 720,883,17,172,-68,70 2 0332 -- Uacute
char218 "
-^U 720,872,17,172,-68,70 2 0333 Ucircumflex
+^U 720,862,17,172,-68,70 2 0333 -- Ucircumflex
char219 "
-:U 720,875,17,172,-68,70 2 0334 Udieresis
+:U 720,865,17,172,-68,70 2 0334 -- Udieresis
char220 "
-'Y 660,893,0,199,-37,70 2 0335 Yacute
+'Y 660,883,0,199,-37,70 2 0335 -- Yacute
char221 "
-TP 600,681,0,106,29,70 2 0336 Thorn
+TP 600,681,0,106,29,70 2 0336 -- Thorn
char222 "
-ss 620,698,111,83,171,70 2 0337 germandbls
+ss 620,698,111,83,171,70 2 0337 -- germandbls
char223 "
-`a 620,706,8,116,-21,70 2 0340 agrave
+`a 620,706,8,116,-21,70 2 0340 -- agrave
char224 "
-'a 620,706,8,116,-21,70 2 0341 aacute
+'a 620,706,8,116,-21,70 2 0341 -- aacute
char225 "
-^a 620,685,8,116,-21,70 2 0342 acircumflex
+^a 620,685,8,116,-21,70 2 0342 -- acircumflex
char226 "
-~a 620,671,8,116,-21,70 2 0343 atilde
+~a 620,671,8,116,-21,70 2 0343 -- atilde
char227 "
-:a 620,688,8,116,-21,70 2 0344 adieresis
+:a 620,688,8,116,-21,70 2 0344 -- adieresis
char228 "
-oa 620,706,8,116,-21,70 2 0345 aring
+oa 620,706,8,116,-21,70 2 0345 -- aring
char229 "
-ae 880,494,8,88,-21,70 0 0346 ae
+ae 880,494,8,88,-21,70 0 0346 -- ae
char230 "
-,c 480,494,178,92,-15,70 0 0347 ccedilla
+,c 480,494,178,92,-15,70 0 0347 -- ccedilla
char231 "
-`e 540,706,8,85,-15,70 2 0350 egrave
+`e 540,706,8,85,-15,70 2 0350 -- egrave
char232 "
-'e 540,706,8,85,-15,70 2 0351 eacute
+'e 540,706,8,85,-15,70 2 0351 -- eacute
char233 "
-^e 540,685,8,85,-15,70 2 0352 ecircumflex
+^e 540,685,8,85,-15,70 2 0352 -- ecircumflex
char234 "
-:e 540,688,8,85,-15,70 2 0353 edieresis
+:e 540,688,8,85,-15,70 2 0353 -- edieresis
char235 "
-`i 280,706,8,121,-38,70 2 0354 igrave
+`i 280,706,8,121,-38,70 2 0354 -- igrave
char236 "
-'i 280,706,8,121,-38,70 2 0355 iacute
+'i 280,706,8,121,-38,70 2 0355 -- iacute
char237 "
-^i 280,685,8,149,-26,70 2 0356 icircumflex
+^i 280,685,8,149,-26,70 2 0356 -- icircumflex
char238 "
-:i 280,688,8,147,-38,70 2 0357 idieresis
+:i 280,688,8,147,-38,70 2 0357 -- idieresis
char239 "
-Sd 540,725,8,152,-15,70 2 0360 eth
+Sd 540,725,8,152,-15,70 2 0360 -- eth
char240 "
-~n 620,671,8,103,-38,70 2 0361 ntilde
+~n 620,671,8,103,-38,70 2 0361 -- ntilde
char241 "
-`o 540,706,8,82,-15,70 2 0362 ograve
+`o 540,706,8,82,-15,70 2 0362 -- ograve
char242 "
-'o 540,706,8,82,-15,70 2 0363 oacute
+'o 540,706,8,82,-15,70 2 0363 -- oacute
char243 "
-^o 540,685,8,82,-15,70 2 0364 ocircumflex
+^o 540,685,8,82,-15,70 2 0364 -- ocircumflex
char244 "
-~o 540,671,8,82,-15,70 2 0365 otilde
+~o 540,671,8,82,-15,70 2 0365 -- otilde
char245 "
-:o 540,688,8,82,-15,70 2 0366 odieresis
+: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
+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
+`u 620,706,8,116,-38,70 2 0371 -- ugrave
char249 "
-'u 620,706,8,116,-38,70 2 0372 uacute
+'u 620,706,8,116,-38,70 2 0372 -- uacute
char250 "
-^u 620,685,8,116,-38,70 2 0373 ucircumflex
+^u 620,685,8,116,-38,70 2 0373 -- ucircumflex
char251 "
-:u 620,688,8,116,-38,70 2 0374 udieresis
+:u 620,688,8,116,-38,70 2 0374 -- udieresis
char252 "
-'y 600,706,221,59,-10,59 3 0375 yacute
+'y 600,706,221,59,-10,59 3 0375 -- yacute
char253 "
-Tp 600,717,212,70,74,70 3 0376 thorn
+Tp 600,717,212,70,74,70 3 0376 -- thorn
char254 "
-:y 600,688,221,59,-10,59 3 0377 ydieresis
+:y 600,688,221,59,-10,59 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/BMR b/contrib/groff/devps/BMR
index 8e90c100093e..615b7cc7699f 100644
--- a/contrib/groff/devps/BMR
+++ b/contrib/groff/devps/BMR
@@ -97,334 +97,337 @@ r d 7
r , -58
r c 7
charset
-ha 600,681 2 0000 asciicircum
-ti 600,352 0 0001 asciitilde
-vS 660,869,17 2 0002 Scaron
-vZ 640,869 2 0003 Zcaron
-vs 520,672,8 2 0004 scaron
-vz 480,672 2 0005 zcaron
-:Y 640,871 2 0006 Ydieresis
-tm 980,681 2 0007 trademark
-aq 220,698 2 0010 quotesingle
+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
-# 620,681 2 0043 numbersign
+! 300,698,8 2 0041 -- exclam
+" 380,698 2 0042 -- quotedbl
+dq "
+# 620,681 2 0043 -- numbersign
sh "
-$ 620,791,109 2 0044 dollar
+$ 620,791,109 2 0044 -- dollar
Do "
-% 900,698,8 2 0045 percent
-& 800,698,17 2 0046 ampersand
-' 220,698 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 600,717 2 0134 -- backslash
rs "
-] 300,717,136 2 0135 bracketright
+] 300,717,136 2 0135 -- bracketright
rB "
-a^ 420,685 2 0136 circumflex
+a^ 420,685 2 0136 -- circumflex
^ "
-_ 500,0,155 0 0137 underscore
-` 220,698 2 0140 quoteleft
+_ 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
+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,717 2 0174 bar
+ba 600,750,250 3 0174 -- bar
| "
-rC 280,717,136 2 0175 braceright
+rC 280,717,136 2 0175 -- braceright
} "
-a~ 440,661 0 0176 tilde
+a~ 440,661 0 0176 -- tilde
~ "
-bq 220,110,108 0 0200 quotesinglbase
-Fo 360,437 0 0201 guillemotleft
+bq 220,110,108 0 0200 -- quotesinglbase
+Fo 360,437 0 0201 -- guillemotleft
char171 "
-Fc 360,437 0 0202 guillemotright
+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,699 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
+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
+ct 620,651 0 0242 -- cent
char162 "
-Po 620,698,17 2 0243 sterling
+Po 620,698,17 2 0243 -- sterling
char163 "
-Cs 620,591 0 0244 currency
+Cs 620,591 0 0244 -- currency
char164 "
-Ye 620,681 2 0245 yen
+Ye 620,681 2 0245 -- yen
char165 "
-bb 600,717 2 0246 brokenbar
+bb 600,675,175 2 0246 -- brokenbar
char166 "
-sc 520,698,178 2 0247 section
+sc 520,698,178 2 0247 -- section
char167 "
-ad 420,674 2 0250 dieresis
+ad 420,674 2 0250 -- dieresis
char168 "
-co 740,698,17 2 0251 copyright
+co 740,698,17 2 0251 -- copyright
char169 "
-Of 420,698 2 0252 ordfeminine
+Of 420,698 2 0252 -- ordfeminine
char170 "
-fo 240,437 0 0253 guilsinglleft
-no 600,398 0 0254 logicalnot
+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
+\- 600,300 0 0255 -- minus
+rg 740,698,17 2 0256 -- registered
char174 "
-a- 440,635 0 0257 macron
+a- 440,635 0 0257 -- macron
char175 "
-de 400,698 2 0260 degree
+de 400,698 2 0260 -- degree
char176 "
-char177 600,513 0 0261 plusminus
-S2 372,698 2 0262 twosuperior
+char177 600,513 0 0261 -- plusminus
+S2 372,698 2 0262 -- twosuperior
char178 "
-S3 372,698 2 0263 threesuperior
+S3 372,698 2 0263 -- threesuperior
char179 "
-aa 340,689 2 0264 acute
+aa 340,689 2 0264 -- acute
char180 "
-char181 680,484,251 1 0265 mu
-ps 600,681 2 0266 paragraph
+char181 680,484,251 1 0265 -- mu
+ps 600,681 2 0266 -- paragraph
char182 "
-char183 320,327 0 0267 periodcentered
-ac 320,0,200 0 0270 cedilla
+pc 320,327 0 0267 -- periodcentered
+char183 "
+ac 320,0,200 0 0270 -- cedilla
char184 "
-S1 372,688 2 0271 onesuperior
+S1 372,688 2 0271 -- onesuperior
char185 "
-Om 420,698 2 0272 ordmasculine
+Om 420,698 2 0272 -- ordmasculine
char186 "
-fc 240,437 0 0273 guilsinglright
-14 930,681 2 0274 onequarter
+fc 240,437 0 0273 -- guilsinglright
+14 930,681 2 0274 -- onequarter
char188 "
-12 930,681 2 0275 onehalf
+12 930,681 2 0275 -- onehalf
char189 "
-34 930,691 2 0276 threequarters
+34 930,691 2 0276 -- threequarters
char190 "
-r? 540,494,217 0 0277 questiondown
+r? 540,494,217 0 0277 -- questiondown
char191 "
-`A 680,886 2 0300 Agrave
+`A 680,866 2 0300 -- Agrave
char192 "
-'A 680,886 2 0301 Aacute
+'A 680,866 2 0301 -- Aacute
char193 "
-^A 680,882 2 0302 Acircumflex
+^A 680,862 2 0302 -- Acircumflex
char194 "
-~A 680,858 2 0303 Atilde
+~A 680,838 2 0303 -- Atilde
char195 "
-:A 680,871 2 0304 Adieresis
+:A 680,851 2 0304 -- Adieresis
char196 "
-oA 680,928 2 0305 Aring
+oA 680,908 2 0305 -- Aring
char197 "
-AE 1260,681 2 0306 AE
+AE 1260,681 2 0306 -- AE
char198 "
-,C 740,698,200 2 0307 Ccedilla
+,C 740,698,200 2 0307 -- Ccedilla
char199 "
-`E 720,886 2 0310 Egrave
+`E 720,866 2 0310 -- Egrave
char200 "
-'E 720,886 2 0311 Eacute
+'E 720,866 2 0311 -- Eacute
char201 "
-^E 720,882 2 0312 Ecircumflex
+^E 720,862 2 0312 -- Ecircumflex
char202 "
-:E 720,871 2 0313 Edieresis
+:E 720,851 2 0313 -- Edieresis
char203 "
-`I 340,886 2 0314 Igrave
+`I 340,866 2 0314 -- Igrave
char204 "
-'I 340,886 2 0315 Iacute
+'I 340,866 2 0315 -- Iacute
char205 "
-^I 340,882 2 0316 Icircumflex
+^I 340,862 2 0316 -- Icircumflex
char206 "
-:I 340,871 2 0317 Idieresis
+:I 340,851 2 0317 -- Idieresis
char207 "
--D 800,681 2 0320 Eth
+-D 800,681 2 0320 -- Eth
char208 "
-~N 740,858 2 0321 Ntilde
+~N 740,838 2 0321 -- Ntilde
char209 "
-`O 800,886,17 2 0322 Ograve
+`O 800,866,17 2 0322 -- Ograve
char210 "
-'O 800,886,17 2 0323 Oacute
+'O 800,866,17 2 0323 -- Oacute
char211 "
-^O 800,882,17 2 0324 Ocircumflex
+^O 800,862,17 2 0324 -- Ocircumflex
char212 "
-~O 800,858,17 2 0325 Otilde
+~O 800,838,17 2 0325 -- Otilde
char213 "
-:O 800,871,17 2 0326 Odieresis
+:O 800,851,17 2 0326 -- Odieresis
char214 "
-char215 600,513 0 0327 multiply
-/O 800,733,53 2 0330 Oslash
+char215 600,513 0 0327 -- multiply
+/O 800,733,53 2 0330 -- Oslash
char216 "
-`U 780,886,17 2 0331 Ugrave
+`U 780,866,17 2 0331 -- Ugrave
char217 "
-'U 780,886,17 2 0332 Uacute
+'U 780,866,17 2 0332 -- Uacute
char218 "
-^U 780,882,17 2 0333 Ucircumflex
+^U 780,862,17 2 0333 -- Ucircumflex
char219 "
-:U 780,871,17 2 0334 Udieresis
+:U 780,851,17 2 0334 -- Udieresis
char220 "
-'Y 640,886 2 0335 Yacute
+'Y 640,866 2 0335 -- Yacute
char221 "
-TP 620,681 2 0336 Thorn
+TP 620,681 2 0336 -- Thorn
char222 "
-ss 660,698,110 2 0337 germandbls
+ss 660,698,110 2 0337 -- germandbls
char223 "
-`a 580,689,8 2 0340 agrave
+`a 580,689,8 2 0340 -- agrave
char224 "
-'a 580,689,8 2 0341 aacute
+'a 580,689,8 2 0341 -- aacute
char225 "
-^a 580,685,8 2 0342 acircumflex
+^a 580,685,8 2 0342 -- acircumflex
char226 "
-~a 580,661,8 0 0343 atilde
+~a 580,661,8 0 0343 -- atilde
char227 "
-:a 580,674,8 2 0344 adieresis
+:a 580,674,8 2 0344 -- adieresis
char228 "
-oa 580,731,8 2 0345 aring
+oa 580,731,8 2 0345 -- aring
char229 "
-ae 860,494,8 0 0346 ae
+ae 860,494,8 0 0346 -- ae
char230 "
-,c 520,494,200 0 0347 ccedilla
+,c 520,494,200 0 0347 -- ccedilla
char231 "
-`e 520,689,8 2 0350 egrave
+`e 520,689,8 2 0350 -- egrave
char232 "
-'e 520,689,8 2 0351 eacute
+'e 520,689,8 2 0351 -- eacute
char233 "
-^e 520,685,8 2 0352 ecircumflex
+^e 520,685,8 2 0352 -- ecircumflex
char234 "
-:e 520,674,8 2 0353 edieresis
+:e 520,674,8 2 0353 -- edieresis
char235 "
-`i 300,689 2 0354 igrave
+`i 300,689 2 0354 -- igrave
char236 "
-'i 300,689 2 0355 iacute
+'i 300,689 2 0355 -- iacute
char237 "
-^i 300,685 2 0356 icircumflex
+^i 300,685 2 0356 -- icircumflex
char238 "
-:i 300,674 2 0357 idieresis
+:i 300,674 2 0357 -- idieresis
char239 "
-Sd 560,734,8 2 0360 eth
+Sd 560,734,8 2 0360 -- eth
char240 "
-~n 660,661 0 0361 ntilde
+~n 660,661 0 0361 -- ntilde
char241 "
-`o 560,689,8 2 0362 ograve
+`o 560,689,8 2 0362 -- ograve
char242 "
-'o 560,689,8 2 0363 oacute
+'o 560,689,8 2 0363 -- oacute
char243 "
-^o 560,685,8 2 0364 ocircumflex
+^o 560,685,8 2 0364 -- ocircumflex
char244 "
-~o 560,661,8 0 0365 otilde
+~o 560,661,8 0 0365 -- otilde
char245 "
-:o 560,674,8 2 0366 odieresis
+:o 560,674,8 2 0366 -- odieresis
char246 "
-char247 600,514 0 0367 divide
-/o 560,534,40 0 0370 oslash
+char247 600,514 0 0367 -- divide
+/o 560,534,40 0 0370 -- oslash
char248 "
-`u 680,689,8 2 0371 ugrave
+`u 680,689,8 2 0371 -- ugrave
char249 "
-'u 680,689,8 2 0372 uacute
+'u 680,689,8 2 0372 -- uacute
char250 "
-^u 680,685,8 2 0373 ucircumflex
+^u 680,685,8 2 0373 -- ucircumflex
char251 "
-:u 680,674,8 2 0374 udieresis
+:u 680,674,8 2 0374 -- udieresis
char252 "
-'y 540,689,236 3 0375 yacute
+'y 540,689,236 3 0375 -- yacute
char253 "
-Tp 620,717,228 3 0376 thorn
+Tp 620,717,228 3 0376 -- thorn
char254 "
-:y 540,674,236 3 0377 ydieresis
+:y 540,674,236 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/CB b/contrib/groff/devps/CB
index c199fd93f9e6..6c01b8d767aa 100644
--- a/contrib/groff/devps/CB
+++ b/contrib/groff/devps/CB
@@ -3,334 +3,337 @@ 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
+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
-# 600,651,45 2 0043 numbersign
+! 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
+$ 600,666,126 2 0044 -- dollar
Do "
-% 600,616,15 2 0045 percent
-& 600,543,15 0 0046 ampersand
-' 600,562 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 600,626,77 2 0134 -- backslash
rs "
-] 600,616,102 2 0135 bracketright
+] 600,616,102 2 0135 -- bracketright
rB "
-a^ 600,657 2 0136 circumflex
+a^ 600,657 2 0136 -- circumflex
^ "
-_ 600,0,125 0 0137 underscore
-` 600,562 2 0140 quoteleft
+_ 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
+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
+ba 600,750,250 3 0174 -- bar
| "
-rC 600,616,102 2 0175 braceright
+rC 600,616,102 2 0175 -- braceright
} "
-a~ 600,636 2 0176 tilde
+a~ 600,636 2 0176 -- tilde
~ "
-bq 600,143,142 1 0200 quotesinglbase
-Fo 600,446 0 0201 guillemotleft
+bq 600,143,142 1 0200 -- quotesinglbase
+Fo 600,446 0 0201 -- guillemotleft
char171 "
-Fc 600,446 0 0202 guillemotright
+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
+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
+ct 600,614,49 2 0242 -- cent
char162 "
-Po 600,611,28 2 0243 sterling
+Po 600,611,28 2 0243 -- sterling
char163 "
-Cs 600,517 0 0244 currency
+Cs 600,517 0 0244 -- currency
char164 "
-Ye 600,562 2 0245 yen
+Ye 600,562 2 0245 -- yen
char165 "
-bb 600,675,175 3 0246 brokenbar
+bb 600,675,175 3 0246 -- brokenbar
char166 "
-sc 600,580,70 2 0247 section
+sc 600,580,70 2 0247 -- section
char167 "
-ad 600,625 2 0250 dieresis
+ad 600,625 2 0250 -- dieresis
char168 "
-co 600,580,18 2 0251 copyright
+co 600,580,18 2 0251 -- copyright
char169 "
-Of 600,580 2 0252 ordfeminine
+Of 600,580 2 0252 -- ordfeminine
char170 "
-fo 600,446 0 0253 guilsinglleft
-no 600,413 0 0254 logicalnot
+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
+\- 600,313 0 0255 -- minus
+rg 600,580,18 2 0256 -- registered
char174 "
-a- 600,585 2 0257 macron
+a- 600,585 2 0257 -- macron
char175 "
-de 600,616 2 0260 degree
+de 600,616 2 0260 -- degree
char176 "
-char177 600,515 0 0261 plusminus
-S2 600,616 2 0262 twosuperior
+char177 600,515 0 0261 -- plusminus
+S2 600,616 2 0262 -- twosuperior
char178 "
-S3 600,616 2 0263 threesuperior
+S3 600,616 2 0263 -- threesuperior
char179 "
-aa 600,661 2 0264 acute
+aa 600,661 2 0264 -- acute
char180 "
-char181 600,439,142 1 0265 mu
-ps 600,580,70 2 0266 paragraph
+char181 600,439,142 1 0265 -- mu
+ps 600,580,70 2 0266 -- paragraph
char182 "
-char183 600,351 0 0267 periodcentered
-ac 600,0,206 1 0270 cedilla
+pc 600,351 0 0267 -- periodcentered
+char183 "
+ac 600,0,206 1 0270 -- cedilla
char184 "
-S1 600,616 2 0271 onesuperior
+S1 600,616 2 0271 -- onesuperior
char185 "
-Om 600,580 2 0272 ordmasculine
+Om 600,580 2 0272 -- ordmasculine
char186 "
-fc 600,446 0 0273 guilsinglright
-14 600,661,60 2 0274 onequarter
+fc 600,446 0 0273 -- guilsinglright
+14 600,661,60 2 0274 -- onequarter
char188 "
-12 600,661,60 2 0275 onehalf
+12 600,661,60 2 0275 -- onehalf
char189 "
-34 600,661,60 2 0276 threequarters
+34 600,661,60 2 0276 -- threequarters
char190 "
-r? 600,449,146 1 0277 questiondown
+r? 600,449,146 1 0277 -- questiondown
char191 "
-`A 600,784 2 0300 Agrave
+`A 600,784 2 0300 -- Agrave
char192 "
-'A 600,784 2 0301 Aacute
+'A 600,784 2 0301 -- Aacute
char193 "
-^A 600,780 2 0302 Acircumflex
+^A 600,780 2 0302 -- Acircumflex
char194 "
-~A 600,759 2 0303 Atilde
+~A 600,759 2 0303 -- Atilde
char195 "
-:A 600,748 2 0304 Adieresis
+:A 600,748 2 0304 -- Adieresis
char196 "
-oA 600,801 2 0305 Aring
+oA 600,801 2 0305 -- Aring
char197 "
-AE 600,562 2 0306 AE
+AE 600,562 2 0306 -- AE
char198 "
-,C 600,580,206 3 0307 Ccedilla
+,C 600,580,206 3 0307 -- Ccedilla
char199 "
-`E 600,784 2 0310 Egrave
+`E 600,784 2 0310 -- Egrave
char200 "
-'E 600,784 2 0311 Eacute
+'E 600,784 2 0311 -- Eacute
char201 "
-^E 600,780 2 0312 Ecircumflex
+^E 600,780 2 0312 -- Ecircumflex
char202 "
-:E 600,748 2 0313 Edieresis
+:E 600,748 2 0313 -- Edieresis
char203 "
-`I 600,784 2 0314 Igrave
+`I 600,784 2 0314 -- Igrave
char204 "
-'I 600,784 2 0315 Iacute
+'I 600,784 2 0315 -- Iacute
char205 "
-^I 600,780 2 0316 Icircumflex
+^I 600,780 2 0316 -- Icircumflex
char206 "
-:I 600,748 2 0317 Idieresis
+:I 600,748 2 0317 -- Idieresis
char207 "
--D 600,562 2 0320 Eth
+-D 600,562 2 0320 -- Eth
char208 "
-~N 600,759,12 2 0321 Ntilde
+~N 600,759,12 2 0321 -- Ntilde
char209 "
-`O 600,784,18 2 0322 Ograve
+`O 600,784,18 2 0322 -- Ograve
char210 "
-'O 600,784,18 2 0323 Oacute
+'O 600,784,18 2 0323 -- Oacute
char211 "
-^O 600,780,18 2 0324 Ocircumflex
+^O 600,780,18 2 0324 -- Ocircumflex
char212 "
-~O 600,759,18 2 0325 Otilde
+~O 600,759,18 2 0325 -- Otilde
char213 "
-:O 600,748,18 2 0326 Odieresis
+:O 600,748,18 2 0326 -- Odieresis
char214 "
-char215 600,478 0 0327 multiply
-/O 600,584,22 2 0330 Oslash
+char215 600,478 0 0327 -- multiply
+/O 600,584,22 2 0330 -- Oslash
char216 "
-`U 600,784,18 2 0331 Ugrave
+`U 600,784,18 2 0331 -- Ugrave
char217 "
-'U 600,784,18 2 0332 Uacute
+'U 600,784,18 2 0332 -- Uacute
char218 "
-^U 600,780,18 2 0333 Ucircumflex
+^U 600,780,18 2 0333 -- Ucircumflex
char219 "
-:U 600,748,18 2 0334 Udieresis
+:U 600,748,18 2 0334 -- Udieresis
char220 "
-'Y 600,784 2 0335 Yacute
+'Y 600,784 2 0335 -- Yacute
char221 "
-TP 600,562 2 0336 Thorn
+TP 600,562 2 0336 -- Thorn
char222 "
-ss 600,626,15 2 0337 germandbls
+ss 600,626,15 2 0337 -- germandbls
char223 "
-`a 600,661,15 2 0340 agrave
+`a 600,661,15 2 0340 -- agrave
char224 "
-'a 600,661,15 2 0341 aacute
+'a 600,661,15 2 0341 -- aacute
char225 "
-^a 600,657,15 2 0342 acircumflex
+^a 600,657,15 2 0342 -- acircumflex
char226 "
-~a 600,636,15 2 0343 atilde
+~a 600,636,15 2 0343 -- atilde
char227 "
-:a 600,625,15 2 0344 adieresis
+:a 600,625,15 2 0344 -- adieresis
char228 "
-oa 600,678,15 2 0345 aring
+oa 600,678,15 2 0345 -- aring
char229 "
-ae 600,454,15 0 0346 ae
+ae 600,454,15 0 0346 -- ae
char230 "
-,c 600,459,206 1 0347 ccedilla
+,c 600,459,206 1 0347 -- ccedilla
char231 "
-`e 600,661,15 2 0350 egrave
+`e 600,661,15 2 0350 -- egrave
char232 "
-'e 600,661,15 2 0351 eacute
+'e 600,661,15 2 0351 -- eacute
char233 "
-^e 600,657,15 2 0352 ecircumflex
+^e 600,657,15 2 0352 -- ecircumflex
char234 "
-:e 600,625,15 2 0353 edieresis
+:e 600,625,15 2 0353 -- edieresis
char235 "
-`i 600,661 2 0354 igrave
+`i 600,661 2 0354 -- igrave
char236 "
-'i 600,661 2 0355 iacute
+'i 600,661 2 0355 -- iacute
char237 "
-^i 600,657 2 0356 icircumflex
+^i 600,657 2 0356 -- icircumflex
char238 "
-:i 600,625 2 0357 idieresis
+:i 600,625 2 0357 -- idieresis
char239 "
-Sd 600,626,27 2 0360 eth
+Sd 600,626,27 2 0360 -- eth
char240 "
-~n 600,636 2 0361 ntilde
+~n 600,636 2 0361 -- ntilde
char241 "
-`o 600,661,15 2 0362 ograve
+`o 600,661,15 2 0362 -- ograve
char242 "
-'o 600,661,15 2 0363 oacute
+'o 600,661,15 2 0363 -- oacute
char243 "
-^o 600,657,15 2 0364 ocircumflex
+^o 600,657,15 2 0364 -- ocircumflex
char244 "
-~o 600,636,15 2 0365 otilde
+~o 600,636,15 2 0365 -- otilde
char245 "
-:o 600,625,15 2 0366 odieresis
+:o 600,625,15 2 0366 -- odieresis
char246 "
-char247 600,500 0 0367 divide
-/o 600,463,24 0 0370 oslash
+char247 600,500 0 0367 -- divide
+/o 600,463,24 0 0370 -- oslash
char248 "
-`u 600,661,15 2 0371 ugrave
+`u 600,661,15 2 0371 -- ugrave
char249 "
-'u 600,661,15 2 0372 uacute
+'u 600,661,15 2 0372 -- uacute
char250 "
-^u 600,657,15 2 0373 ucircumflex
+^u 600,657,15 2 0373 -- ucircumflex
char251 "
-:u 600,625,15 2 0374 udieresis
+:u 600,625,15 2 0374 -- udieresis
char252 "
-'y 600,661,142 3 0375 yacute
+'y 600,661,142 3 0375 -- yacute
char253 "
-Tp 600,626,142 3 0376 thorn
+Tp 600,626,142 3 0376 -- thorn
char254 "
-:y 600,625,142 3 0377 ydieresis
+:y 600,625,142 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/CBI b/contrib/groff/devps/CBI
index 802e3366d7ac..72b55614d51a 100644
--- a/contrib/groff/devps/CBI
+++ b/contrib/groff/devps/CBI
@@ -4,334 +4,337 @@ 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
+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
-# 600,651,45,90,-38,75 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 600,626,77,0,-173 2 0134 -- backslash
rs "
-] 600,616,102,0,-53 2 0135 bracketright
+] 600,616,102,0,-53 2 0135 -- bracketright
rB "
-a^ 600,657,0,56,-162,56 2 0136 circumflex
+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
+_ 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
+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
+ba 600,750,250,0,-152 3 0174 -- bar
| "
-rC 600,616,102,0,-64 2 0175 braceright
+rC 600,616,102,0,-64 2 0175 -- braceright
} "
-a~ 600,636,0,92,-150,75 2 0176 tilde
+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
+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
+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
+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
+ct 600,614,49,54,-71,54 2 0242 -- cent
char162 "
-Po 600,611,28,100,-57,75 2 0243 sterling
+Po 600,611,28,100,-57,75 2 0243 -- sterling
char163 "
-Cs 600,517,0,93,-27,75 0 0244 currency
+Cs 600,517,0,93,-27,75 0 0244 -- currency
char164 "
-Ye 600,562,0,159,-48,75 2 0245 yen
+Ye 600,562,0,159,-48,75 2 0245 -- yen
char165 "
-bb 600,675,175,0,-168 3 0246 brokenbar
+bb 600,675,175,0,-168 3 0246 -- brokenbar
char166 "
-sc 600,580,70,69,-24,69 2 0247 section
+sc 600,580,70,69,-24,69 2 0247 -- section
char167 "
-ad 600,625,0,42,-194,42 2 0250 dieresis
+ad 600,625,0,42,-194,42 2 0250 -- dieresis
char168 "
-co 600,580,18,117,-3,75 2 0251 copyright
+co 600,580,18,117,-3,75 2 0251 -- copyright
char169 "
-Of 600,580,0,0,-139 2 0252 ordfeminine
+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
+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
+\- 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
+a- 600,585,0,86,-145,75 2 0257 -- macron
char175 "
-de 600,616,0,19,-123,19 2 0260 degree
+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
+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
+S3 600,616,0,0,-143 2 0263 -- threesuperior
char179 "
-aa 600,661,0,58,-263,58 2 0264 acute
+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
+char181 600,439,142,41,0,41 1 0265 -- mu
+ps 600,580,70,149,-11,75 2 0266 -- paragraph
char182 "
-char183 600,351,0,0,-199 0 0267 periodcentered
-ac 600,0,206,0,-119 1 0270 cedilla
+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
+S1 600,616,0,0,-163 2 0271 -- onesuperior
char185 "
-Om 600,580,0,0,-139 2 0272 ordmasculine
+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
+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
+12 600,661,60,165,27,75 2 0275 -- onehalf
char189 "
-34 600,661,60,148,42,75 2 0276 threequarters
+34 600,661,60,148,42,75 2 0276 -- threequarters
char190 "
-r? 600,449,146,0,-51 1 0277 questiondown
+r? 600,449,146,0,-51 1 0277 -- questiondown
char191 "
-`A 600,784,0,81,59,75 2 0300 Agrave
+`A 600,784,0,81,59,75 2 0300 -- Agrave
char192 "
-'A 600,784,0,115,59,75 2 0301 Aacute
+'A 600,784,0,115,59,75 2 0301 -- Aacute
char193 "
-^A 600,780,0,81,59,75 2 0302 Acircumflex
+^A 600,780,0,81,59,75 2 0302 -- Acircumflex
char194 "
-~A 600,759,0,88,59,75 2 0303 Atilde
+~A 600,759,0,88,59,75 2 0303 -- Atilde
char195 "
-:A 600,748,0,81,59,75 2 0304 Adieresis
+:A 600,748,0,81,59,75 2 0304 -- Adieresis
char196 "
-oA 600,801,0,81,59,75 2 0305 Aring
+oA 600,801,0,81,59,75 2 0305 -- Aring
char197 "
-AE 600,562,0,157,79,75 2 0306 AE
+AE 600,562,0,157,79,75 2 0306 -- AE
char198 "
-,C 600,580,206,124,-24,75 3 0307 Ccedilla
+,C 600,580,206,124,-24,75 3 0307 -- Ccedilla
char199 "
-`E 600,784,0,119,25,75 2 0310 Egrave
+`E 600,784,0,119,25,75 2 0310 -- Egrave
char200 "
-'E 600,784,0,119,25,75 2 0311 Eacute
+'E 600,784,0,119,25,75 2 0311 -- Eacute
char201 "
-^E 600,780,0,119,25,75 2 0312 Ecircumflex
+^E 600,780,0,119,25,75 2 0312 -- Ecircumflex
char202 "
-:E 600,748,0,119,25,75 2 0313 Edieresis
+:E 600,748,0,119,25,75 2 0313 -- Edieresis
char203 "
-`I 600,784,0,92,-27,75 2 0314 Igrave
+`I 600,784,0,92,-27,75 2 0314 -- Igrave
char204 "
-'I 600,784,0,92,-27,75 2 0315 Iacute
+'I 600,784,0,92,-27,75 2 0315 -- Iacute
char205 "
-^I 600,780,0,92,-27,75 2 0316 Icircumflex
+^I 600,780,0,92,-27,75 2 0316 -- Icircumflex
char206 "
-:I 600,748,0,92,-27,75 2 0317 Idieresis
+:I 600,748,0,92,-27,75 2 0317 -- Idieresis
char207 "
--D 600,562,0,114,20,75 2 0320 Eth
+-D 600,562,0,114,20,75 2 0320 -- Eth
char208 "
-~N 600,759,12,179,42,75 2 0321 Ntilde
+~N 600,759,12,179,42,75 2 0321 -- Ntilde
char209 "
-`O 600,784,18,95,-24,75 2 0322 Ograve
+`O 600,784,18,95,-24,75 2 0322 -- Ograve
char210 "
-'O 600,784,18,95,-24,75 2 0323 Oacute
+'O 600,784,18,95,-24,75 2 0323 -- Oacute
char211 "
-^O 600,780,18,95,-24,75 2 0324 Ocircumflex
+^O 600,780,18,95,-24,75 2 0324 -- Ocircumflex
char212 "
-~O 600,759,18,118,-24,75 2 0325 Otilde
+~O 600,759,18,118,-24,75 2 0325 -- Otilde
char213 "
-:O 600,748,18,95,-24,75 2 0326 Odieresis
+: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
+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
+`U 600,784,18,165,-51,75 2 0331 -- Ugrave
char217 "
-'U 600,784,18,165,-51,75 2 0332 Uacute
+'U 600,784,18,165,-51,75 2 0332 -- Uacute
char218 "
-^U 600,780,18,165,-51,75 2 0333 Ucircumflex
+^U 600,780,18,165,-51,75 2 0333 -- Ucircumflex
char219 "
-:U 600,748,18,165,-51,75 2 0334 Udieresis
+:U 600,748,18,165,-51,75 2 0334 -- Udieresis
char220 "
-'Y 600,784,0,158,-59,75 2 0335 Yacute
+'Y 600,784,0,158,-59,75 2 0335 -- Yacute
char221 "
-TP 600,562,0,69,2,69 2 0336 Thorn
+TP 600,562,0,69,2,69 2 0336 -- Thorn
char222 "
-ss 600,626,15,78,28,75 2 0337 germandbls
+ss 600,626,15,78,28,75 2 0337 -- germandbls
char223 "
-`a 600,661,15,42,-12,42 2 0340 agrave
+`a 600,661,15,42,-12,42 2 0340 -- agrave
char224 "
-'a 600,661,15,58,-12,58 2 0341 aacute
+'a 600,661,15,58,-12,58 2 0341 -- aacute
char225 "
-^a 600,657,15,42,-12,42 2 0342 acircumflex
+^a 600,657,15,42,-12,42 2 0342 -- acircumflex
char226 "
-~a 600,636,15,92,-12,75 2 0343 atilde
+~a 600,636,15,92,-12,75 2 0343 -- atilde
char227 "
-:a 600,625,15,42,-12,42 2 0344 adieresis
+:a 600,625,15,42,-12,42 2 0344 -- adieresis
char228 "
-oa 600,678,15,42,-12,42 2 0345 aring
+oa 600,678,15,42,-12,42 2 0345 -- aring
char229 "
-ae 600,454,15,101,29,75 0 0346 ae
+ae 600,454,15,101,29,75 0 0346 -- ae
char230 "
-,c 600,459,206,81,-31,75 1 0347 ccedilla
+,c 600,459,206,81,-31,75 1 0347 -- ccedilla
char231 "
-`e 600,661,15,54,-31,54 2 0350 egrave
+`e 600,661,15,54,-31,54 2 0350 -- egrave
char232 "
-'e 600,661,15,58,-31,58 2 0351 eacute
+'e 600,661,15,58,-31,58 2 0351 -- eacute
char233 "
-^e 600,657,15,56,-31,56 2 0352 ecircumflex
+^e 600,657,15,56,-31,56 2 0352 -- ecircumflex
char234 "
-:e 600,625,15,54,-31,54 2 0353 edieresis
+:e 600,625,15,54,-31,54 2 0353 -- edieresis
char235 "
-`i 600,661,0,0,-27 2 0354 igrave
+`i 600,661,0,0,-27 2 0354 -- igrave
char236 "
-'i 600,661,0,58,-27,58 2 0355 iacute
+'i 600,661,0,58,-27,58 2 0355 -- iacute
char237 "
-^i 600,657,0,16,-27,16 2 0356 icircumflex
+^i 600,657,0,16,-27,16 2 0356 -- icircumflex
char238 "
-:i 600,625,0,2,-27,2 2 0357 idieresis
+:i 600,625,0,2,-27,2 2 0357 -- idieresis
char239 "
-Sd 600,626,27,111,-43,75 2 0360 eth
+Sd 600,626,27,111,-43,75 2 0360 -- eth
char240 "
-~n 600,636,0,92,32,75 2 0361 ntilde
+~n 600,636,0,92,32,75 2 0361 -- ntilde
char241 "
-`o 600,661,15,72,-21,72 2 0362 ograve
+`o 600,661,15,72,-21,72 2 0362 -- ograve
char242 "
-'o 600,661,15,72,-21,72 2 0363 oacute
+'o 600,661,15,72,-21,72 2 0363 -- oacute
char243 "
-^o 600,657,15,72,-21,72 2 0364 ocircumflex
+^o 600,657,15,72,-21,72 2 0364 -- ocircumflex
char244 "
-~o 600,636,15,92,-21,75 2 0365 otilde
+~o 600,636,15,92,-21,75 2 0365 -- otilde
char245 "
-:o 600,625,15,72,-21,72 2 0366 odieresis
+: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
+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
+`u 600,661,15,41,-20,41 2 0371 -- ugrave
char249 "
-'u 600,661,15,58,-20,58 2 0372 uacute
+'u 600,661,15,58,-20,58 2 0372 -- uacute
char250 "
-^u 600,657,15,41,-20,41 2 0373 ucircumflex
+^u 600,657,15,41,-20,41 2 0373 -- ucircumflex
char251 "
-:u 600,625,15,41,-20,41 2 0374 udieresis
+:u 600,625,15,41,-20,41 2 0374 -- udieresis
char252 "
-'y 600,661,142,144,70,75 3 0375 yacute
+'y 600,661,142,144,70,75 3 0375 -- yacute
char253 "
-Tp 600,626,142,72,81,72 3 0376 thorn
+Tp 600,626,142,72,81,72 3 0376 -- thorn
char254 "
-:y 600,625,142,144,70,75 3 0377 ydieresis
+:y 600,625,142,144,70,75 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/CI b/contrib/groff/devps/CI
index f63f1931e1db..63ea748beb5d 100644
--- a/contrib/groff/devps/CI
+++ b/contrib/groff/devps/CI
@@ -4,334 +4,337 @@ 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
+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
-# 600,639,32,46,-83,46 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 600,629,80,0,-199 2 0134 -- backslash
rs "
-] 600,622,108,0,-85 2 0135 bracketright
+] 600,622,108,0,-85 2 0135 -- bracketright
rB "
-a^ 600,654,0,31,-179,31 2 0136 circumflex
+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
+_ 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
+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
+ba 600,750,250,0,-172 3 0174 -- bar
| "
-rC 600,622,108,0,-90 2 0175 braceright
+rC 600,622,108,0,-90 2 0175 -- braceright
} "
-a~ 600,606,0,79,-162,72 2 0176 tilde
+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
+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
+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
+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
+ct 600,614,49,38,-101,38 2 0242 -- cent
char162 "
-Po 600,611,21,71,-74,71 2 0243 sterling
+Po 600,611,21,71,-74,71 2 0243 -- sterling
char163 "
-Cs 600,506,0,78,-44,72 0 0244 currency
+Cs 600,506,0,78,-44,72 0 0244 -- currency
char164 "
-Ye 600,562,0,143,-70,72 2 0245 yen
+Ye 600,562,0,143,-70,72 2 0245 -- yen
char165 "
-bb 600,675,175,0,-188 3 0246 brokenbar
+bb 600,675,175,0,-188 3 0246 -- brokenbar
char166 "
-sc 600,580,78,40,-54,40 2 0247 section
+sc 600,580,78,40,-54,40 2 0247 -- section
char167 "
-ad 600,595,0,20,-212,20 2 0250 dieresis
+ad 600,595,0,20,-212,20 2 0250 -- dieresis
char168 "
-co 600,580,18,117,-3,72 2 0251 copyright
+co 600,580,18,117,-3,72 2 0251 -- copyright
char169 "
-Of 600,580,0,0,-159 2 0252 ordfeminine
+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
+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
+\- 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
+a- 600,565,0,50,-182,50 2 0257 -- macron
char175 "
-de 600,622,0,26,-164,26 2 0260 degree
+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
+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
+S3 600,622,0,0,-163 2 0263 -- threesuperior
char179 "
-aa 600,672,0,62,-298,62 2 0264 acute
+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
+char181 600,426,157,22,-22,22 1 0265 -- mu
+ps 600,562,78,80,-50,72 2 0266 -- paragraph
char182 "
-char183 600,327,0,0,-225 0 0267 periodcentered
-ac 600,10,151,0,-147 0 0270 cedilla
+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
+S1 600,622,0,0,-181 2 0271 -- onesuperior
char185 "
-Om 600,580,0,0,-160 2 0272 ordmasculine
+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
+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
+12 600,665,57,119,-15,72 2 0275 -- onehalf
char189 "
-34 600,666,56,109,-23,72 2 0276 threequarters
+34 600,666,56,109,-23,72 2 0276 -- threequarters
char190 "
-r? 600,430,157,0,-55 1 0277 questiondown
+r? 600,430,157,0,-55 1 0277 -- questiondown
char191 "
-`A 600,793,0,57,47,57 2 0300 Agrave
+`A 600,793,0,57,47,57 2 0300 -- Agrave
char192 "
-'A 600,793,0,108,47,72 2 0301 Aacute
+'A 600,793,0,108,47,72 2 0301 -- Aacute
char193 "
-^A 600,775,0,57,47,57 2 0302 Acircumflex
+^A 600,775,0,57,47,57 2 0302 -- Acircumflex
char194 "
-~A 600,732,0,106,47,72 2 0303 Atilde
+~A 600,732,0,106,47,72 2 0303 -- Atilde
char195 "
-:A 600,731,0,57,47,57 2 0304 Adieresis
+:A 600,731,0,57,47,57 2 0304 -- Adieresis
char196 "
-oA 600,753,0,57,47,57 2 0305 Aring
+oA 600,753,0,57,47,57 2 0305 -- Aring
char197 "
-AE 600,562,0,105,47,72 2 0306 AE
+AE 600,562,0,105,47,72 2 0306 -- AE
char198 "
-,C 600,580,151,108,-43,72 2 0307 Ccedilla
+,C 600,580,151,108,-43,72 2 0307 -- Ccedilla
char199 "
-`E 600,793,0,110,-3,72 2 0310 Egrave
+`E 600,793,0,110,-3,72 2 0310 -- Egrave
char200 "
-'E 600,793,0,118,-3,72 2 0311 Eacute
+'E 600,793,0,118,-3,72 2 0311 -- Eacute
char201 "
-^E 600,775,0,110,-3,72 2 0312 Ecircumflex
+^E 600,775,0,110,-3,72 2 0312 -- Ecircumflex
char202 "
-:E 600,731,0,110,-3,72 2 0313 Edieresis
+:E 600,731,0,110,-3,72 2 0313 -- Edieresis
char203 "
-`I 600,793,0,73,-46,72 2 0314 Igrave
+`I 600,793,0,73,-46,72 2 0314 -- Igrave
char204 "
-'I 600,793,0,88,-46,72 2 0315 Iacute
+'I 600,793,0,88,-46,72 2 0315 -- Iacute
char205 "
-^I 600,775,0,73,-46,72 2 0316 Icircumflex
+^I 600,775,0,73,-46,72 2 0316 -- Icircumflex
char206 "
-:I 600,731,0,73,-46,72 2 0317 Idieresis
+:I 600,731,0,73,-46,72 2 0317 -- Idieresis
char207 "
--D 600,562,0,95,7,72 2 0320 Eth
+-D 600,562,0,95,7,72 2 0320 -- Eth
char208 "
-~N 600,732,13,162,43,72 2 0321 Ntilde
+~N 600,732,13,162,43,72 2 0321 -- Ntilde
char209 "
-`O 600,793,18,75,-44,72 2 0322 Ograve
+`O 600,793,18,75,-44,72 2 0322 -- Ograve
char210 "
-'O 600,793,18,88,-44,72 2 0323 Oacute
+'O 600,793,18,88,-44,72 2 0323 -- Oacute
char211 "
-^O 600,775,18,75,-44,72 2 0324 Ocircumflex
+^O 600,775,18,75,-44,72 2 0324 -- Ocircumflex
char212 "
-~O 600,732,18,106,-44,72 2 0325 Otilde
+~O 600,732,18,106,-44,72 2 0325 -- Otilde
char213 "
-:O 600,731,18,75,-44,72 2 0326 Odieresis
+: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
+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
+`U 600,793,18,152,-75,72 2 0331 -- Ugrave
char217 "
-'U 600,793,18,152,-75,72 2 0332 Uacute
+'U 600,793,18,152,-75,72 2 0332 -- Uacute
char218 "
-^U 600,775,18,152,-75,72 2 0333 Ucircumflex
+^U 600,775,18,152,-75,72 2 0333 -- Ucircumflex
char219 "
-:U 600,731,18,152,-75,72 2 0334 Udieresis
+:U 600,731,18,152,-75,72 2 0334 -- Udieresis
char220 "
-'Y 600,793,0,145,-83,72 2 0335 Yacute
+'Y 600,793,0,145,-83,72 2 0335 -- Yacute
char221 "
-TP 600,562,0,56,-29,56 2 0336 Thorn
+TP 600,562,0,56,-29,56 2 0336 -- Thorn
char222 "
-ss 600,629,15,67,2,67 2 0337 germandbls
+ss 600,629,15,67,2,67 2 0337 -- germandbls
char223 "
-`a 600,672,15,19,-26,19 2 0340 agrave
+`a 600,672,15,19,-26,19 2 0340 -- agrave
char224 "
-'a 600,672,15,62,-26,62 2 0341 aacute
+'a 600,672,15,62,-26,62 2 0341 -- aacute
char225 "
-^a 600,654,15,31,-26,31 2 0342 acircumflex
+^a 600,654,15,31,-26,31 2 0342 -- acircumflex
char226 "
-~a 600,606,15,79,-26,72 2 0343 atilde
+~a 600,606,15,79,-26,72 2 0343 -- atilde
char227 "
-:a 600,595,15,20,-26,20 2 0344 adieresis
+:a 600,595,15,20,-26,20 2 0344 -- adieresis
char228 "
-oa 600,627,15,19,-26,19 2 0345 aring
+oa 600,627,15,19,-26,19 2 0345 -- aring
char229 "
-ae 600,441,15,76,9,72 0 0346 ae
+ae 600,441,15,76,9,72 0 0346 -- ae
char230 "
-,c 600,441,151,64,-56,64 0 0347 ccedilla
+,c 600,441,151,64,-56,64 0 0347 -- ccedilla
char231 "
-`e 600,672,15,48,-56,48 2 0350 egrave
+`e 600,672,15,48,-56,48 2 0350 -- egrave
char232 "
-'e 600,672,15,62,-56,62 2 0351 eacute
+'e 600,672,15,62,-56,62 2 0351 -- eacute
char233 "
-^e 600,654,15,48,-56,48 2 0352 ecircumflex
+^e 600,654,15,48,-56,48 2 0352 -- ecircumflex
char234 "
-:e 600,595,15,48,-56,48 2 0353 edieresis
+:e 600,595,15,48,-56,48 2 0353 -- edieresis
char235 "
-`i 600,672,0,0,-45 2 0354 igrave
+`i 600,672,0,0,-45 2 0354 -- igrave
char236 "
-'i 600,672,0,62,-45,62 2 0355 iacute
+'i 600,672,0,62,-45,62 2 0355 -- iacute
char237 "
-^i 600,654,0,1,-45,1 2 0356 icircumflex
+^i 600,654,0,1,-45,1 2 0356 -- icircumflex
char238 "
-:i 600,595,0,0,-45 2 0357 idieresis
+:i 600,595,0,0,-45 2 0357 -- idieresis
char239 "
-Sd 600,629,15,89,-52,72 2 0360 eth
+Sd 600,629,15,89,-52,72 2 0360 -- eth
char240 "
-~n 600,606,0,79,24,72 2 0361 ntilde
+~n 600,606,0,79,24,72 2 0361 -- ntilde
char241 "
-`o 600,672,15,38,-52,38 2 0362 ograve
+`o 600,672,15,38,-52,38 2 0362 -- ograve
char242 "
-'o 600,672,15,62,-52,62 2 0363 oacute
+'o 600,672,15,62,-52,62 2 0363 -- oacute
char243 "
-^o 600,654,15,38,-52,38 2 0364 ocircumflex
+^o 600,654,15,38,-52,38 2 0364 -- ocircumflex
char244 "
-~o 600,606,15,79,-52,72 2 0365 otilde
+~o 600,606,15,79,-52,72 2 0365 -- otilde
char245 "
-:o 600,595,15,38,-52,38 2 0366 odieresis
+: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
+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
+`u 600,672,15,22,-51,22 2 0371 -- ugrave
char249 "
-'u 600,672,15,52,-51,52 2 0372 uacute
+'u 600,672,15,52,-51,52 2 0372 -- uacute
char250 "
-^u 600,654,15,22,-51,22 2 0373 ucircumflex
+^u 600,654,15,22,-51,22 2 0373 -- ucircumflex
char251 "
-:u 600,595,15,22,-51,22 2 0374 udieresis
+:u 600,595,15,22,-51,22 2 0374 -- udieresis
char252 "
-'y 600,672,157,133,54,72 3 0375 yacute
+'y 600,672,157,133,54,72 3 0375 -- yacute
char253 "
-Tp 600,629,157,55,74,55 3 0376 thorn
+Tp 600,629,157,55,74,55 3 0376 -- thorn
char254 "
-:y 600,595,157,133,54,72 3 0377 ydieresis
+:y 600,595,157,133,54,72 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/CR b/contrib/groff/devps/CR
index c6a92a16d973..fc3c91e090c4 100644
--- a/contrib/groff/devps/CR
+++ b/contrib/groff/devps/CR
@@ -3,334 +3,337 @@ 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
+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
-# 600,639,32 2 0043 numbersign
+! 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
+$ 600,662,126 2 0044 -- dollar
Do "
-% 600,622,15 2 0045 percent
-& 600,543,15 0 0046 ampersand
-' 600,562 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 600,629,80 2 0134 -- backslash
rs "
-] 600,622,108 2 0135 bracketright
+] 600,622,108 2 0135 -- bracketright
rB "
-a^ 600,654 2 0136 circumflex
+a^ 600,654 2 0136 -- circumflex
^ "
-_ 600,0,125 0 0137 underscore
-` 600,562 2 0140 quoteleft
+_ 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
+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
+ba 600,750,250 3 0174 -- bar
| "
-rC 600,622,108 2 0175 braceright
+rC 600,622,108 2 0175 -- braceright
} "
-a~ 600,606 2 0176 tilde
+a~ 600,606 2 0176 -- tilde
~ "
-bq 600,100,134 0 0200 quotesinglbase
-Fo 600,446 0 0201 guillemotleft
+bq 600,100,134 0 0200 -- quotesinglbase
+Fo 600,446 0 0201 -- guillemotleft
char171 "
-Fc 600,446 0 0202 guillemotright
+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
+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
+ct 600,614,49 2 0242 -- cent
char162 "
-Po 600,611,21 2 0243 sterling
+Po 600,611,21 2 0243 -- sterling
char163 "
-Cs 600,506 0 0244 currency
+Cs 600,506 0 0244 -- currency
char164 "
-Ye 600,562 2 0245 yen
+Ye 600,562 2 0245 -- yen
char165 "
-bb 600,675,175 3 0246 brokenbar
+bb 600,675,175 3 0246 -- brokenbar
char166 "
-sc 600,580,78 2 0247 section
+sc 600,580,78 2 0247 -- section
char167 "
-ad 600,595 2 0250 dieresis
+ad 600,595 2 0250 -- dieresis
char168 "
-co 600,580,18 2 0251 copyright
+co 600,580,18 2 0251 -- copyright
char169 "
-Of 600,580 2 0252 ordfeminine
+Of 600,580 2 0252 -- ordfeminine
char170 "
-fo 600,446 0 0253 guilsinglleft
-no 600,369 0 0254 logicalnot
+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
+\- 600,283 0 0255 -- minus
+rg 600,580,18 2 0256 -- registered
char174 "
-a- 600,565 2 0257 macron
+a- 600,565 2 0257 -- macron
char175 "
-de 600,622 2 0260 degree
+de 600,622 2 0260 -- degree
char176 "
-char177 600,558 0 0261 plusminus
-S2 600,622 2 0262 twosuperior
+char177 600,558 0 0261 -- plusminus
+S2 600,622 2 0262 -- twosuperior
char178 "
-S3 600,622 2 0263 threesuperior
+S3 600,622 2 0263 -- threesuperior
char179 "
-aa 600,672 2 0264 acute
+aa 600,672 2 0264 -- acute
char180 "
-char181 600,426,157 1 0265 mu
-ps 600,562,78 2 0266 paragraph
+char181 600,426,157 1 0265 -- mu
+ps 600,562,78 2 0266 -- paragraph
char182 "
-char183 600,327 0 0267 periodcentered
-ac 600,10,151 0 0270 cedilla
+pc 600,327 0 0267 -- periodcentered
+char183 "
+ac 600,10,151 0 0270 -- cedilla
char184 "
-S1 600,622 2 0271 onesuperior
+S1 600,622 2 0271 -- onesuperior
char185 "
-Om 600,580 2 0272 ordmasculine
+Om 600,580 2 0272 -- ordmasculine
char186 "
-fc 600,446 0 0273 guilsinglright
-14 600,665,57 2 0274 onequarter
+fc 600,446 0 0273 -- guilsinglright
+14 600,665,57 2 0274 -- onequarter
char188 "
-12 600,665,57 2 0275 onehalf
+12 600,665,57 2 0275 -- onehalf
char189 "
-34 600,666,56 2 0276 threequarters
+34 600,666,56 2 0276 -- threequarters
char190 "
-r? 600,430,157 1 0277 questiondown
+r? 600,430,157 1 0277 -- questiondown
char191 "
-`A 600,793 2 0300 Agrave
+`A 600,793 2 0300 -- Agrave
char192 "
-'A 600,793 2 0301 Aacute
+'A 600,793 2 0301 -- Aacute
char193 "
-^A 600,775 2 0302 Acircumflex
+^A 600,775 2 0302 -- Acircumflex
char194 "
-~A 600,732 2 0303 Atilde
+~A 600,732 2 0303 -- Atilde
char195 "
-:A 600,731 2 0304 Adieresis
+:A 600,731 2 0304 -- Adieresis
char196 "
-oA 600,753 2 0305 Aring
+oA 600,753 2 0305 -- Aring
char197 "
-AE 600,562 2 0306 AE
+AE 600,562 2 0306 -- AE
char198 "
-,C 600,580,151 2 0307 Ccedilla
+,C 600,580,151 2 0307 -- Ccedilla
char199 "
-`E 600,793 2 0310 Egrave
+`E 600,793 2 0310 -- Egrave
char200 "
-'E 600,793 2 0311 Eacute
+'E 600,793 2 0311 -- Eacute
char201 "
-^E 600,775 2 0312 Ecircumflex
+^E 600,775 2 0312 -- Ecircumflex
char202 "
-:E 600,731 2 0313 Edieresis
+:E 600,731 2 0313 -- Edieresis
char203 "
-`I 600,793 2 0314 Igrave
+`I 600,793 2 0314 -- Igrave
char204 "
-'I 600,793 2 0315 Iacute
+'I 600,793 2 0315 -- Iacute
char205 "
-^I 600,775 2 0316 Icircumflex
+^I 600,775 2 0316 -- Icircumflex
char206 "
-:I 600,731 2 0317 Idieresis
+:I 600,731 2 0317 -- Idieresis
char207 "
--D 600,562 2 0320 Eth
+-D 600,562 2 0320 -- Eth
char208 "
-~N 600,732,13 2 0321 Ntilde
+~N 600,732,13 2 0321 -- Ntilde
char209 "
-`O 600,793,18 2 0322 Ograve
+`O 600,793,18 2 0322 -- Ograve
char210 "
-'O 600,793,18 2 0323 Oacute
+'O 600,793,18 2 0323 -- Oacute
char211 "
-^O 600,775,18 2 0324 Ocircumflex
+^O 600,775,18 2 0324 -- Ocircumflex
char212 "
-~O 600,732,18 2 0325 Otilde
+~O 600,732,18 2 0325 -- Otilde
char213 "
-:O 600,731,18 2 0326 Odieresis
+:O 600,731,18 2 0326 -- Odieresis
char214 "
-char215 600,470 0 0327 multiply
-/O 600,629,80 2 0330 Oslash
+char215 600,470 0 0327 -- multiply
+/O 600,629,80 2 0330 -- Oslash
char216 "
-`U 600,793,18 2 0331 Ugrave
+`U 600,793,18 2 0331 -- Ugrave
char217 "
-'U 600,793,18 2 0332 Uacute
+'U 600,793,18 2 0332 -- Uacute
char218 "
-^U 600,775,18 2 0333 Ucircumflex
+^U 600,775,18 2 0333 -- Ucircumflex
char219 "
-:U 600,731,18 2 0334 Udieresis
+:U 600,731,18 2 0334 -- Udieresis
char220 "
-'Y 600,793 2 0335 Yacute
+'Y 600,793 2 0335 -- Yacute
char221 "
-TP 600,562 2 0336 Thorn
+TP 600,562 2 0336 -- Thorn
char222 "
-ss 600,629,15 2 0337 germandbls
+ss 600,629,15 2 0337 -- germandbls
char223 "
-`a 600,672,15 2 0340 agrave
+`a 600,672,15 2 0340 -- agrave
char224 "
-'a 600,672,15 2 0341 aacute
+'a 600,672,15 2 0341 -- aacute
char225 "
-^a 600,654,15 2 0342 acircumflex
+^a 600,654,15 2 0342 -- acircumflex
char226 "
-~a 600,606,15 2 0343 atilde
+~a 600,606,15 2 0343 -- atilde
char227 "
-:a 600,595,15 2 0344 adieresis
+:a 600,595,15 2 0344 -- adieresis
char228 "
-oa 600,627,15 2 0345 aring
+oa 600,627,15 2 0345 -- aring
char229 "
-ae 600,441,15 0 0346 ae
+ae 600,441,15 0 0346 -- ae
char230 "
-,c 600,441,151 0 0347 ccedilla
+,c 600,441,151 0 0347 -- ccedilla
char231 "
-`e 600,672,15 2 0350 egrave
+`e 600,672,15 2 0350 -- egrave
char232 "
-'e 600,672,15 2 0351 eacute
+'e 600,672,15 2 0351 -- eacute
char233 "
-^e 600,654,15 2 0352 ecircumflex
+^e 600,654,15 2 0352 -- ecircumflex
char234 "
-:e 600,595,15 2 0353 edieresis
+:e 600,595,15 2 0353 -- edieresis
char235 "
-`i 600,672 2 0354 igrave
+`i 600,672 2 0354 -- igrave
char236 "
-'i 600,672 2 0355 iacute
+'i 600,672 2 0355 -- iacute
char237 "
-^i 600,654 2 0356 icircumflex
+^i 600,654 2 0356 -- icircumflex
char238 "
-:i 600,595 2 0357 idieresis
+:i 600,595 2 0357 -- idieresis
char239 "
-Sd 600,629,15 2 0360 eth
+Sd 600,629,15 2 0360 -- eth
char240 "
-~n 600,606 2 0361 ntilde
+~n 600,606 2 0361 -- ntilde
char241 "
-`o 600,672,15 2 0362 ograve
+`o 600,672,15 2 0362 -- ograve
char242 "
-'o 600,672,15 2 0363 oacute
+'o 600,672,15 2 0363 -- oacute
char243 "
-^o 600,654,15 2 0364 ocircumflex
+^o 600,654,15 2 0364 -- ocircumflex
char244 "
-~o 600,606,15 2 0365 otilde
+~o 600,606,15 2 0365 -- otilde
char245 "
-:o 600,595,15 2 0366 odieresis
+:o 600,595,15 2 0366 -- odieresis
char246 "
-char247 600,467 0 0367 divide
-/o 600,506,80 0 0370 oslash
+char247 600,467 0 0367 -- divide
+/o 600,506,80 0 0370 -- oslash
char248 "
-`u 600,672,15 2 0371 ugrave
+`u 600,672,15 2 0371 -- ugrave
char249 "
-'u 600,672,15 2 0372 uacute
+'u 600,672,15 2 0372 -- uacute
char250 "
-^u 600,654,15 2 0373 ucircumflex
+^u 600,654,15 2 0373 -- ucircumflex
char251 "
-:u 600,595,15 2 0374 udieresis
+:u 600,595,15 2 0374 -- udieresis
char252 "
-'y 600,672,157 3 0375 yacute
+'y 600,672,157 3 0375 -- yacute
char253 "
-Tp 600,629,157 3 0376 thorn
+Tp 600,629,157 3 0376 -- thorn
char254 "
-:y 600,595,157 3 0377 ydieresis
+:y 600,595,157 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HB b/contrib/groff/devps/HB
index 8c2ed083a390..96e022eebd4e 100644
--- a/contrib/groff/devps/HB
+++ b/contrib/groff/devps/HB
@@ -40,6 +40,7 @@ K e -15
K O -30
L y -30
L ' -140
+L cq -140
L rq -140
L Y -120
L W -80
@@ -138,6 +139,7 @@ c l -20
c k -20
c h -10
, ' -120
+, cq -120
, rq -120
d y -15
d w -15
@@ -150,6 +152,7 @@ e v -15
e . 20
e , 10
f ' 30
+f cq 30
f rq 30
f . -10
f o -20
@@ -172,17 +175,26 @@ 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
@@ -213,334 +225,337 @@ 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
+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
-# 556,698 2 0043 numbersign
+! 333,718 2 0041 -- exclam
+" 474,718 2 0042 -- quotedbl
+dq "
+# 556,698 2 0043 -- numbersign
sh "
-$ 556,775,115 2 0044 dollar
+$ 556,775,115 2 0044 -- dollar
Do "
-% 889,710,19 2 0045 percent
-& 722,718,19 2 0046 ampersand
-' 278,718 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 278,737,19 2 0134 -- backslash
rs "
-] 333,722,196 2 0135 bracketright
+] 333,722,196 2 0135 -- bracketright
rB "
-a^ 333,750 2 0136 circumflex
+a^ 333,750 2 0136 -- circumflex
^ "
-_ 556,0,125 0 0137 underscore
-` 278,727 2 0140 quoteleft
+_ 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
+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
+ba 280,737,19 2 0174 -- bar
| "
-rC 389,722,196 2 0175 braceright
+rC 389,722,196 2 0175 -- braceright
} "
-a~ 333,737 2 0176 tilde
+a~ 333,737 2 0176 -- tilde
~ "
-bq 278,127,146 0 0200 quotesinglbase
-Fo 556,484 0 0201 guillemotleft
+bq 278,127,146 0 0200 -- quotesinglbase
+Fo 556,484 0 0201 -- guillemotleft
char171 "
-Fc 556,484 0 0202 guillemotright
+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
+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
+ct 556,628,118 0 0242 -- cent
char162 "
-Po 556,718,16 2 0243 sterling
+Po 556,718,16 2 0243 -- sterling
char163 "
-Cs 556,636 0 0244 currency
+Cs 556,636 0 0244 -- currency
char164 "
-Ye 556,698 2 0245 yen
+Ye 556,698 2 0245 -- yen
char165 "
-bb 280,737,19 2 0246 brokenbar
+bb 280,737,19 2 0246 -- brokenbar
char166 "
-sc 556,727,184 2 0247 section
+sc 556,727,184 2 0247 -- section
char167 "
-ad 333,729 2 0250 dieresis
+ad 333,729 2 0250 -- dieresis
char168 "
-co 737,737,19 2 0251 copyright
+co 737,737,19 2 0251 -- copyright
char169 "
-Of 370,737 2 0252 ordfeminine
+Of 370,737 2 0252 -- ordfeminine
char170 "
-fo 333,484 0 0253 guilsinglleft
-no 584,419 0 0254 logicalnot
+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
+\- 584,309 0 0255 -- minus
+rg 737,737,19 2 0256 -- registered
char174 "
-a- 333,678 2 0257 macron
+a- 333,678 2 0257 -- macron
char175 "
-de 400,712 2 0260 degree
+de 400,712 2 0260 -- degree
char176 "
-char177 584,506 0 0261 plusminus
-S2 333,710 2 0262 twosuperior
+char177 584,506 0 0261 -- plusminus
+S2 333,710 2 0262 -- twosuperior
char178 "
-S3 333,710 2 0263 threesuperior
+S3 333,710 2 0263 -- threesuperior
char179 "
-aa 333,750 2 0264 acute
+aa 333,750 2 0264 -- acute
char180 "
-char181 611,532,207 1 0265 mu
-ps 556,700,191 2 0266 paragraph
+char181 611,532,207 1 0265 -- mu
+ps 556,700,191 2 0266 -- paragraph
char182 "
-char183 278,334 0 0267 periodcentered
-ac 333,0,228 1 0270 cedilla
+pc 278,334 0 0267 -- periodcentered
+char183 "
+ac 333,0,228 1 0270 -- cedilla
char184 "
-S1 333,710 2 0271 onesuperior
+S1 333,710 2 0271 -- onesuperior
char185 "
-Om 365,737 2 0272 ordmasculine
+Om 365,737 2 0272 -- ordmasculine
char186 "
-fc 333,484 0 0273 guilsinglright
-14 834,710,19 2 0274 onequarter
+fc 333,484 0 0273 -- guilsinglright
+14 834,710,19 2 0274 -- onequarter
char188 "
-12 834,710,19 2 0275 onehalf
+12 834,710,19 2 0275 -- onehalf
char189 "
-34 834,710,19 2 0276 threequarters
+34 834,710,19 2 0276 -- threequarters
char190 "
-r? 611,532,195 0 0277 questiondown
+r? 611,532,195 0 0277 -- questiondown
char191 "
-`A 722,936 2 0300 Agrave
+`A 722,936 2 0300 -- Agrave
char192 "
-'A 722,936 2 0301 Aacute
+'A 722,936 2 0301 -- Aacute
char193 "
-^A 722,936 2 0302 Acircumflex
+^A 722,936 2 0302 -- Acircumflex
char194 "
-~A 722,923 2 0303 Atilde
+~A 722,923 2 0303 -- Atilde
char195 "
-:A 722,915 2 0304 Adieresis
+:A 722,915 2 0304 -- Adieresis
char196 "
-oA 722,962 2 0305 Aring
+oA 722,962 2 0305 -- Aring
char197 "
-AE 1000,718 2 0306 AE
+AE 1000,718 2 0306 -- AE
char198 "
-,C 722,737,228 3 0307 Ccedilla
+,C 722,737,228 3 0307 -- Ccedilla
char199 "
-`E 667,936 2 0310 Egrave
+`E 667,936 2 0310 -- Egrave
char200 "
-'E 667,936 2 0311 Eacute
+'E 667,936 2 0311 -- Eacute
char201 "
-^E 667,936 2 0312 Ecircumflex
+^E 667,936 2 0312 -- Ecircumflex
char202 "
-:E 667,915 2 0313 Edieresis
+:E 667,915 2 0313 -- Edieresis
char203 "
-`I 278,936 2 0314 Igrave
+`I 278,936 2 0314 -- Igrave
char204 "
-'I 278,936 2 0315 Iacute
+'I 278,936 2 0315 -- Iacute
char205 "
-^I 278,936 2 0316 Icircumflex
+^I 278,936 2 0316 -- Icircumflex
char206 "
-:I 278,915 2 0317 Idieresis
+:I 278,915 2 0317 -- Idieresis
char207 "
--D 722,718 2 0320 Eth
+-D 722,718 2 0320 -- Eth
char208 "
-~N 722,923 2 0321 Ntilde
+~N 722,923 2 0321 -- Ntilde
char209 "
-`O 778,936,19 2 0322 Ograve
+`O 778,936,19 2 0322 -- Ograve
char210 "
-'O 778,936,19 2 0323 Oacute
+'O 778,936,19 2 0323 -- Oacute
char211 "
-^O 778,936,19 2 0324 Ocircumflex
+^O 778,936,19 2 0324 -- Ocircumflex
char212 "
-~O 778,923,19 2 0325 Otilde
+~O 778,923,19 2 0325 -- Otilde
char213 "
-:O 778,915,19 2 0326 Odieresis
+:O 778,915,19 2 0326 -- Odieresis
char214 "
-char215 584,505 0 0327 multiply
-/O 778,745,27 2 0330 Oslash
+char215 584,505 0 0327 -- multiply
+/O 778,745,27 2 0330 -- Oslash
char216 "
-`U 722,936,19 2 0331 Ugrave
+`U 722,936,19 2 0331 -- Ugrave
char217 "
-'U 722,936,19 2 0332 Uacute
+'U 722,936,19 2 0332 -- Uacute
char218 "
-^U 722,936,19 2 0333 Ucircumflex
+^U 722,936,19 2 0333 -- Ucircumflex
char219 "
-:U 722,915,19 2 0334 Udieresis
+:U 722,915,19 2 0334 -- Udieresis
char220 "
-'Y 667,936 2 0335 Yacute
+'Y 667,936 2 0335 -- Yacute
char221 "
-TP 667,718 2 0336 Thorn
+TP 667,718 2 0336 -- Thorn
char222 "
-ss 611,731,14 2 0337 germandbls
+ss 611,731,14 2 0337 -- germandbls
char223 "
-`a 556,750,14 2 0340 agrave
+`a 556,750,14 2 0340 -- agrave
char224 "
-'a 556,750,14 2 0341 aacute
+'a 556,750,14 2 0341 -- aacute
char225 "
-^a 556,750,14 2 0342 acircumflex
+^a 556,750,14 2 0342 -- acircumflex
char226 "
-~a 556,737,14 2 0343 atilde
+~a 556,737,14 2 0343 -- atilde
char227 "
-:a 556,729,14 2 0344 adieresis
+:a 556,729,14 2 0344 -- adieresis
char228 "
-oa 556,776,14 2 0345 aring
+oa 556,776,14 2 0345 -- aring
char229 "
-ae 889,546,14 0 0346 ae
+ae 889,546,14 0 0346 -- ae
char230 "
-,c 556,546,228 1 0347 ccedilla
+,c 556,546,228 1 0347 -- ccedilla
char231 "
-`e 556,750,14 2 0350 egrave
+`e 556,750,14 2 0350 -- egrave
char232 "
-'e 556,750,14 2 0351 eacute
+'e 556,750,14 2 0351 -- eacute
char233 "
-^e 556,750,14 2 0352 ecircumflex
+^e 556,750,14 2 0352 -- ecircumflex
char234 "
-:e 556,729,14 2 0353 edieresis
+:e 556,729,14 2 0353 -- edieresis
char235 "
-`i 278,750 2 0354 igrave
+`i 278,750 2 0354 -- igrave
char236 "
-'i 278,750 2 0355 iacute
+'i 278,750 2 0355 -- iacute
char237 "
-^i 278,750 2 0356 icircumflex
+^i 278,750 2 0356 -- icircumflex
char238 "
-:i 278,729 2 0357 idieresis
+:i 278,729 2 0357 -- idieresis
char239 "
-Sd 611,737,14 2 0360 eth
+Sd 611,737,14 2 0360 -- eth
char240 "
-~n 611,737 2 0361 ntilde
+~n 611,737 2 0361 -- ntilde
char241 "
-`o 611,750,14 2 0362 ograve
+`o 611,750,14 2 0362 -- ograve
char242 "
-'o 611,750,14 2 0363 oacute
+'o 611,750,14 2 0363 -- oacute
char243 "
-^o 611,750,14 2 0364 ocircumflex
+^o 611,750,14 2 0364 -- ocircumflex
char244 "
-~o 611,737,14 2 0365 otilde
+~o 611,737,14 2 0365 -- otilde
char245 "
-:o 611,729,14 2 0366 odieresis
+:o 611,729,14 2 0366 -- odieresis
char246 "
-char247 584,548,42 0 0367 divide
-/o 611,560,29 0 0370 oslash
+char247 584,548,42 0 0367 -- divide
+/o 611,560,29 0 0370 -- oslash
char248 "
-`u 611,750,14 2 0371 ugrave
+`u 611,750,14 2 0371 -- ugrave
char249 "
-'u 611,750,14 2 0372 uacute
+'u 611,750,14 2 0372 -- uacute
char250 "
-^u 611,750,14 2 0373 ucircumflex
+^u 611,750,14 2 0373 -- ucircumflex
char251 "
-:u 611,729,14 2 0374 udieresis
+:u 611,729,14 2 0374 -- udieresis
char252 "
-'y 556,750,214 3 0375 yacute
+'y 556,750,214 3 0375 -- yacute
char253 "
-Tp 611,718,208 3 0376 thorn
+Tp 611,718,208 3 0376 -- thorn
char254 "
-:y 556,729,214 3 0377 ydieresis
+:y 556,729,214 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HBI b/contrib/groff/devps/HBI
index 595e58f90f32..a12e389a7daa 100644
--- a/contrib/groff/devps/HBI
+++ b/contrib/groff/devps/HBI
@@ -41,6 +41,7 @@ K e -15
K O -30
L y -30
L ' -140
+L cq -140
L rq -140
L Y -120
L W -80
@@ -139,6 +140,7 @@ c l -20
c k -20
c h -10
, ' -120
+, cq -120
, rq -120
d y -15
d w -15
@@ -151,6 +153,7 @@ e v -15
e . 20
e , 10
f ' 30
+f cq 30
f rq 30
f . -10
f o -20
@@ -173,17 +176,26 @@ 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
@@ -214,334 +226,337 @@ 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
+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
-# 556,698,0,138,-10,90 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 278,737,19,79,-74,79 2 0134 -- backslash
rs "
-] 333,722,196,140,68,90 2 0135 bracketright
+] 333,722,196,140,68,90 2 0135 -- bracketright
rB "
-a^ 333,750,0,188,-68,90 2 0136 circumflex
+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
+_ 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
+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
+ba 280,737,19,123,-30,90 2 0174 -- bar
| "
-rC 389,722,196,68,68,68 2 0175 braceright
+rC 389,722,196,68,68,68 2 0175 -- braceright
} "
-a~ 333,737,0,224,-63,90 2 0176 tilde
+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
+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
+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
+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
+ct 556,628,118,93,-29,90 0 0242 -- cent
char162 "
-Po 556,718,16,129,0,90 2 0243 sterling
+Po 556,718,16,129,0,90 2 0243 -- sterling
char163 "
-Cs 556,636,0,174,23,90 0 0244 currency
+Cs 556,636,0,174,23,90 0 0244 -- currency
char164 "
-Ye 556,698,0,207,-10,90 2 0245 yen
+Ye 556,698,0,207,-10,90 2 0245 -- yen
char165 "
-bb 280,737,19,123,-30,90 2 0246 brokenbar
+bb 280,737,19,123,-30,90 2 0246 -- brokenbar
char166 "
-sc 556,727,184,92,-11,90 2 0247 section
+sc 556,727,184,92,-11,90 2 0247 -- section
char167 "
-ad 333,729,0,199,-87,90 2 0250 dieresis
+ad 333,729,0,199,-87,90 2 0250 -- dieresis
char168 "
-co 737,737,19,148,-6,90 2 0251 copyright
+co 737,737,19,148,-6,90 2 0251 -- copyright
char169 "
-Of 370,737,0,145,-42,90 2 0252 ordfeminine
+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
+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
+\- 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
+a- 333,678,0,200,-72,90 2 0257 -- macron
char175 "
-de 400,712,0,117,-125,90 2 0260 degree
+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
+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
+S3 333,710,0,158,-41,90 2 0263 -- threesuperior
char179 "
-aa 333,750,0,232,-186,90 2 0264 acute
+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
+char181 611,532,207,97,28,90 1 0265 -- mu
+ps 556,700,191,182,-48,90 2 0266 -- paragraph
char182 "
-char183 278,334,0,48,-60,48 0 0267 periodcentered
-ac 333,0,228,0,87 1 0270 cedilla
+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
+S1 333,710,0,105,-98,90 2 0271 -- onesuperior
char185 "
-Om 365,737,0,170,-42,90 2 0272 ordmasculine
+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
+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
+12 834,710,19,74,-82,74 2 0275 -- onehalf
char189 "
-34 834,710,19,55,-49,55 2 0276 threequarters
+34 834,710,19,55,-49,55 2 0276 -- threequarters
char190 "
-r? 611,532,195,0,-3 0 0277 questiondown
+r? 611,532,195,0,-3 0 0277 -- questiondown
char191 "
-`A 722,936,0,30,30,30 2 0300 Agrave
+`A 722,936,0,30,30,30 2 0300 -- Agrave
char192 "
-'A 722,936,0,78,30,78 2 0301 Aacute
+'A 722,936,0,78,30,78 2 0301 -- Aacute
char193 "
-^A 722,936,0,34,30,34 2 0302 Acircumflex
+^A 722,936,0,34,30,34 2 0302 -- Acircumflex
char194 "
-~A 722,923,0,69,30,69 2 0303 Atilde
+~A 722,923,0,69,30,69 2 0303 -- Atilde
char195 "
-:A 722,915,0,44,30,44 2 0304 Adieresis
+:A 722,915,0,44,30,44 2 0304 -- Adieresis
char196 "
-oA 722,962,0,30,30,30 2 0305 Aring
+oA 722,962,0,30,30,30 2 0305 -- Aring
char197 "
-AE 1000,718,0,150,45,90 2 0306 AE
+AE 1000,718,0,150,45,90 2 0306 -- AE
char198 "
-,C 722,737,228,117,-57,90 3 0307 Ccedilla
+,C 722,737,228,117,-57,90 3 0307 -- Ccedilla
char199 "
-`E 667,936,0,140,-26,90 2 0310 Egrave
+`E 667,936,0,140,-26,90 2 0310 -- Egrave
char200 "
-'E 667,936,0,140,-26,90 2 0311 Eacute
+'E 667,936,0,140,-26,90 2 0311 -- Eacute
char201 "
-^E 667,936,0,140,-26,90 2 0312 Ecircumflex
+^E 667,936,0,140,-26,90 2 0312 -- Ecircumflex
char202 "
-:E 667,915,0,140,-26,90 2 0313 Edieresis
+:E 667,915,0,140,-26,90 2 0313 -- Edieresis
char203 "
-`I 278,936,0,139,-14,90 2 0314 Igrave
+`I 278,936,0,139,-14,90 2 0314 -- Igrave
char204 "
-'I 278,936,0,300,-14,90 2 0315 Iacute
+'I 278,936,0,300,-14,90 2 0315 -- Iacute
char205 "
-^I 278,936,0,256,-14,90 2 0316 Icircumflex
+^I 278,936,0,256,-14,90 2 0316 -- Icircumflex
char206 "
-:I 278,915,0,266,-14,90 2 0317 Idieresis
+:I 278,915,0,266,-14,90 2 0317 -- Idieresis
char207 "
--D 722,718,0,105,-12,90 2 0320 Eth
+-D 722,718,0,105,-12,90 2 0320 -- Eth
char208 "
-~N 722,923,0,135,-19,90 2 0321 Ntilde
+~N 722,923,0,135,-19,90 2 0321 -- Ntilde
char209 "
-`O 778,936,19,95,-57,90 2 0322 Ograve
+`O 778,936,19,95,-57,90 2 0322 -- Ograve
char210 "
-'O 778,936,19,95,-57,90 2 0323 Oacute
+'O 778,936,19,95,-57,90 2 0323 -- Oacute
char211 "
-^O 778,936,19,95,-57,90 2 0324 Ocircumflex
+^O 778,936,19,95,-57,90 2 0324 -- Ocircumflex
char212 "
-~O 778,923,19,95,-57,90 2 0325 Otilde
+~O 778,923,19,95,-57,90 2 0325 -- Otilde
char213 "
-:O 778,915,19,95,-57,90 2 0326 Odieresis
+: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
+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
+`U 722,936,19,132,-66,90 2 0331 -- Ugrave
char217 "
-'U 722,936,19,132,-66,90 2 0332 Uacute
+'U 722,936,19,132,-66,90 2 0332 -- Uacute
char218 "
-^U 722,936,19,132,-66,90 2 0333 Ucircumflex
+^U 722,936,19,132,-66,90 2 0333 -- Ucircumflex
char219 "
-:U 722,915,19,132,-66,90 2 0334 Udieresis
+:U 722,915,19,132,-66,90 2 0334 -- Udieresis
char220 "
-'Y 667,936,0,189,-118,90 2 0335 Yacute
+'Y 667,936,0,189,-118,90 2 0335 -- Yacute
char221 "
-TP 667,718,0,99,-26,90 2 0336 Thorn
+TP 667,718,0,99,-26,90 2 0336 -- Thorn
char222 "
-ss 611,731,14,96,-19,90 2 0337 germandbls
+ss 611,731,14,96,-19,90 2 0337 -- germandbls
char223 "
-`a 556,750,14,77,-5,77 2 0340 agrave
+`a 556,750,14,77,-5,77 2 0340 -- agrave
char224 "
-'a 556,750,14,121,-5,90 2 0341 aacute
+'a 556,750,14,121,-5,90 2 0341 -- aacute
char225 "
-^a 556,750,14,77,-5,77 2 0342 acircumflex
+^a 556,750,14,77,-5,77 2 0342 -- acircumflex
char226 "
-~a 556,737,14,113,-5,90 2 0343 atilde
+~a 556,737,14,113,-5,90 2 0343 -- atilde
char227 "
-:a 556,729,14,88,-5,88 2 0344 adieresis
+:a 556,729,14,88,-5,88 2 0344 -- adieresis
char228 "
-oa 556,776,14,77,-5,77 2 0345 aring
+oa 556,776,14,77,-5,77 2 0345 -- aring
char229 "
-ae 889,546,14,84,-6,84 0 0346 ae
+ae 889,546,14,84,-6,84 0 0346 -- ae
char230 "
-,c 556,546,228,93,-29,90 1 0347 ccedilla
+,c 556,546,228,93,-29,90 1 0347 -- ccedilla
char231 "
-`e 556,750,14,87,-20,87 2 0350 egrave
+`e 556,750,14,87,-20,87 2 0350 -- egrave
char232 "
-'e 556,750,14,121,-20,90 2 0351 eacute
+'e 556,750,14,121,-20,90 2 0351 -- eacute
char233 "
-^e 556,750,14,87,-20,87 2 0352 ecircumflex
+^e 556,750,14,87,-20,87 2 0352 -- ecircumflex
char234 "
-:e 556,729,14,88,-20,88 2 0353 edieresis
+:e 556,729,14,88,-20,88 2 0353 -- edieresis
char235 "
-`i 278,750,0,98,-19,90 2 0354 igrave
+`i 278,750,0,98,-19,90 2 0354 -- igrave
char236 "
-'i 278,750,0,260,-19,90 2 0355 iacute
+'i 278,750,0,260,-19,90 2 0355 -- iacute
char237 "
-^i 278,750,0,216,-19,90 2 0356 icircumflex
+^i 278,750,0,216,-19,90 2 0356 -- icircumflex
char238 "
-:i 278,729,0,227,-19,90 2 0357 idieresis
+:i 278,729,0,227,-19,90 2 0357 -- idieresis
char239 "
-Sd 611,737,14,109,-32,90 2 0360 eth
+Sd 611,737,14,109,-32,90 2 0360 -- eth
char240 "
-~n 611,737,0,85,-15,85 2 0361 ntilde
+~n 611,737,0,85,-15,85 2 0361 -- ntilde
char241 "
-`o 611,750,14,82,-32,82 2 0362 ograve
+`o 611,750,14,82,-32,82 2 0362 -- ograve
char242 "
-'o 611,750,14,93,-32,90 2 0363 oacute
+'o 611,750,14,93,-32,90 2 0363 -- oacute
char243 "
-^o 611,750,14,82,-32,82 2 0364 ocircumflex
+^o 611,750,14,82,-32,82 2 0364 -- ocircumflex
char244 "
-~o 611,737,14,85,-32,85 2 0365 otilde
+~o 611,737,14,85,-32,85 2 0365 -- otilde
char245 "
-:o 611,729,14,82,-32,82 2 0366 odieresis
+: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
+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
+`u 611,750,14,97,-48,90 2 0371 -- ugrave
char249 "
-'u 611,750,14,97,-48,90 2 0372 uacute
+'u 611,750,14,97,-48,90 2 0372 -- uacute
char250 "
-^u 611,750,14,97,-48,90 2 0373 ucircumflex
+^u 611,750,14,97,-48,90 2 0373 -- ucircumflex
char251 "
-:u 611,729,14,97,-48,90 2 0374 udieresis
+:u 611,729,14,97,-48,90 2 0374 -- udieresis
char252 "
-'y 556,750,214,146,8,90 3 0375 yacute
+'y 556,750,214,146,8,90 3 0375 -- yacute
char253 "
-Tp 611,718,208,84,32,84 3 0376 thorn
+Tp 611,718,208,84,32,84 3 0376 -- thorn
char254 "
-:y 556,729,214,146,8,90 3 0377 ydieresis
+:y 556,729,214,146,8,90 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HI b/contrib/groff/devps/HI
index bfdcb3280887..1846122f9581 100644
--- a/contrib/groff/devps/HI
+++ b/contrib/groff/devps/HI
@@ -48,6 +48,7 @@ K e -40
K O -50
L y -30
L ' -160
+L cq -160
L rq -140
L Y -140
L W -70
@@ -148,6 +149,7 @@ b b -10
c k -20
c , -15
, ' -100
+, cq -100
, rq -100
e y -20
e x -30
@@ -156,6 +158,7 @@ e v -30
e . -15
e , -15
f ' 50
+f cq 50
f rq 60
f . -30
f o -30
@@ -238,15 +241,22 @@ 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
@@ -284,334 +294,337 @@ 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
+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
-# 556,688,0,125,-23,89 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 278,737,19,63,-90,63 2 0134 -- backslash
rs "
-] 278,722,196,140,64,89 2 0135 bracketright
+] 278,722,196,140,64,89 2 0135 -- bracketright
rB "
-a^ 333,734,0,155,-97,89 2 0136 circumflex
+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
+_ 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
+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
+ba 260,737,19,114,-40,89 2 0174 -- bar
| "
-rC 334,722,196,70,50,70 2 0175 braceright
+rC 334,722,196,70,50,70 2 0175 -- braceright
} "
-a~ 333,722,0,207,-75,89 2 0176 tilde
+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
+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
+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
+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
+ct 556,623,115,78,-45,78 0 0242 -- cent
char162 "
-Po 556,718,16,128,1,89 2 0243 sterling
+Po 556,718,16,128,1,89 2 0243 -- sterling
char163 "
-Cs 556,603,0,140,-10,89 0 0244 currency
+Cs 556,603,0,140,-10,89 0 0244 -- currency
char164 "
-Ye 556,688,0,193,-31,89 2 0245 yen
+Ye 556,688,0,193,-31,89 2 0245 -- yen
char165 "
-bb 260,737,19,114,-40,89 2 0246 brokenbar
+bb 260,737,19,114,-40,89 2 0246 -- brokenbar
char166 "
-sc 556,737,191,78,-26,78 2 0247 section
+sc 556,737,191,78,-26,78 2 0247 -- section
char167 "
-ad 333,706,0,160,-118,89 2 0250 dieresis
+ad 333,706,0,160,-118,89 2 0250 -- dieresis
char168 "
-co 737,737,19,150,-4,89 2 0251 copyright
+co 737,737,19,150,-4,89 2 0251 -- copyright
char169 "
-Of 370,737,0,129,-50,89 2 0252 ordfeminine
+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
+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
+\- 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
+a- 333,684,0,185,-93,89 2 0257 -- macron
char175 "
-de 400,703,0,118,-119,89 2 0260 degree
+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
+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
+S3 333,703,0,153,-40,89 2 0263 -- threesuperior
char179 "
-aa 333,734,0,192,-198,89 2 0264 acute
+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
+char181 556,523,207,94,26,89 1 0265 -- mu
+ps 537,718,173,163,-76,89 2 0266 -- paragraph
char182 "
-char183 278,315,0,29,-79,29 0 0267 periodcentered
-ac 333,0,225,0,48 1 0270 cedilla
+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
+S1 333,703,0,88,-116,88 2 0271 -- onesuperior
char185 "
-Om 365,737,0,153,-50,89 2 0272 ordmasculine
+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
+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
+12 834,703,19,55,-64,55 2 0275 -- onehalf
char189 "
-34 834,703,19,77,-80,77 2 0276 threequarters
+34 834,703,19,77,-80,77 2 0276 -- threequarters
char190 "
-r? 611,525,201,0,-35 0 0277 questiondown
+r? 611,525,201,0,-35 0 0277 -- questiondown
char191 "
-`A 667,929,0,37,36,37 2 0300 Agrave
+`A 667,929,0,37,36,37 2 0300 -- Agrave
char192 "
-'A 667,929,0,66,36,66 2 0301 Aacute
+'A 667,929,0,66,36,66 2 0301 -- Aacute
char193 "
-^A 667,929,0,37,36,37 2 0302 Acircumflex
+^A 667,929,0,37,36,37 2 0302 -- Acircumflex
char194 "
-~A 667,917,0,82,36,82 2 0303 Atilde
+~A 667,917,0,82,36,82 2 0303 -- Atilde
char195 "
-:A 667,901,0,37,36,37 2 0304 Adieresis
+:A 667,901,0,37,36,37 2 0304 -- Adieresis
char196 "
-oA 667,931,0,37,36,37 2 0305 Aring
+oA 667,931,0,37,36,37 2 0305 -- Aring
char197 "
-AE 1000,718,0,147,42,89 2 0306 AE
+AE 1000,718,0,147,42,89 2 0306 -- AE
char198 "
-,C 722,737,225,110,-58,89 3 0307 Ccedilla
+,C 722,737,225,110,-58,89 3 0307 -- Ccedilla
char199 "
-`E 667,929,0,145,-36,89 2 0310 Egrave
+`E 667,929,0,145,-36,89 2 0310 -- Egrave
char200 "
-'E 667,929,0,145,-36,89 2 0311 Eacute
+'E 667,929,0,145,-36,89 2 0311 -- Eacute
char201 "
-^E 667,929,0,145,-36,89 2 0312 Ecircumflex
+^E 667,929,0,145,-36,89 2 0312 -- Ecircumflex
char202 "
-:E 667,901,0,145,-36,89 2 0313 Edieresis
+:E 667,901,0,145,-36,89 2 0313 -- Edieresis
char203 "
-`I 278,929,0,123,-41,89 2 0314 Igrave
+`I 278,929,0,123,-41,89 2 0314 -- Igrave
char204 "
-'I 278,929,0,261,-41,89 2 0315 Iacute
+'I 278,929,0,261,-41,89 2 0315 -- Iacute
char205 "
-^I 278,929,0,224,-41,89 2 0316 Icircumflex
+^I 278,929,0,224,-41,89 2 0316 -- Icircumflex
char206 "
-:I 278,901,0,230,-41,89 2 0317 Idieresis
+:I 278,901,0,230,-41,89 2 0317 -- Idieresis
char207 "
--D 722,718,0,92,-19,89 2 0320 Eth
+-D 722,718,0,92,-19,89 2 0320 -- Eth
char208 "
-~N 722,917,0,127,-26,89 2 0321 Ntilde
+~N 722,917,0,127,-26,89 2 0321 -- Ntilde
char209 "
-`O 778,929,19,98,-55,89 2 0322 Ograve
+`O 778,929,19,98,-55,89 2 0322 -- Ograve
char210 "
-'O 778,929,19,98,-55,89 2 0323 Oacute
+'O 778,929,19,98,-55,89 2 0323 -- Oacute
char211 "
-^O 778,929,19,98,-55,89 2 0324 Ocircumflex
+^O 778,929,19,98,-55,89 2 0324 -- Ocircumflex
char212 "
-~O 778,917,19,98,-55,89 2 0325 Otilde
+~O 778,917,19,98,-55,89 2 0325 -- Otilde
char213 "
-:O 778,901,19,98,-55,89 2 0326 Odieresis
+: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
+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
+`U 722,929,19,125,-73,89 2 0331 -- Ugrave
char217 "
-'U 722,929,19,125,-73,89 2 0332 Uacute
+'U 722,929,19,125,-73,89 2 0332 -- Uacute
char218 "
-^U 722,929,19,125,-73,89 2 0333 Ucircumflex
+^U 722,929,19,125,-73,89 2 0333 -- Ucircumflex
char219 "
-:U 722,901,19,125,-73,89 2 0334 Udieresis
+:U 722,901,19,125,-73,89 2 0334 -- Udieresis
char220 "
-'Y 667,929,0,189,-117,89 2 0335 Yacute
+'Y 667,929,0,189,-117,89 2 0335 -- Yacute
char221 "
-TP 667,718,0,95,-36,89 2 0336 Thorn
+TP 667,718,0,95,-36,89 2 0336 -- Thorn
char222 "
-ss 611,728,15,97,-17,89 2 0337 germandbls
+ss 611,728,15,97,-17,89 2 0337 -- germandbls
char223 "
-`a 556,734,15,53,-11,53 2 0340 agrave
+`a 556,734,15,53,-11,53 2 0340 -- agrave
char224 "
-'a 556,734,15,81,-11,81 2 0341 aacute
+'a 556,734,15,81,-11,81 2 0341 -- aacute
char225 "
-^a 556,734,15,53,-11,53 2 0342 acircumflex
+^a 556,734,15,53,-11,53 2 0342 -- acircumflex
char226 "
-~a 556,722,15,86,-11,86 2 0343 atilde
+~a 556,722,15,86,-11,86 2 0343 -- atilde
char227 "
-:a 556,706,15,53,-11,53 2 0344 adieresis
+:a 556,706,15,53,-11,53 2 0344 -- adieresis
char228 "
-oa 556,756,15,53,-11,53 2 0345 aring
+oa 556,756,15,53,-11,53 2 0345 -- aring
char229 "
-ae 889,538,15,70,-11,70 0 0346 ae
+ae 889,538,15,70,-11,70 0 0346 -- ae
char230 "
-,c 500,538,225,103,-24,89 1 0347 ccedilla
+,c 500,538,225,103,-24,89 1 0347 -- ccedilla
char231 "
-`e 556,734,15,72,-34,72 2 0350 egrave
+`e 556,734,15,72,-34,72 2 0350 -- egrave
char232 "
-'e 556,734,15,81,-34,81 2 0351 eacute
+'e 556,734,15,81,-34,81 2 0351 -- eacute
char233 "
-^e 556,734,15,72,-34,72 2 0352 ecircumflex
+^e 556,734,15,72,-34,72 2 0352 -- ecircumflex
char234 "
-:e 556,706,15,72,-34,72 2 0353 edieresis
+:e 556,706,15,72,-34,72 2 0353 -- edieresis
char235 "
-`i 278,734,0,82,-45,82 2 0354 igrave
+`i 278,734,0,82,-45,82 2 0354 -- igrave
char236 "
-'i 278,734,0,220,-45,89 2 0355 iacute
+'i 278,734,0,220,-45,89 2 0355 -- iacute
char237 "
-^i 278,734,0,183,-45,89 2 0356 icircumflex
+^i 278,734,0,183,-45,89 2 0356 -- icircumflex
char238 "
-:i 278,706,0,188,-45,89 2 0357 idieresis
+:i 278,706,0,188,-45,89 2 0357 -- idieresis
char239 "
-Sd 556,737,15,111,-31,89 2 0360 eth
+Sd 556,737,15,111,-31,89 2 0360 -- eth
char240 "
-~n 556,722,0,86,-15,86 2 0361 ntilde
+~n 556,722,0,86,-15,86 2 0361 -- ntilde
char241 "
-`o 556,734,14,79,-33,79 2 0362 ograve
+`o 556,734,14,79,-33,79 2 0362 -- ograve
char242 "
-'o 556,734,14,81,-33,81 2 0363 oacute
+'o 556,734,14,81,-33,81 2 0363 -- oacute
char243 "
-^o 556,734,14,79,-33,79 2 0364 ocircumflex
+^o 556,734,14,79,-33,79 2 0364 -- ocircumflex
char244 "
-~o 556,722,14,96,-33,89 2 0365 otilde
+~o 556,722,14,96,-33,89 2 0365 -- otilde
char245 "
-:o 556,706,14,79,-33,79 2 0366 odieresis
+: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
+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
+`u 556,734,15,94,-44,89 2 0371 -- ugrave
char249 "
-'u 556,734,15,94,-44,89 2 0372 uacute
+'u 556,734,15,94,-44,89 2 0372 -- uacute
char250 "
-^u 556,734,15,94,-44,89 2 0373 ucircumflex
+^u 556,734,15,94,-44,89 2 0373 -- ucircumflex
char251 "
-:u 556,706,15,94,-44,89 2 0374 udieresis
+:u 556,706,15,94,-44,89 2 0374 -- udieresis
char252 "
-'y 500,734,214,150,35,89 3 0375 yacute
+'y 500,734,214,150,35,89 3 0375 -- yacute
char253 "
-Tp 556,718,207,78,36,78 3 0376 thorn
+Tp 556,718,207,78,36,78 3 0376 -- thorn
char254 "
-:y 500,706,214,150,35,89 3 0377 ydieresis
+:y 500,706,214,150,35,89 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HNB b/contrib/groff/devps/HNB
index 6e6467427749..ded481586b64 100644
--- a/contrib/groff/devps/HNB
+++ b/contrib/groff/devps/HNB
@@ -40,6 +40,7 @@ K e -11
K O -24
L y -24
L ' -114
+L cq -114
L rq -114
L Y -97
L W -65
@@ -138,6 +139,7 @@ c l -15
c k -15
c h -7
, ' -97
+, cq -97
, rq -97
d y -11
d w -11
@@ -150,6 +152,7 @@ e v -11
e . 16
e , 8
f ' 25
+f cq 25
f rq 25
f . -7
f o -15
@@ -172,17 +175,26 @@ 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
@@ -213,334 +225,337 @@ 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
+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
-# 456,698 2 0043 numbersign
+! 273,718 2 0041 -- exclam
+" 389,718 2 0042 -- quotedbl
+dq "
+# 456,698 2 0043 -- numbersign
sh "
-$ 456,775,115 2 0044 dollar
+$ 456,775,115 2 0044 -- dollar
Do "
-% 729,710,19 2 0045 percent
-& 592,718,19 2 0046 ampersand
-' 228,718 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 228,737,19 2 0134 -- backslash
rs "
-] 273,722,196 2 0135 bracketright
+] 273,722,196 2 0135 -- bracketright
rB "
-a^ 273,750 2 0136 circumflex
+a^ 273,750 2 0136 -- circumflex
^ "
-_ 456,0,125 0 0137 underscore
-` 228,727 2 0140 quoteleft
+_ 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
+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
+ba 230,737,19 2 0174 -- bar
| "
-rC 319,722,196 2 0175 braceright
+rC 319,722,196 2 0175 -- braceright
} "
-a~ 273,737 2 0176 tilde
+a~ 273,737 2 0176 -- tilde
~ "
-bq 228,127,146 0 0200 quotesinglbase
-Fo 456,484 0 0201 guillemotleft
+bq 228,127,146 0 0200 -- quotesinglbase
+Fo 456,484 0 0201 -- guillemotleft
char171 "
-Fc 456,484 0 0202 guillemotright
+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
+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
+ct 456,628,118 0 0242 -- cent
char162 "
-Po 456,718,16 2 0243 sterling
+Po 456,718,16 2 0243 -- sterling
char163 "
-Cs 456,636 0 0244 currency
+Cs 456,636 0 0244 -- currency
char164 "
-Ye 456,698 2 0245 yen
+Ye 456,698 2 0245 -- yen
char165 "
-bb 230,737,19 2 0246 brokenbar
+bb 230,737,19 2 0246 -- brokenbar
char166 "
-sc 456,727,184 2 0247 section
+sc 456,727,184 2 0247 -- section
char167 "
-ad 273,729 2 0250 dieresis
+ad 273,729 2 0250 -- dieresis
char168 "
-co 604,737,19 2 0251 copyright
+co 604,737,19 2 0251 -- copyright
char169 "
-Of 303,737 2 0252 ordfeminine
+Of 303,737 2 0252 -- ordfeminine
char170 "
-fo 273,484 0 0253 guilsinglleft
-no 479,419 0 0254 logicalnot
+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
+\- 479,309 0 0255 -- minus
+rg 604,737,19 2 0256 -- registered
char174 "
-a- 273,678 2 0257 macron
+a- 273,678 2 0257 -- macron
char175 "
-de 328,712 2 0260 degree
+de 328,712 2 0260 -- degree
char176 "
-char177 479,506 0 0261 plusminus
-S2 273,710 2 0262 twosuperior
+char177 479,506 0 0261 -- plusminus
+S2 273,710 2 0262 -- twosuperior
char178 "
-S3 273,710 2 0263 threesuperior
+S3 273,710 2 0263 -- threesuperior
char179 "
-aa 273,750 2 0264 acute
+aa 273,750 2 0264 -- acute
char180 "
-char181 501,532,207 1 0265 mu
-ps 456,700,191 2 0266 paragraph
+char181 501,532,207 1 0265 -- mu
+ps 456,700,191 2 0266 -- paragraph
char182 "
-char183 228,334 0 0267 periodcentered
-ac 273,0,228 1 0270 cedilla
+pc 228,334 0 0267 -- periodcentered
+char183 "
+ac 273,0,228 1 0270 -- cedilla
char184 "
-S1 273,710 2 0271 onesuperior
+S1 273,710 2 0271 -- onesuperior
char185 "
-Om 299,737 2 0272 ordmasculine
+Om 299,737 2 0272 -- ordmasculine
char186 "
-fc 273,484 0 0273 guilsinglright
-14 684,710,19 2 0274 onequarter
+fc 273,484 0 0273 -- guilsinglright
+14 684,710,19 2 0274 -- onequarter
char188 "
-12 684,710,19 2 0275 onehalf
+12 684,710,19 2 0275 -- onehalf
char189 "
-34 684,710,19 2 0276 threequarters
+34 684,710,19 2 0276 -- threequarters
char190 "
-r? 501,532,195 0 0277 questiondown
+r? 501,532,195 0 0277 -- questiondown
char191 "
-`A 592,936 2 0300 Agrave
+`A 592,936 2 0300 -- Agrave
char192 "
-'A 592,936 2 0301 Aacute
+'A 592,936 2 0301 -- Aacute
char193 "
-^A 592,936 2 0302 Acircumflex
+^A 592,936 2 0302 -- Acircumflex
char194 "
-~A 592,923 2 0303 Atilde
+~A 592,923 2 0303 -- Atilde
char195 "
-:A 592,915 2 0304 Adieresis
+:A 592,915 2 0304 -- Adieresis
char196 "
-oA 592,962 2 0305 Aring
+oA 592,962 2 0305 -- Aring
char197 "
-AE 820,718 2 0306 AE
+AE 820,718 2 0306 -- AE
char198 "
-,C 592,737,228 3 0307 Ccedilla
+,C 592,737,228 3 0307 -- Ccedilla
char199 "
-`E 547,936 2 0310 Egrave
+`E 547,936 2 0310 -- Egrave
char200 "
-'E 547,936 2 0311 Eacute
+'E 547,936 2 0311 -- Eacute
char201 "
-^E 547,936 2 0312 Ecircumflex
+^E 547,936 2 0312 -- Ecircumflex
char202 "
-:E 547,915 2 0313 Edieresis
+:E 547,915 2 0313 -- Edieresis
char203 "
-`I 228,936 2 0314 Igrave
+`I 228,936 2 0314 -- Igrave
char204 "
-'I 228,936 2 0315 Iacute
+'I 228,936 2 0315 -- Iacute
char205 "
-^I 228,936 2 0316 Icircumflex
+^I 228,936 2 0316 -- Icircumflex
char206 "
-:I 228,915 2 0317 Idieresis
+:I 228,915 2 0317 -- Idieresis
char207 "
--D 592,718 2 0320 Eth
+-D 592,718 2 0320 -- Eth
char208 "
-~N 592,923 2 0321 Ntilde
+~N 592,923 2 0321 -- Ntilde
char209 "
-`O 638,936,19 2 0322 Ograve
+`O 638,936,19 2 0322 -- Ograve
char210 "
-'O 638,936,19 2 0323 Oacute
+'O 638,936,19 2 0323 -- Oacute
char211 "
-^O 638,936,19 2 0324 Ocircumflex
+^O 638,936,19 2 0324 -- Ocircumflex
char212 "
-~O 638,923,19 2 0325 Otilde
+~O 638,923,19 2 0325 -- Otilde
char213 "
-:O 638,915,19 2 0326 Odieresis
+:O 638,915,19 2 0326 -- Odieresis
char214 "
-char215 479,505 0 0327 multiply
-/O 638,745,27 2 0330 Oslash
+char215 479,505 0 0327 -- multiply
+/O 638,745,27 2 0330 -- Oslash
char216 "
-`U 592,936,19 2 0331 Ugrave
+`U 592,936,19 2 0331 -- Ugrave
char217 "
-'U 592,936,19 2 0332 Uacute
+'U 592,936,19 2 0332 -- Uacute
char218 "
-^U 592,936,19 2 0333 Ucircumflex
+^U 592,936,19 2 0333 -- Ucircumflex
char219 "
-:U 592,915,19 2 0334 Udieresis
+:U 592,915,19 2 0334 -- Udieresis
char220 "
-'Y 547,936 2 0335 Yacute
+'Y 547,936 2 0335 -- Yacute
char221 "
-TP 547,718 2 0336 Thorn
+TP 547,718 2 0336 -- Thorn
char222 "
-ss 501,731,14 2 0337 germandbls
+ss 501,731,14 2 0337 -- germandbls
char223 "
-`a 456,750,14 2 0340 agrave
+`a 456,750,14 2 0340 -- agrave
char224 "
-'a 456,750,14 2 0341 aacute
+'a 456,750,14 2 0341 -- aacute
char225 "
-^a 456,750,14 2 0342 acircumflex
+^a 456,750,14 2 0342 -- acircumflex
char226 "
-~a 456,737,14 2 0343 atilde
+~a 456,737,14 2 0343 -- atilde
char227 "
-:a 456,729,14 2 0344 adieresis
+:a 456,729,14 2 0344 -- adieresis
char228 "
-oa 456,776,14 2 0345 aring
+oa 456,776,14 2 0345 -- aring
char229 "
-ae 729,546,14 0 0346 ae
+ae 729,546,14 0 0346 -- ae
char230 "
-,c 456,546,228 1 0347 ccedilla
+,c 456,546,228 1 0347 -- ccedilla
char231 "
-`e 456,750,14 2 0350 egrave
+`e 456,750,14 2 0350 -- egrave
char232 "
-'e 456,750,14 2 0351 eacute
+'e 456,750,14 2 0351 -- eacute
char233 "
-^e 456,750,14 2 0352 ecircumflex
+^e 456,750,14 2 0352 -- ecircumflex
char234 "
-:e 456,729,14 2 0353 edieresis
+:e 456,729,14 2 0353 -- edieresis
char235 "
-`i 228,750 2 0354 igrave
+`i 228,750 2 0354 -- igrave
char236 "
-'i 228,750 2 0355 iacute
+'i 228,750 2 0355 -- iacute
char237 "
-^i 228,750 2 0356 icircumflex
+^i 228,750 2 0356 -- icircumflex
char238 "
-:i 228,729 2 0357 idieresis
+:i 228,729 2 0357 -- idieresis
char239 "
-Sd 501,737,14 2 0360 eth
+Sd 501,737,14 2 0360 -- eth
char240 "
-~n 501,737 2 0361 ntilde
+~n 501,737 2 0361 -- ntilde
char241 "
-`o 501,750,14 2 0362 ograve
+`o 501,750,14 2 0362 -- ograve
char242 "
-'o 501,750,14 2 0363 oacute
+'o 501,750,14 2 0363 -- oacute
char243 "
-^o 501,750,14 2 0364 ocircumflex
+^o 501,750,14 2 0364 -- ocircumflex
char244 "
-~o 501,737,14 2 0365 otilde
+~o 501,737,14 2 0365 -- otilde
char245 "
-:o 501,729,14 2 0366 odieresis
+:o 501,729,14 2 0366 -- odieresis
char246 "
-char247 479,548,42 0 0367 divide
-/o 501,560,29 0 0370 oslash
+char247 479,548,42 0 0367 -- divide
+/o 501,560,29 0 0370 -- oslash
char248 "
-`u 501,750,14 2 0371 ugrave
+`u 501,750,14 2 0371 -- ugrave
char249 "
-'u 501,750,14 2 0372 uacute
+'u 501,750,14 2 0372 -- uacute
char250 "
-^u 501,750,14 2 0373 ucircumflex
+^u 501,750,14 2 0373 -- ucircumflex
char251 "
-:u 501,729,14 2 0374 udieresis
+:u 501,729,14 2 0374 -- udieresis
char252 "
-'y 456,750,214 3 0375 yacute
+'y 456,750,214 3 0375 -- yacute
char253 "
-Tp 501,718,208 3 0376 thorn
+Tp 501,718,208 3 0376 -- thorn
char254 "
-:y 456,729,214 3 0377 ydieresis
+:y 456,729,214 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HNBI b/contrib/groff/devps/HNBI
index c0bb37eea4f8..a5809e15c3c3 100644
--- a/contrib/groff/devps/HNBI
+++ b/contrib/groff/devps/HNBI
@@ -41,6 +41,7 @@ K e -15
K O -30
L y -30
L ' -140
+L cq -140
L rq -140
L Y -120
L W -80
@@ -139,6 +140,7 @@ c l -20
c k -20
c h -10
, ' -120
+, cq -120
, rq -120
d y -15
d w -15
@@ -151,6 +153,7 @@ e v -15
e . 20
e , 10
f ' 30
+f cq 30
f rq 30
f . -10
f o -20
@@ -173,17 +176,26 @@ 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
@@ -214,334 +226,337 @@ 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
+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
-# 456,698,0,122,1,90 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 228,737,19,74,-51,74 2 0134 -- backslash
rs "
-] 273,722,196,124,64,90 2 0135 bracketright
+] 273,722,196,124,64,90 2 0135 -- bracketright
rB "
-a^ 273,750,0,164,-47,90 2 0136 circumflex
+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
+_ 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
+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
+ba 230,737,19,109,-16,90 2 0174 -- bar
| "
-rC 319,722,196,64,64,64 2 0175 braceright
+rC 319,722,196,64,64,64 2 0175 -- braceright
} "
-a~ 273,737,0,192,-42,90 2 0176 tilde
+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
+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
+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
+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
+ct 456,628,118,85,-15,85 0 0242 -- cent
char162 "
-Po 456,718,16,114,9,90 2 0243 sterling
+Po 456,718,16,114,9,90 2 0243 -- sterling
char163 "
-Cs 456,636,0,152,28,90 0 0244 currency
+Cs 456,636,0,152,28,90 0 0244 -- currency
char164 "
-Ye 456,698,0,179,1,90 2 0245 yen
+Ye 456,698,0,179,1,90 2 0245 -- yen
char165 "
-bb 230,737,19,109,-16,90 2 0246 brokenbar
+bb 230,737,19,109,-16,90 2 0246 -- brokenbar
char166 "
-sc 456,727,184,85,0,85 2 0247 section
+sc 456,727,184,85,0,85 2 0247 -- section
char167 "
-ad 273,729,0,172,-62,90 2 0250 dieresis
+ad 273,729,0,172,-62,90 2 0250 -- dieresis
char168 "
-co 604,737,19,131,4,90 2 0251 copyright
+co 604,737,19,131,4,90 2 0251 -- copyright
char169 "
-Of 303,737,0,128,-25,90 2 0252 ordfeminine
+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
+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
+\- 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
+a- 273,678,0,173,-50,90 2 0257 -- macron
char175 "
-de 328,712,0,105,-93,90 2 0260 degree
+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
+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
+S3 273,710,0,138,-25,90 2 0263 -- threesuperior
char179 "
-aa 273,750,0,200,-144,90 2 0264 acute
+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
+char181 501,532,207,89,32,89 1 0265 -- mu
+ps 456,700,191,158,-30,90 2 0266 -- paragraph
char182 "
-char183 228,334,0,48,-40,48 0 0267 periodcentered
-ac 273,0,228,0,80 1 0270 cedilla
+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
+S1 273,710,0,95,-71,90 2 0271 -- onesuperior
char185 "
-Om 299,737,0,149,-25,90 2 0272 ordmasculine
+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
+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
+12 684,710,19,70,-58,70 2 0275 -- onehalf
char189 "
-34 684,710,19,54,-32,54 2 0276 threequarters
+34 684,710,19,54,-32,54 2 0276 -- threequarters
char190 "
-r? 501,532,195,8,6,8 0 0277 questiondown
+r? 501,532,195,8,6,8 0 0277 -- questiondown
char191 "
-`A 592,936,0,34,34,34 2 0300 Agrave
+`A 592,936,0,34,34,34 2 0300 -- Agrave
char192 "
-'A 592,936,0,73,34,73 2 0301 Aacute
+'A 592,936,0,73,34,73 2 0301 -- Aacute
char193 "
-^A 592,936,0,37,34,37 2 0302 Acircumflex
+^A 592,936,0,37,34,37 2 0302 -- Acircumflex
char194 "
-~A 592,923,0,66,34,66 2 0303 Atilde
+~A 592,923,0,66,34,66 2 0303 -- Atilde
char195 "
-:A 592,915,0,46,34,46 2 0304 Adieresis
+:A 592,915,0,46,34,46 2 0304 -- Adieresis
char196 "
-oA 592,962,0,34,34,34 2 0305 Aring
+oA 592,962,0,34,34,34 2 0305 -- Aring
char197 "
-AE 820,718,0,132,46,90 2 0306 AE
+AE 820,718,0,132,46,90 2 0306 -- AE
char198 "
-,C 592,737,228,105,-38,90 3 0307 Ccedilla
+,C 592,737,228,105,-38,90 3 0307 -- Ccedilla
char199 "
-`E 547,936,0,123,-12,90 2 0310 Egrave
+`E 547,936,0,123,-12,90 2 0310 -- Egrave
char200 "
-'E 547,936,0,123,-12,90 2 0311 Eacute
+'E 547,936,0,123,-12,90 2 0311 -- Eacute
char201 "
-^E 547,936,0,123,-12,90 2 0312 Ecircumflex
+^E 547,936,0,123,-12,90 2 0312 -- Ecircumflex
char202 "
-:E 547,915,0,123,-12,90 2 0313 Edieresis
+:E 547,915,0,123,-12,90 2 0313 -- Edieresis
char203 "
-`I 228,936,0,123,-2,90 2 0314 Igrave
+`I 228,936,0,123,-2,90 2 0314 -- Igrave
char204 "
-'I 228,936,0,255,-2,90 2 0315 Iacute
+'I 228,936,0,255,-2,90 2 0315 -- Iacute
char205 "
-^I 228,936,0,219,-2,90 2 0316 Icircumflex
+^I 228,936,0,219,-2,90 2 0316 -- Icircumflex
char206 "
-:I 228,915,0,227,-2,90 2 0317 Idieresis
+:I 228,915,0,227,-2,90 2 0317 -- Idieresis
char207 "
--D 592,718,0,95,-1,90 2 0320 Eth
+-D 592,718,0,95,-1,90 2 0320 -- Eth
char208 "
-~N 592,923,0,119,-7,90 2 0321 Ntilde
+~N 592,923,0,119,-7,90 2 0321 -- Ntilde
char209 "
-`O 638,936,19,87,-38,87 2 0322 Ograve
+`O 638,936,19,87,-38,87 2 0322 -- Ograve
char210 "
-'O 638,936,19,87,-38,87 2 0323 Oacute
+'O 638,936,19,87,-38,87 2 0323 -- Oacute
char211 "
-^O 638,936,19,87,-38,87 2 0324 Ocircumflex
+^O 638,936,19,87,-38,87 2 0324 -- Ocircumflex
char212 "
-~O 638,923,19,87,-38,87 2 0325 Otilde
+~O 638,923,19,87,-38,87 2 0325 -- Otilde
char213 "
-:O 638,915,19,87,-38,87 2 0326 Odieresis
+: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
+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
+`U 592,936,19,117,-46,90 2 0331 -- Ugrave
char217 "
-'U 592,936,19,117,-46,90 2 0332 Uacute
+'U 592,936,19,117,-46,90 2 0332 -- Uacute
char218 "
-^U 592,936,19,117,-46,90 2 0333 Ucircumflex
+^U 592,936,19,117,-46,90 2 0333 -- Ucircumflex
char219 "
-:U 592,915,19,117,-46,90 2 0334 Udieresis
+:U 592,915,19,117,-46,90 2 0334 -- Udieresis
char220 "
-'Y 547,936,0,164,-87,90 2 0335 Yacute
+'Y 547,936,0,164,-87,90 2 0335 -- Yacute
char221 "
-TP 547,718,0,91,-12,90 2 0336 Thorn
+TP 547,718,0,91,-12,90 2 0336 -- Thorn
char222 "
-ss 501,731,14,88,-7,88 2 0337 germandbls
+ss 501,731,14,88,-7,88 2 0337 -- germandbls
char223 "
-`a 456,750,14,72,5,72 2 0340 agrave
+`a 456,750,14,72,5,72 2 0340 -- agrave
char224 "
-'a 456,750,14,108,5,90 2 0341 aacute
+'a 456,750,14,108,5,90 2 0341 -- aacute
char225 "
-^a 456,750,14,72,5,72 2 0342 acircumflex
+^a 456,750,14,72,5,72 2 0342 -- acircumflex
char226 "
-~a 456,737,14,101,5,90 2 0343 atilde
+~a 456,737,14,101,5,90 2 0343 -- atilde
char227 "
-:a 456,729,14,81,5,81 2 0344 adieresis
+:a 456,729,14,81,5,81 2 0344 -- adieresis
char228 "
-oa 456,776,14,72,5,72 2 0345 aring
+oa 456,776,14,72,5,72 2 0345 -- aring
char229 "
-ae 729,546,14,78,4,78 0 0346 ae
+ae 729,546,14,78,4,78 0 0346 -- ae
char230 "
-,c 456,546,228,85,-15,85 1 0347 ccedilla
+,c 456,546,228,85,-15,85 1 0347 -- ccedilla
char231 "
-`e 456,750,14,80,-8,80 2 0350 egrave
+`e 456,750,14,80,-8,80 2 0350 -- egrave
char232 "
-'e 456,750,14,108,-8,90 2 0351 eacute
+'e 456,750,14,108,-8,90 2 0351 -- eacute
char233 "
-^e 456,750,14,80,-8,80 2 0352 ecircumflex
+^e 456,750,14,80,-8,80 2 0352 -- ecircumflex
char234 "
-:e 456,729,14,81,-8,81 2 0353 edieresis
+:e 456,729,14,81,-8,81 2 0353 -- edieresis
char235 "
-`i 228,750,0,90,-7,90 2 0354 igrave
+`i 228,750,0,90,-7,90 2 0354 -- igrave
char236 "
-'i 228,750,0,222,-7,90 2 0355 iacute
+'i 228,750,0,222,-7,90 2 0355 -- iacute
char237 "
-^i 228,750,0,186,-7,90 2 0356 icircumflex
+^i 228,750,0,186,-7,90 2 0356 -- icircumflex
char238 "
-:i 228,729,0,195,-7,90 2 0357 idieresis
+:i 228,729,0,195,-7,90 2 0357 -- idieresis
char239 "
-Sd 501,737,14,98,-17,90 2 0360 eth
+Sd 501,737,14,98,-17,90 2 0360 -- eth
char240 "
-~n 501,737,0,78,-3,78 2 0361 ntilde
+~n 501,737,0,78,-3,78 2 0361 -- ntilde
char241 "
-`o 501,750,14,76,-17,76 2 0362 ograve
+`o 501,750,14,76,-17,76 2 0362 -- ograve
char242 "
-'o 501,750,14,86,-17,86 2 0363 oacute
+'o 501,750,14,86,-17,86 2 0363 -- oacute
char243 "
-^o 501,750,14,76,-17,76 2 0364 ocircumflex
+^o 501,750,14,76,-17,76 2 0364 -- ocircumflex
char244 "
-~o 501,737,14,78,-17,78 2 0365 otilde
+~o 501,737,14,78,-17,78 2 0365 -- otilde
char245 "
-:o 501,729,14,76,-17,76 2 0366 odieresis
+: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
+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
+`u 501,750,14,89,-30,89 2 0371 -- ugrave
char249 "
-'u 501,750,14,89,-30,89 2 0372 uacute
+'u 501,750,14,89,-30,89 2 0372 -- uacute
char250 "
-^u 501,750,14,89,-30,89 2 0373 ucircumflex
+^u 501,750,14,89,-30,89 2 0373 -- ucircumflex
char251 "
-:u 501,729,14,89,-30,89 2 0374 udieresis
+:u 501,729,14,89,-30,89 2 0374 -- udieresis
char252 "
-'y 456,750,214,129,16,90 3 0375 yacute
+'y 456,750,214,129,16,90 3 0375 -- yacute
char253 "
-Tp 501,718,208,78,35,78 3 0376 thorn
+Tp 501,718,208,78,35,78 3 0376 -- thorn
char254 "
-:y 456,729,214,129,16,90 3 0377 ydieresis
+:y 456,729,214,129,16,90 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HNI b/contrib/groff/devps/HNI
index e9ded2f04d1d..c9ab4ec63087 100644
--- a/contrib/groff/devps/HNI
+++ b/contrib/groff/devps/HNI
@@ -48,6 +48,7 @@ K e -40
K O -50
L y -30
L ' -160
+L cq -160
L rq -140
L Y -140
L W -70
@@ -148,6 +149,7 @@ b b -10
c k -20
c , -15
, ' -100
+, cq -100
, rq -100
e y -20
e x -30
@@ -156,6 +158,7 @@ e v -30
e . -15
e , -15
f ' 50
+f cq 50
f rq 60
f . -30
f o -30
@@ -238,15 +241,22 @@ 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
@@ -284,334 +294,337 @@ 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
+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
-# 456,688,0,111,-10,89 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 228,737,19,61,-65,61 2 0134 -- backslash
rs "
-] 228,722,196,124,61,89 2 0135 bracketright
+] 228,722,196,124,61,89 2 0135 -- bracketright
rB "
-a^ 273,734,0,136,-71,89 2 0136 circumflex
+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
+_ 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
+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
+ba 213,737,19,102,-24,89 2 0174 -- bar
| "
-rC 274,722,196,67,50,67 2 0175 braceright
+rC 274,722,196,67,50,67 2 0175 -- braceright
} "
-a~ 273,722,0,179,-52,89 2 0176 tilde
+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
+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
+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
+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
+ct 456,623,115,73,-28,73 0 0242 -- cent
char162 "
-Po 456,718,16,114,10,89 2 0243 sterling
+Po 456,718,16,114,10,89 2 0243 -- sterling
char163 "
-Cs 456,603,0,124,1,89 0 0244 currency
+Cs 456,603,0,124,1,89 0 0244 -- currency
char164 "
-Ye 456,688,0,167,-17,89 2 0245 yen
+Ye 456,688,0,167,-17,89 2 0245 -- yen
char165 "
-bb 213,737,19,102,-24,89 2 0246 brokenbar
+bb 213,737,19,102,-24,89 2 0246 -- brokenbar
char166 "
-sc 456,737,191,73,-13,73 2 0247 section
+sc 456,737,191,73,-13,73 2 0247 -- section
char167 "
-ad 273,706,0,140,-88,89 2 0250 dieresis
+ad 273,706,0,140,-88,89 2 0250 -- dieresis
char168 "
-co 604,737,19,133,6,89 2 0251 copyright
+co 604,737,19,133,6,89 2 0251 -- copyright
char169 "
-Of 303,737,0,115,-32,89 2 0252 ordfeminine
+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
+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
+\- 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
+a- 273,684,0,161,-67,89 2 0257 -- macron
char175 "
-de 328,703,0,106,-88,89 2 0260 degree
+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
+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
+S3 273,703,0,135,-24,89 2 0263 -- threesuperior
char179 "
-aa 273,734,0,167,-153,89 2 0264 acute
+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
+char181 456,523,207,86,30,86 1 0265 -- mu
+ps 440,718,173,143,-53,89 2 0266 -- paragraph
char182 "
-char183 228,315,0,33,-56,33 0 0267 periodcentered
-ac 273,0,225,0,48 1 0270 cedilla
+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
+S1 273,703,0,82,-86,82 2 0271 -- onesuperior
char185 "
-Om 299,737,0,135,-32,89 2 0272 ordmasculine
+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
+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
+12 684,703,19,54,-43,54 2 0275 -- onehalf
char189 "
-34 684,703,19,72,-56,72 2 0276 threequarters
+34 684,703,19,72,-56,72 2 0276 -- threequarters
char190 "
-r? 501,525,201,0,-20 0 0277 questiondown
+r? 501,525,201,0,-20 0 0277 -- questiondown
char191 "
-`A 547,929,0,39,39,39 2 0300 Agrave
+`A 547,929,0,39,39,39 2 0300 -- Agrave
char192 "
-'A 547,929,0,63,39,63 2 0301 Aacute
+'A 547,929,0,63,39,63 2 0301 -- Aacute
char193 "
-^A 547,929,0,39,39,39 2 0302 Acircumflex
+^A 547,929,0,39,39,39 2 0302 -- Acircumflex
char194 "
-~A 547,917,0,76,39,76 2 0303 Atilde
+~A 547,917,0,76,39,76 2 0303 -- Atilde
char195 "
-:A 547,901,0,39,39,39 2 0304 Adieresis
+:A 547,901,0,39,39,39 2 0304 -- Adieresis
char196 "
-oA 547,931,0,39,39,39 2 0305 Aring
+oA 547,931,0,39,39,39 2 0305 -- Aring
char197 "
-AE 820,718,0,129,43,89 2 0306 AE
+AE 820,718,0,129,43,89 2 0306 -- AE
char198 "
-,C 592,737,225,98,-38,89 3 0307 Ccedilla
+,C 592,737,225,98,-38,89 3 0307 -- Ccedilla
char199 "
-`E 547,929,0,128,-21,89 2 0310 Egrave
+`E 547,929,0,128,-21,89 2 0310 -- Egrave
char200 "
-'E 547,929,0,128,-21,89 2 0311 Eacute
+'E 547,929,0,128,-21,89 2 0311 -- Eacute
char201 "
-^E 547,929,0,128,-21,89 2 0312 Ecircumflex
+^E 547,929,0,128,-21,89 2 0312 -- Ecircumflex
char202 "
-:E 547,901,0,128,-21,89 2 0313 Edieresis
+:E 547,901,0,128,-21,89 2 0313 -- Edieresis
char203 "
-`I 228,929,0,110,-25,89 2 0314 Igrave
+`I 228,929,0,110,-25,89 2 0314 -- Igrave
char204 "
-'I 228,929,0,223,-25,89 2 0315 Iacute
+'I 228,929,0,223,-25,89 2 0315 -- Iacute
char205 "
-^I 228,929,0,193,-25,89 2 0316 Icircumflex
+^I 228,929,0,193,-25,89 2 0316 -- Icircumflex
char206 "
-:I 228,901,0,197,-25,89 2 0317 Idieresis
+:I 228,901,0,197,-25,89 2 0317 -- Idieresis
char207 "
--D 592,718,0,84,-7,84 2 0320 Eth
+-D 592,718,0,84,-7,84 2 0320 -- Eth
char208 "
-~N 592,917,0,113,-12,89 2 0321 Ntilde
+~N 592,917,0,113,-12,89 2 0321 -- Ntilde
char209 "
-`O 638,929,19,89,-36,89 2 0322 Ograve
+`O 638,929,19,89,-36,89 2 0322 -- Ograve
char210 "
-'O 638,929,19,89,-36,89 2 0323 Oacute
+'O 638,929,19,89,-36,89 2 0323 -- Oacute
char211 "
-^O 638,929,19,89,-36,89 2 0324 Ocircumflex
+^O 638,929,19,89,-36,89 2 0324 -- Ocircumflex
char212 "
-~O 638,917,19,89,-36,89 2 0325 Otilde
+~O 638,917,19,89,-36,89 2 0325 -- Otilde
char213 "
-:O 638,901,19,89,-36,89 2 0326 Odieresis
+: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
+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
+`U 592,929,19,111,-51,89 2 0331 -- Ugrave
char217 "
-'U 592,929,19,111,-51,89 2 0332 Uacute
+'U 592,929,19,111,-51,89 2 0332 -- Uacute
char218 "
-^U 592,929,19,111,-51,89 2 0333 Ucircumflex
+^U 592,929,19,111,-51,89 2 0333 -- Ucircumflex
char219 "
-:U 592,901,19,111,-51,89 2 0334 Udieresis
+:U 592,901,19,111,-51,89 2 0334 -- Udieresis
char220 "
-'Y 547,929,0,164,-87,89 2 0335 Yacute
+'Y 547,929,0,164,-87,89 2 0335 -- Yacute
char221 "
-TP 547,718,0,87,-21,87 2 0336 Thorn
+TP 547,718,0,87,-21,87 2 0336 -- Thorn
char222 "
-ss 501,728,15,88,-5,88 2 0337 germandbls
+ss 501,728,15,88,-5,88 2 0337 -- germandbls
char223 "
-`a 456,734,15,52,0,52 2 0340 agrave
+`a 456,734,15,52,0,52 2 0340 -- agrave
char224 "
-'a 456,734,15,75,0,75 2 0341 aacute
+'a 456,734,15,75,0,75 2 0341 -- aacute
char225 "
-^a 456,734,15,52,0,52 2 0342 acircumflex
+^a 456,734,15,52,0,52 2 0342 -- acircumflex
char226 "
-~a 456,722,15,80,0,80 2 0343 atilde
+~a 456,722,15,80,0,80 2 0343 -- atilde
char227 "
-:a 456,706,15,52,0,52 2 0344 adieresis
+:a 456,706,15,52,0,52 2 0344 -- adieresis
char228 "
-oa 456,756,15,52,0,52 2 0345 aring
+oa 456,756,15,52,0,52 2 0345 -- aring
char229 "
-ae 729,538,15,67,0,67 0 0346 ae
+ae 729,538,15,67,0,67 0 0346 -- ae
char230 "
-,c 410,538,225,94,-11,89 1 0347 ccedilla
+,c 410,538,225,94,-11,89 1 0347 -- ccedilla
char231 "
-`e 456,734,15,68,-19,68 2 0350 egrave
+`e 456,734,15,68,-19,68 2 0350 -- egrave
char232 "
-'e 456,734,15,75,-19,75 2 0351 eacute
+'e 456,734,15,75,-19,75 2 0351 -- eacute
char233 "
-^e 456,734,15,68,-19,68 2 0352 ecircumflex
+^e 456,734,15,68,-19,68 2 0352 -- ecircumflex
char234 "
-:e 456,706,15,68,-19,68 2 0353 edieresis
+:e 456,706,15,68,-19,68 2 0353 -- edieresis
char235 "
-`i 228,734,0,76,-28,76 2 0354 igrave
+`i 228,734,0,76,-28,76 2 0354 -- igrave
char236 "
-'i 228,734,0,189,-28,89 2 0355 iacute
+'i 228,734,0,189,-28,89 2 0355 -- iacute
char237 "
-^i 228,734,0,159,-28,89 2 0356 icircumflex
+^i 228,734,0,159,-28,89 2 0356 -- icircumflex
char238 "
-:i 228,706,0,163,-28,89 2 0357 idieresis
+:i 228,706,0,163,-28,89 2 0357 -- idieresis
char239 "
-Sd 456,737,15,100,-17,89 2 0360 eth
+Sd 456,737,15,100,-17,89 2 0360 -- eth
char240 "
-~n 456,722,0,80,-3,80 2 0361 ntilde
+~n 456,722,0,80,-3,80 2 0361 -- ntilde
char241 "
-`o 456,734,14,73,-18,73 2 0362 ograve
+`o 456,734,14,73,-18,73 2 0362 -- ograve
char242 "
-'o 456,734,14,75,-18,75 2 0363 oacute
+'o 456,734,14,75,-18,75 2 0363 -- oacute
char243 "
-^o 456,734,14,73,-18,73 2 0364 ocircumflex
+^o 456,734,14,73,-18,73 2 0364 -- ocircumflex
char244 "
-~o 456,722,14,88,-18,88 2 0365 otilde
+~o 456,722,14,88,-18,88 2 0365 -- otilde
char245 "
-:o 456,706,14,73,-18,73 2 0366 odieresis
+: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
+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
+`u 456,734,15,86,-27,86 2 0371 -- ugrave
char249 "
-'u 456,734,15,86,-27,86 2 0372 uacute
+'u 456,734,15,86,-27,86 2 0372 -- uacute
char250 "
-^u 456,734,15,86,-27,86 2 0373 ucircumflex
+^u 456,734,15,86,-27,86 2 0373 -- ucircumflex
char251 "
-:u 456,706,15,86,-27,86 2 0374 udieresis
+:u 456,706,15,86,-27,86 2 0374 -- udieresis
char252 "
-'y 410,734,214,132,38,89 3 0375 yacute
+'y 410,734,214,132,38,89 3 0375 -- yacute
char253 "
-Tp 456,718,207,73,39,73 3 0376 thorn
+Tp 456,718,207,73,39,73 3 0376 -- thorn
char254 "
-:y 410,706,214,132,38,89 3 0377 ydieresis
+:y 410,706,214,132,38,89 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HNR b/contrib/groff/devps/HNR
index ecd911561f23..e4f30ee68ed6 100644
--- a/contrib/groff/devps/HNR
+++ b/contrib/groff/devps/HNR
@@ -47,6 +47,7 @@ K e -32
K O -40
L y -24
L ' -130
+L cq -130
L rq -114
L Y -114
L W -56
@@ -147,6 +148,7 @@ b b -7
c k -15
c , -11
, ' -81
+, cq -81
, rq -81
e y -15
e x -24
@@ -155,6 +157,7 @@ e v -24
e . -11
e , -11
f ' 41
+f cq 41
f rq 49
f . -24
f o -24
@@ -237,15 +240,22 @@ 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
@@ -283,334 +293,337 @@ 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
+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
-# 456,688 2 0043 numbersign
+! 228,718 2 0041 -- exclam
+" 291,718 2 0042 -- quotedbl
+dq "
+# 456,688 2 0043 -- numbersign
sh "
-$ 456,775,115 2 0044 dollar
+$ 456,775,115 2 0044 -- dollar
Do "
-% 729,703,19 2 0045 percent
-& 547,718,15 2 0046 ampersand
-' 182,718 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 228,737,19 2 0134 -- backslash
rs "
-] 228,722,196 2 0135 bracketright
+] 228,722,196 2 0135 -- bracketright
rB "
-a^ 273,734 2 0136 circumflex
+a^ 273,734 2 0136 -- circumflex
^ "
-_ 456,0,125 0 0137 underscore
-` 182,725 2 0140 quoteleft
+_ 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
+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
+ba 213,737,19 2 0174 -- bar
| "
-rC 274,722,196 2 0175 braceright
+rC 274,722,196 2 0175 -- braceright
} "
-a~ 273,722 2 0176 tilde
+a~ 273,722 2 0176 -- tilde
~ "
-bq 182,106,149 0 0200 quotesinglbase
-Fo 456,446 0 0201 guillemotleft
+bq 182,106,149 0 0200 -- quotesinglbase
+Fo 456,446 0 0201 -- guillemotleft
char171 "
-Fc 456,446 0 0202 guillemotright
+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
+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
+ct 456,623,115 0 0242 -- cent
char162 "
-Po 456,718,16 2 0243 sterling
+Po 456,718,16 2 0243 -- sterling
char163 "
-Cs 456,603 0 0244 currency
+Cs 456,603 0 0244 -- currency
char164 "
-Ye 456,688 2 0245 yen
+Ye 456,688 2 0245 -- yen
char165 "
-bb 213,737,19 2 0246 brokenbar
+bb 213,737,19 2 0246 -- brokenbar
char166 "
-sc 456,737,191 2 0247 section
+sc 456,737,191 2 0247 -- section
char167 "
-ad 273,706 2 0250 dieresis
+ad 273,706 2 0250 -- dieresis
char168 "
-co 604,737,19 2 0251 copyright
+co 604,737,19 2 0251 -- copyright
char169 "
-Of 303,737 2 0252 ordfeminine
+Of 303,737 2 0252 -- ordfeminine
char170 "
-fo 273,446 0 0253 guilsinglleft
-no 479,390 0 0254 logicalnot
+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
+\- 479,289 0 0255 -- minus
+rg 604,737,19 2 0256 -- registered
char174 "
-a- 273,684 2 0257 macron
+a- 273,684 2 0257 -- macron
char175 "
-de 328,703 2 0260 degree
+de 328,703 2 0260 -- degree
char176 "
-char177 479,506 0 0261 plusminus
-S2 273,703 2 0262 twosuperior
+char177 479,506 0 0261 -- plusminus
+S2 273,703 2 0262 -- twosuperior
char178 "
-S3 273,703 2 0263 threesuperior
+S3 273,703 2 0263 -- threesuperior
char179 "
-aa 273,734 2 0264 acute
+aa 273,734 2 0264 -- acute
char180 "
-char181 456,523,207 1 0265 mu
-ps 440,718,173 2 0266 paragraph
+char181 456,523,207 1 0265 -- mu
+ps 440,718,173 2 0266 -- paragraph
char182 "
-char183 228,315 0 0267 periodcentered
-ac 273,0,225 1 0270 cedilla
+pc 228,315 0 0267 -- periodcentered
+char183 "
+ac 273,0,225 1 0270 -- cedilla
char184 "
-S1 273,703 2 0271 onesuperior
+S1 273,703 2 0271 -- onesuperior
char185 "
-Om 299,737 2 0272 ordmasculine
+Om 299,737 2 0272 -- ordmasculine
char186 "
-fc 273,446 0 0273 guilsinglright
-14 684,703,19 2 0274 onequarter
+fc 273,446 0 0273 -- guilsinglright
+14 684,703,19 2 0274 -- onequarter
char188 "
-12 684,703,19 2 0275 onehalf
+12 684,703,19 2 0275 -- onehalf
char189 "
-34 684,703,19 2 0276 threequarters
+34 684,703,19 2 0276 -- threequarters
char190 "
-r? 501,525,201 0 0277 questiondown
+r? 501,525,201 0 0277 -- questiondown
char191 "
-`A 547,929 2 0300 Agrave
+`A 547,929 2 0300 -- Agrave
char192 "
-'A 547,929 2 0301 Aacute
+'A 547,929 2 0301 -- Aacute
char193 "
-^A 547,929 2 0302 Acircumflex
+^A 547,929 2 0302 -- Acircumflex
char194 "
-~A 547,917 2 0303 Atilde
+~A 547,917 2 0303 -- Atilde
char195 "
-:A 547,901 2 0304 Adieresis
+:A 547,901 2 0304 -- Adieresis
char196 "
-oA 547,931 2 0305 Aring
+oA 547,931 2 0305 -- Aring
char197 "
-AE 820,718 2 0306 AE
+AE 820,718 2 0306 -- AE
char198 "
-,C 592,737,225 3 0307 Ccedilla
+,C 592,737,225 3 0307 -- Ccedilla
char199 "
-`E 547,929 2 0310 Egrave
+`E 547,929 2 0310 -- Egrave
char200 "
-'E 547,929 2 0311 Eacute
+'E 547,929 2 0311 -- Eacute
char201 "
-^E 547,929 2 0312 Ecircumflex
+^E 547,929 2 0312 -- Ecircumflex
char202 "
-:E 547,901 2 0313 Edieresis
+:E 547,901 2 0313 -- Edieresis
char203 "
-`I 228,929 2 0314 Igrave
+`I 228,929 2 0314 -- Igrave
char204 "
-'I 228,929 2 0315 Iacute
+'I 228,929 2 0315 -- Iacute
char205 "
-^I 228,929 2 0316 Icircumflex
+^I 228,929 2 0316 -- Icircumflex
char206 "
-:I 228,901 2 0317 Idieresis
+:I 228,901 2 0317 -- Idieresis
char207 "
--D 592,718 2 0320 Eth
+-D 592,718 2 0320 -- Eth
char208 "
-~N 592,917 2 0321 Ntilde
+~N 592,917 2 0321 -- Ntilde
char209 "
-`O 638,929,19 2 0322 Ograve
+`O 638,929,19 2 0322 -- Ograve
char210 "
-'O 638,929,19 2 0323 Oacute
+'O 638,929,19 2 0323 -- Oacute
char211 "
-^O 638,929,19 2 0324 Ocircumflex
+^O 638,929,19 2 0324 -- Ocircumflex
char212 "
-~O 638,917,19 2 0325 Otilde
+~O 638,917,19 2 0325 -- Otilde
char213 "
-:O 638,901,19 2 0326 Odieresis
+:O 638,901,19 2 0326 -- Odieresis
char214 "
-char215 479,506 0 0327 multiply
-/O 638,737,19 2 0330 Oslash
+char215 479,506 0 0327 -- multiply
+/O 638,737,19 2 0330 -- Oslash
char216 "
-`U 592,929,19 2 0331 Ugrave
+`U 592,929,19 2 0331 -- Ugrave
char217 "
-'U 592,929,19 2 0332 Uacute
+'U 592,929,19 2 0332 -- Uacute
char218 "
-^U 592,929,19 2 0333 Ucircumflex
+^U 592,929,19 2 0333 -- Ucircumflex
char219 "
-:U 592,901,19 2 0334 Udieresis
+:U 592,901,19 2 0334 -- Udieresis
char220 "
-'Y 547,929 2 0335 Yacute
+'Y 547,929 2 0335 -- Yacute
char221 "
-TP 547,718 2 0336 Thorn
+TP 547,718 2 0336 -- Thorn
char222 "
-ss 501,728,15 2 0337 germandbls
+ss 501,728,15 2 0337 -- germandbls
char223 "
-`a 456,734,15 2 0340 agrave
+`a 456,734,15 2 0340 -- agrave
char224 "
-'a 456,734,15 2 0341 aacute
+'a 456,734,15 2 0341 -- aacute
char225 "
-^a 456,734,15 2 0342 acircumflex
+^a 456,734,15 2 0342 -- acircumflex
char226 "
-~a 456,722,15 2 0343 atilde
+~a 456,722,15 2 0343 -- atilde
char227 "
-:a 456,706,15 2 0344 adieresis
+:a 456,706,15 2 0344 -- adieresis
char228 "
-oa 456,756,15 2 0345 aring
+oa 456,756,15 2 0345 -- aring
char229 "
-ae 729,538,15 0 0346 ae
+ae 729,538,15 0 0346 -- ae
char230 "
-,c 410,538,225 1 0347 ccedilla
+,c 410,538,225 1 0347 -- ccedilla
char231 "
-`e 456,734,15 2 0350 egrave
+`e 456,734,15 2 0350 -- egrave
char232 "
-'e 456,734,15 2 0351 eacute
+'e 456,734,15 2 0351 -- eacute
char233 "
-^e 456,734,15 2 0352 ecircumflex
+^e 456,734,15 2 0352 -- ecircumflex
char234 "
-:e 456,706,15 2 0353 edieresis
+:e 456,706,15 2 0353 -- edieresis
char235 "
-`i 228,734 2 0354 igrave
+`i 228,734 2 0354 -- igrave
char236 "
-'i 228,734 2 0355 iacute
+'i 228,734 2 0355 -- iacute
char237 "
-^i 228,734 2 0356 icircumflex
+^i 228,734 2 0356 -- icircumflex
char238 "
-:i 228,706 2 0357 idieresis
+:i 228,706 2 0357 -- idieresis
char239 "
-Sd 456,737,15 2 0360 eth
+Sd 456,737,15 2 0360 -- eth
char240 "
-~n 456,722 2 0361 ntilde
+~n 456,722 2 0361 -- ntilde
char241 "
-`o 456,734,14 2 0362 ograve
+`o 456,734,14 2 0362 -- ograve
char242 "
-'o 456,734,14 2 0363 oacute
+'o 456,734,14 2 0363 -- oacute
char243 "
-^o 456,734,14 2 0364 ocircumflex
+^o 456,734,14 2 0364 -- ocircumflex
char244 "
-~o 456,722,14 2 0365 otilde
+~o 456,722,14 2 0365 -- otilde
char245 "
-:o 456,706,14 2 0366 odieresis
+:o 456,706,14 2 0366 -- odieresis
char246 "
-char247 479,524,19 0 0367 divide
-/o 501,545,22 0 0370 oslash
+char247 479,524,19 0 0367 -- divide
+/o 501,545,22 0 0370 -- oslash
char248 "
-`u 456,734,15 2 0371 ugrave
+`u 456,734,15 2 0371 -- ugrave
char249 "
-'u 456,734,15 2 0372 uacute
+'u 456,734,15 2 0372 -- uacute
char250 "
-^u 456,734,15 2 0373 ucircumflex
+^u 456,734,15 2 0373 -- ucircumflex
char251 "
-:u 456,706,15 2 0374 udieresis
+:u 456,706,15 2 0374 -- udieresis
char252 "
-'y 410,734,214 3 0375 yacute
+'y 410,734,214 3 0375 -- yacute
char253 "
-Tp 456,718,207 3 0376 thorn
+Tp 456,718,207 3 0376 -- thorn
char254 "
-:y 410,706,214 3 0377 ydieresis
+:y 410,706,214 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/HR b/contrib/groff/devps/HR
index 9dd2687e390e..3f89e25855a5 100644
--- a/contrib/groff/devps/HR
+++ b/contrib/groff/devps/HR
@@ -47,6 +47,7 @@ K e -40
K O -50
L y -30
L ' -160
+L cq -160
L rq -140
L Y -140
L W -70
@@ -147,6 +148,7 @@ b b -10
c k -20
c , -15
, ' -100
+, cq -100
, rq -100
e y -20
e x -30
@@ -155,6 +157,7 @@ e v -30
e . -15
e , -15
f ' 50
+f cq 50
f rq 60
f . -30
f o -30
@@ -237,15 +240,22 @@ 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
@@ -283,334 +293,337 @@ 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
+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
-# 556,688 2 0043 numbersign
+! 278,718 2 0041 -- exclam
+" 355,718 2 0042 -- quotedbl
+dq "
+# 556,688 2 0043 -- numbersign
sh "
-$ 556,775,115 2 0044 dollar
+$ 556,775,115 2 0044 -- dollar
Do "
-% 889,703,19 2 0045 percent
-& 667,718,15 2 0046 ampersand
-' 222,718 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 278,737,19 2 0134 -- backslash
rs "
-] 278,722,196 2 0135 bracketright
+] 278,722,196 2 0135 -- bracketright
rB "
-a^ 333,734 2 0136 circumflex
+a^ 333,734 2 0136 -- circumflex
^ "
-_ 556,0,125 0 0137 underscore
-` 222,725 2 0140 quoteleft
+_ 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
+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
+ba 260,737,19 2 0174 -- bar
| "
-rC 334,722,196 2 0175 braceright
+rC 334,722,196 2 0175 -- braceright
} "
-a~ 333,722 2 0176 tilde
+a~ 333,722 2 0176 -- tilde
~ "
-bq 222,106,149 0 0200 quotesinglbase
-Fo 556,446 0 0201 guillemotleft
+bq 222,106,149 0 0200 -- quotesinglbase
+Fo 556,446 0 0201 -- guillemotleft
char171 "
-Fc 556,446 0 0202 guillemotright
+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
+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
+ct 556,623,115 0 0242 -- cent
char162 "
-Po 556,718,16 2 0243 sterling
+Po 556,718,16 2 0243 -- sterling
char163 "
-Cs 556,603 0 0244 currency
+Cs 556,603 0 0244 -- currency
char164 "
-Ye 556,688 2 0245 yen
+Ye 556,688 2 0245 -- yen
char165 "
-bb 260,737,19 2 0246 brokenbar
+bb 260,737,19 2 0246 -- brokenbar
char166 "
-sc 556,737,191 2 0247 section
+sc 556,737,191 2 0247 -- section
char167 "
-ad 333,706 2 0250 dieresis
+ad 333,706 2 0250 -- dieresis
char168 "
-co 737,737,19 2 0251 copyright
+co 737,737,19 2 0251 -- copyright
char169 "
-Of 370,737 2 0252 ordfeminine
+Of 370,737 2 0252 -- ordfeminine
char170 "
-fo 333,446 0 0253 guilsinglleft
-no 584,390 0 0254 logicalnot
+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
+\- 584,289 0 0255 -- minus
+rg 737,737,19 2 0256 -- registered
char174 "
-a- 333,684 2 0257 macron
+a- 333,684 2 0257 -- macron
char175 "
-de 400,703 2 0260 degree
+de 400,703 2 0260 -- degree
char176 "
-char177 584,506 0 0261 plusminus
-S2 333,703 2 0262 twosuperior
+char177 584,506 0 0261 -- plusminus
+S2 333,703 2 0262 -- twosuperior
char178 "
-S3 333,703 2 0263 threesuperior
+S3 333,703 2 0263 -- threesuperior
char179 "
-aa 333,734 2 0264 acute
+aa 333,734 2 0264 -- acute
char180 "
-char181 556,523,207 1 0265 mu
-ps 537,718,173 2 0266 paragraph
+char181 556,523,207 1 0265 -- mu
+ps 537,718,173 2 0266 -- paragraph
char182 "
-char183 278,315 0 0267 periodcentered
-ac 333,0,225 1 0270 cedilla
+pc 278,315 0 0267 -- periodcentered
+char183 "
+ac 333,0,225 1 0270 -- cedilla
char184 "
-S1 333,703 2 0271 onesuperior
+S1 333,703 2 0271 -- onesuperior
char185 "
-Om 365,737 2 0272 ordmasculine
+Om 365,737 2 0272 -- ordmasculine
char186 "
-fc 333,446 0 0273 guilsinglright
-14 834,703,19 2 0274 onequarter
+fc 333,446 0 0273 -- guilsinglright
+14 834,703,19 2 0274 -- onequarter
char188 "
-12 834,703,19 2 0275 onehalf
+12 834,703,19 2 0275 -- onehalf
char189 "
-34 834,703,19 2 0276 threequarters
+34 834,703,19 2 0276 -- threequarters
char190 "
-r? 611,525,201 0 0277 questiondown
+r? 611,525,201 0 0277 -- questiondown
char191 "
-`A 667,929 2 0300 Agrave
+`A 667,929 2 0300 -- Agrave
char192 "
-'A 667,929 2 0301 Aacute
+'A 667,929 2 0301 -- Aacute
char193 "
-^A 667,929 2 0302 Acircumflex
+^A 667,929 2 0302 -- Acircumflex
char194 "
-~A 667,917 2 0303 Atilde
+~A 667,917 2 0303 -- Atilde
char195 "
-:A 667,901 2 0304 Adieresis
+:A 667,901 2 0304 -- Adieresis
char196 "
-oA 667,931 2 0305 Aring
+oA 667,931 2 0305 -- Aring
char197 "
-AE 1000,718 2 0306 AE
+AE 1000,718 2 0306 -- AE
char198 "
-,C 722,737,225 3 0307 Ccedilla
+,C 722,737,225 3 0307 -- Ccedilla
char199 "
-`E 667,929 2 0310 Egrave
+`E 667,929 2 0310 -- Egrave
char200 "
-'E 667,929 2 0311 Eacute
+'E 667,929 2 0311 -- Eacute
char201 "
-^E 667,929 2 0312 Ecircumflex
+^E 667,929 2 0312 -- Ecircumflex
char202 "
-:E 667,901 2 0313 Edieresis
+:E 667,901 2 0313 -- Edieresis
char203 "
-`I 278,929 2 0314 Igrave
+`I 278,929 2 0314 -- Igrave
char204 "
-'I 278,929 2 0315 Iacute
+'I 278,929 2 0315 -- Iacute
char205 "
-^I 278,929 2 0316 Icircumflex
+^I 278,929 2 0316 -- Icircumflex
char206 "
-:I 278,901 2 0317 Idieresis
+:I 278,901 2 0317 -- Idieresis
char207 "
--D 722,718 2 0320 Eth
+-D 722,718 2 0320 -- Eth
char208 "
-~N 722,917 2 0321 Ntilde
+~N 722,917 2 0321 -- Ntilde
char209 "
-`O 778,929,19 2 0322 Ograve
+`O 778,929,19 2 0322 -- Ograve
char210 "
-'O 778,929,19 2 0323 Oacute
+'O 778,929,19 2 0323 -- Oacute
char211 "
-^O 778,929,19 2 0324 Ocircumflex
+^O 778,929,19 2 0324 -- Ocircumflex
char212 "
-~O 778,917,19 2 0325 Otilde
+~O 778,917,19 2 0325 -- Otilde
char213 "
-:O 778,901,19 2 0326 Odieresis
+:O 778,901,19 2 0326 -- Odieresis
char214 "
-char215 584,506 0 0327 multiply
-/O 778,737,19 2 0330 Oslash
+char215 584,506 0 0327 -- multiply
+/O 778,737,19 2 0330 -- Oslash
char216 "
-`U 722,929,19 2 0331 Ugrave
+`U 722,929,19 2 0331 -- Ugrave
char217 "
-'U 722,929,19 2 0332 Uacute
+'U 722,929,19 2 0332 -- Uacute
char218 "
-^U 722,929,19 2 0333 Ucircumflex
+^U 722,929,19 2 0333 -- Ucircumflex
char219 "
-:U 722,901,19 2 0334 Udieresis
+:U 722,901,19 2 0334 -- Udieresis
char220 "
-'Y 667,929 2 0335 Yacute
+'Y 667,929 2 0335 -- Yacute
char221 "
-TP 667,718 2 0336 Thorn
+TP 667,718 2 0336 -- Thorn
char222 "
-ss 611,728,15 2 0337 germandbls
+ss 611,728,15 2 0337 -- germandbls
char223 "
-`a 556,734,15 2 0340 agrave
+`a 556,734,15 2 0340 -- agrave
char224 "
-'a 556,734,15 2 0341 aacute
+'a 556,734,15 2 0341 -- aacute
char225 "
-^a 556,734,15 2 0342 acircumflex
+^a 556,734,15 2 0342 -- acircumflex
char226 "
-~a 556,722,15 2 0343 atilde
+~a 556,722,15 2 0343 -- atilde
char227 "
-:a 556,706,15 2 0344 adieresis
+:a 556,706,15 2 0344 -- adieresis
char228 "
-oa 556,756,15 2 0345 aring
+oa 556,756,15 2 0345 -- aring
char229 "
-ae 889,538,15 0 0346 ae
+ae 889,538,15 0 0346 -- ae
char230 "
-,c 500,538,225 1 0347 ccedilla
+,c 500,538,225 1 0347 -- ccedilla
char231 "
-`e 556,734,15 2 0350 egrave
+`e 556,734,15 2 0350 -- egrave
char232 "
-'e 556,734,15 2 0351 eacute
+'e 556,734,15 2 0351 -- eacute
char233 "
-^e 556,734,15 2 0352 ecircumflex
+^e 556,734,15 2 0352 -- ecircumflex
char234 "
-:e 556,706,15 2 0353 edieresis
+:e 556,706,15 2 0353 -- edieresis
char235 "
-`i 278,734 2 0354 igrave
+`i 278,734 2 0354 -- igrave
char236 "
-'i 278,734 2 0355 iacute
+'i 278,734 2 0355 -- iacute
char237 "
-^i 278,734 2 0356 icircumflex
+^i 278,734 2 0356 -- icircumflex
char238 "
-:i 278,706 2 0357 idieresis
+:i 278,706 2 0357 -- idieresis
char239 "
-Sd 556,737,15 2 0360 eth
+Sd 556,737,15 2 0360 -- eth
char240 "
-~n 556,722 2 0361 ntilde
+~n 556,722 2 0361 -- ntilde
char241 "
-`o 556,734,14 2 0362 ograve
+`o 556,734,14 2 0362 -- ograve
char242 "
-'o 556,734,14 2 0363 oacute
+'o 556,734,14 2 0363 -- oacute
char243 "
-^o 556,734,14 2 0364 ocircumflex
+^o 556,734,14 2 0364 -- ocircumflex
char244 "
-~o 556,722,14 2 0365 otilde
+~o 556,722,14 2 0365 -- otilde
char245 "
-:o 556,706,14 2 0366 odieresis
+:o 556,706,14 2 0366 -- odieresis
char246 "
-char247 584,524,19 0 0367 divide
-/o 611,545,22 0 0370 oslash
+char247 584,524,19 0 0367 -- divide
+/o 611,545,22 0 0370 -- oslash
char248 "
-`u 556,734,15 2 0371 ugrave
+`u 556,734,15 2 0371 -- ugrave
char249 "
-'u 556,734,15 2 0372 uacute
+'u 556,734,15 2 0372 -- uacute
char250 "
-^u 556,734,15 2 0373 ucircumflex
+^u 556,734,15 2 0373 -- ucircumflex
char251 "
-:u 556,706,15 2 0374 udieresis
+:u 556,706,15 2 0374 -- udieresis
char252 "
-'y 500,734,214 3 0375 yacute
+'y 500,734,214 3 0375 -- yacute
char253 "
-Tp 556,718,207 3 0376 thorn
+Tp 556,718,207 3 0376 -- thorn
char254 "
-:y 500,706,214 3 0377 ydieresis
+:y 500,706,214 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/Makefile.sub b/contrib/groff/devps/Makefile.sub
index a46693f96df1..a40f63f79568 100644
--- a/contrib/groff/devps/Makefile.sub
+++ b/contrib/groff/devps/Makefile.sub
@@ -1,8 +1,8 @@
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
+ 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 \
diff --git a/contrib/groff/devps/NB b/contrib/groff/devps/NB
index 2805367abeeb..1a926cb812d4 100644
--- a/contrib/groff/devps/NB
+++ b/contrib/groff/devps/NB
@@ -4,443 +4,470 @@ spacewidth 287
encoding text.enc
ligatures fi fl 0
kernpairs
-A y -74
-A w -74
-A v -74
+A y -18
+A w -18
+A v -18
A ' -74
-A Y -92
+A cq -74
+A rq -74
+A Y -91
A W -74
-A V -92
+A V -74
+A U -18
A T -55
-F . -111
-F , -111
-F A -74
-L y -55
-L ' -55
-L Y -92
+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 -92
-L T -55
-P . -129
-P , -129
+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
-R y -18
-R Y -37
-R W -37
-R V -37
-T y -52
-T w -71
-T u -71
-T ; -55
-T s -62
-T r -62
-T . -92
-T o -92
-T i -25
-T - -92
-T hy -92
-T char173 -92
-T e -92
-T , -92
-T : -55
-T c -81
-T a -62
+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
-V y -92
-V u -74
-V ; -74
-V r -74
-V . -129
-V o -92
-V i -44
-V - -92
-V hy -92
-V char173 -92
-V e -92
-V : -74
-V a -92
-V A -92
-W y -74
-W u -55
-W ; -37
-W r -55
-W . -111
-W o -55
-W i -37
-W - -37
-W hy -37
-W char173 -37
-W e -55
-W , -111
-W : -37
+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 v -81
-Y u -92
-Y ; -92
-Y q -111
-Y . -111
-Y p -81
-Y o -111
-Y i -44
-Y - -111
-Y hy -111
-Y char173 -111
-Y e -111
-Y , -111
-Y : -92
-Y a -111
-Y A -92
-f ' 94
-1 1 -55
-` ` -18
-` oq -18
-oq ` -18
-oq oq -18
-' t -18
-' s -37
-' ' -18
-r ' 55
+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 - -18
-r hy -18
-r char173 -18
r , -74
-v . -111
-v , -111
-w . -92
-w , -92
-y . -111
-y , -111
+v . -100
+v , -100
+w . -100
+w , -100
+y . -100
+y , -100
charset
-ha 606,722 2 0000 asciicircum
-ti 606,347 0 0001 asciitilde
-vS 667,970,15 2 0002 Scaron
-vZ 667,970 2 0003 Zcaron
-vs 500,723,15 2 0004 scaron
-vz 537,723 2 0005 zcaron
-:Y 722,940 2 0006 Ydieresis
-tm 1000,722 2 0007 trademark
-aq 241,737 2 0010 quotesingle
+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
-# 574,705 2 0043 numbersign
+! 296,737,15 2 0041 -- exclam
+" 333,737 2 0042 -- quotedbl
+dq "
+# 574,690 2 0043 -- numbersign
sh "
-$ 574,801,140 2 0044 dollar
+$ 574,810,141 2 0044 -- dollar
Do "
-% 833,704,18 2 0045 percent
-& 852,737,15 2 0046 ampersand
-' 241,737 2 0047 quoteright
-( 389,737,122 2 0050 parenleft
-) 389,737,122 2 0051 parenright
-* 500,738 2 0052 asterisk
-+ 606,514 0 0053 plus
-, 278,169,189 0 0054 comma
-- 333,309 0 0055 hyphen
+% 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,172,15 0 0056 period
-/ 278,737,15 2 0057 slash
+. 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,4 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,189 0 0073 semicolon
-< 606,538,13 0 0074 less
-= 606,399 0 0075 equal
-> 606,538,13 0 0076 greater
-? 500,737,15 2 0077 question
-@ 747,737,15 2 0100 at
+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,8 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,15 2 0126 V
-W 981,722,15 2 0127 W
-X 722,722 2 0130 X
-Y 722,722 2 0131 Y
-Z 667,722 2 0132 Z
-[ 389,722,113 2 0133 bracketleft
+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 2 0134 backslash
+\ 606,737,15 2 0134 -- backslash
rs "
-] 389,722,113 2 0135 bracketright
+] 389,737,109 2 0135 -- bracketright
rB "
-a^ 333,723 2 0136 circumflex
+a^ 333,725 2 0136 -- circumflex
^ "
-_ 500,0,148 0 0137 underscore
-` 241,747 2 0140 quoteleft
+_ 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,536,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,8 0 0166 v
-w 889,475,8 0 0167 w
-x 611,475 0 0170 x
-y 611,475,207 1 0171 y
-z 537,475 0 0172 z
-lC 389,723,111 2 0173 braceleft
+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,737 2 0174 bar
+ba 606,750,250 3 0174 -- bar
| "
-rC 389,723,111 2 0175 braceright
+rC 389,737,109 2 0175 -- braceright
} "
-a~ 333,704 2 0176 tilde
+a~ 333,705 2 0176 -- tilde
~ "
-bq 241,169,189 0 0200 quotesinglbase
-Fo 500,405 0 0201 guillemotleft
+bq 241,175,184 0 0200 -- quotesinglbase
+Fo 500,397 0 0201 -- guillemotleft
char171 "
-Fc 500,405 0 0202 guillemotright
+Fc 500,397 0 0202 -- guillemotright
char187 "
-bu 606,511 0 0203 bullet
-Fn 574,737,205 3 0204 florin
-f/ 167,705 2 0205 fraction
-%0 1000,694,27 2 0206 perthousand
-dg 500,737,88 2 0207 dagger
-dd 500,736,89 2 0210 daggerdbl
-en 500,296 0 0211 endash
-em 1000,296 0 0212 emdash
-fi 685,737 2 0214 fi
-fl 685,737 2 0215 fl
-.i 370,475 0 0220 dotlessi
-ga 333,734 2 0222 grave
-a" 333,737 2 0223 hungarumlaut
-a. 333,693 2 0224 dotaccent
-ab 333,712 2 0225 breve
-ah 333,723 2 0226 caron
-ao 333,760 2 0227 ring
-ho 333,0,163 0 0230 ogonek
-lq 481,747 2 0231 quotedblleft
-rq 481,737 2 0232 quotedblright
-oe 907,485,15 0 0233 oe
-/l 352,737 2 0234 lslash
-Bq 481,169,189 0 0235 quotedblbase
-OE 1000,722 2 0236 OE
-/L 722,722 2 0237 Lslash
-r! 296,547,205 1 0241 exclamdown
+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,566,108 0 0242 cent
+ct 574,572,102 0 0242 -- cent
char162 "
-Po 574,705,15 2 0243 sterling
+Po 574,705,15 2 0243 -- sterling
char163 "
-Cs 574,591 0 0244 currency
+Cs 574,605 0 0244 -- currency
char164 "
-Ye 574,705 2 0245 yen
+Ye 574,690 2 0245 -- yen
char165 "
-bb 606,737 2 0246 brokenbar
+bb 606,675,175 2 0246 -- brokenbar
char166 "
-sc 500,737,86 2 0247 section
+sc 500,737,86 2 0247 -- section
char167 "
-ad 333,693 2 0250 dieresis
+ad 333,694 2 0250 -- dieresis
char168 "
-co 747,737,15 2 0251 copyright
+co 747,737,15 2 0251 -- copyright
char169 "
-Of 367,737 2 0252 ordfeminine
+Of 367,705 2 0252 -- ordfeminine
char170 "
-fo 333,405 0 0253 guilsinglleft
-no 606,399 0 0254 logicalnot
+fo 333,397 0 0253 -- guilsinglleft
+no 606,403 0 0254 -- logicalnot
char172 "
-\- 606,302 0 0255 minus
-rg 747,737,15 2 0256 registered
+\- 606,307 0 0255 -- minus
+rg 747,737,15 2 0256 -- registered
char174 "
-a- 333,663 0 0257 macron
+a- 333,664 0 0257 -- macron
char175 "
-de 400,705 2 0260 degree
+de 400,705 2 0260 -- degree
char176 "
-char177 606,514 0 0261 plusminus
-S2 344,705 2 0262 twosuperior
+char177 606,506 0 0261 -- plusminus
+S2 344,705 2 0262 -- twosuperior
char178 "
-S3 344,705 2 0263 threesuperior
+S3 344,705 2 0263 -- threesuperior
char179 "
-aa 333,737 2 0264 acute
+aa 333,737 2 0264 -- acute
char180 "
-char181 685,475,205 1 0265 mu
-ps 747,722 2 0266 paragraph
+char181 685,475,205 1 0265 -- mu
+ps 747,722,71 2 0266 -- paragraph
char182 "
-char183 278,338 0 0267 periodcentered
-ac 333,0,221 1 0270 cedilla
+pc 278,372 0 0267 -- periodcentered
+char183 "
+ac 333,0,224 1 0270 -- cedilla
char184 "
-S1 344,705 2 0271 onesuperior
+S1 344,705 2 0271 -- onesuperior
char185 "
-Om 367,737 2 0272 ordmasculine
+Om 367,705 2 0272 -- ordmasculine
char186 "
-fc 333,408 0 0273 guilsinglright
-14 861,705 2 0274 onequarter
+fc 333,397 0 0273 -- guilsinglright
+14 861,705,15 2 0274 -- onequarter
char188 "
-12 861,705,2 2 0275 onehalf
+12 861,705,15 2 0275 -- onehalf
char189 "
-34 861,705 2 0276 threequarters
+34 861,705,15 2 0276 -- threequarters
char190 "
-r? 500,547,205 1 0277 questiondown
+r? 500,547,205 1 0277 -- questiondown
char191 "
-`A 759,981 2 0300 Agrave
+`A 759,964 2 0300 -- Agrave
char192 "
-'A 759,984 2 0301 Aacute
+'A 759,964 2 0301 -- Aacute
char193 "
-^A 759,970 2 0302 Acircumflex
+^A 759,952 2 0302 -- Acircumflex
char194 "
-~A 759,951 2 0303 Atilde
+~A 759,932 2 0303 -- Atilde
char195 "
-:A 759,940 2 0304 Adieresis
+:A 759,921 2 0304 -- Adieresis
char196 "
-oA 759,1007 2 0305 Aring
+oA 759,988 2 0305 -- Aring
char197 "
-AE 981,722 2 0306 AE
+AE 981,722 2 0306 -- AE
char198 "
-,C 778,737,221 3 0307 Ccedilla
+,C 778,737,224 3 0307 -- Ccedilla
char199 "
-`E 759,981 2 0310 Egrave
+`E 759,964 2 0310 -- Egrave
char200 "
-'E 759,984 2 0311 Eacute
+'E 759,964 2 0311 -- Eacute
char201 "
-^E 759,970 2 0312 Ecircumflex
+^E 759,952 2 0312 -- Ecircumflex
char202 "
-:E 759,940 2 0313 Edieresis
+:E 759,921 2 0313 -- Edieresis
char203 "
-`I 444,981 2 0314 Igrave
+`I 444,964 2 0314 -- Igrave
char204 "
-'I 444,984 2 0315 Iacute
+'I 444,964 2 0315 -- Iacute
char205 "
-^I 444,970 2 0316 Icircumflex
+^I 444,952 2 0316 -- Icircumflex
char206 "
-:I 444,940 2 0317 Idieresis
+:I 444,921 2 0317 -- Idieresis
char207 "
--D 833,722 2 0320 Eth
+-D 833,722 2 0320 -- Eth
char208 "
-~N 833,951,8 2 0321 Ntilde
+~N 833,932,10 2 0321 -- Ntilde
char209 "
-`O 833,981,15 2 0322 Ograve
+`O 833,964,15 2 0322 -- Ograve
char210 "
-'O 833,984,15 2 0323 Oacute
+'O 833,964,15 2 0323 -- Oacute
char211 "
-^O 833,970,15 2 0324 Ocircumflex
+^O 833,952,15 2 0324 -- Ocircumflex
char212 "
-~O 833,951,15 2 0325 Otilde
+~O 833,932,15 2 0325 -- Otilde
char213 "
-:O 833,940,15 2 0326 Odieresis
+:O 833,921,15 2 0326 -- Odieresis
char214 "
-char215 606,504 0 0327 multiply
-/O 833,768,60 2 0330 Oslash
+char215 606,491 0 0327 -- multiply
+/O 833,775,53 2 0330 -- Oslash
char216 "
-`U 833,981,15 2 0331 Ugrave
+`U 833,964,15 2 0331 -- Ugrave
char217 "
-'U 833,984,15 2 0332 Uacute
+'U 833,964,15 2 0332 -- Uacute
char218 "
-^U 833,970,15 2 0333 Ucircumflex
+^U 833,952,15 2 0333 -- Ucircumflex
char219 "
-:U 833,940,15 2 0334 Udieresis
+:U 833,921,15 2 0334 -- Udieresis
char220 "
-'Y 722,984 2 0335 Yacute
+'Y 722,964 2 0335 -- Yacute
char221 "
-TP 759,722 2 0336 Thorn
+TP 759,722 2 0336 -- Thorn
char222 "
-ss 611,737,15 2 0337 germandbls
+ss 611,737,15 2 0337 -- germandbls
char223 "
-`a 611,734,15 2 0340 agrave
+`a 611,737,15 2 0340 -- agrave
char224 "
-'a 611,737,15 2 0341 aacute
+'a 611,737,15 2 0341 -- aacute
char225 "
-^a 611,723,15 2 0342 acircumflex
+^a 611,725,15 2 0342 -- acircumflex
char226 "
-~a 611,704,15 2 0343 atilde
+~a 611,705,15 2 0343 -- atilde
char227 "
-:a 611,693,15 2 0344 adieresis
+:a 611,694,15 2 0344 -- adieresis
char228 "
-oa 611,760,15 2 0345 aring
+oa 611,761,15 2 0345 -- aring
char229 "
-ae 870,485,15 0 0346 ae
+ae 870,485,15 0 0346 -- ae
char230 "
-,c 556,485,221 1 0347 ccedilla
+,c 556,485,224 1 0347 -- ccedilla
char231 "
-`e 574,734,15 2 0350 egrave
+`e 574,737,15 2 0350 -- egrave
char232 "
-'e 574,737,15 2 0351 eacute
+'e 574,737,15 2 0351 -- eacute
char233 "
-^e 574,723,15 2 0352 ecircumflex
+^e 574,725,15 2 0352 -- ecircumflex
char234 "
-:e 574,693,15 2 0353 edieresis
+:e 574,694,15 2 0353 -- edieresis
char235 "
-`i 370,734 2 0354 igrave
+`i 370,737 2 0354 -- igrave
char236 "
-'i 370,737 2 0355 iacute
+'i 370,737 2 0355 -- iacute
char237 "
-^i 370,723 2 0356 icircumflex
+^i 370,725 2 0356 -- icircumflex
char238 "
-:i 370,693 2 0357 idieresis
+:i 370,694 2 0357 -- idieresis
char239 "
-Sd 611,737,15 2 0360 eth
+Sd 611,737,15 2 0360 -- eth
char240 "
-~n 685,704 2 0361 ntilde
+~n 685,705 2 0361 -- ntilde
char241 "
-`o 611,734,15 2 0362 ograve
+`o 611,737,15 2 0362 -- ograve
char242 "
-'o 611,737,15 2 0363 oacute
+'o 611,737,15 2 0363 -- oacute
char243 "
-^o 611,723,15 2 0364 ocircumflex
+^o 611,725,15 2 0364 -- ocircumflex
char244 "
-~o 611,704,15 2 0365 otilde
+~o 611,705,15 2 0365 -- otilde
char245 "
-:o 611,693,15 2 0366 odieresis
+:o 611,694,15 2 0366 -- odieresis
char246 "
-char247 606,514 0 0367 divide
-/o 611,565,111 0 0370 oslash
+char247 606,546,40 0 0367 -- divide
+/o 611,573,103 0 0370 -- oslash
char248 "
-`u 685,734,15 2 0371 ugrave
+`u 685,737,15 2 0371 -- ugrave
char249 "
-'u 685,737,15 2 0372 uacute
+'u 685,737,15 2 0372 -- uacute
char250 "
-^u 685,723,15 2 0373 ucircumflex
+^u 685,725,15 2 0373 -- ucircumflex
char251 "
-:u 685,693,15 2 0374 udieresis
+:u 685,694,15 2 0374 -- udieresis
char252 "
-'y 611,737,207 3 0375 yacute
+'y 611,737,205 3 0375 -- yacute
char253 "
-Tp 667,675,205 3 0376 thorn
+Tp 667,737,205 3 0376 -- thorn
char254 "
-:y 611,693,207 3 0377 ydieresis
+:y 611,694,205 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/NBI b/contrib/groff/devps/NBI
index 3471b41e757b..97e4f46cd51b 100644
--- a/contrib/groff/devps/NBI
+++ b/contrib/groff/devps/NBI
@@ -5,443 +5,590 @@ spacewidth 287
encoding text.enc
ligatures fi fl 0
kernpairs
-A y -50
-A w -20
-A v -20
-A ' -74
-A Y -74
-A W -92
-A V -111
-A T -74
-F . -129
-F f -18
-F , -129
-F A -74
-L y -55
-L ' -55
+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 -55
-L V -74
-L T -55
-P . -129
-P , -129
-P A -92
-R y -50
-R Y -20
-R W -20
-R V -20
-R T -20
-T y -89
-T w -89
-T u -89
-T ; -72
-T s -89
-T r -89
-T . -111
-T o -109
-T i -71
-T - -129
-T hy -129
-T char173 -129
-T e -109
-T , -111
-T : -62
-T c -89
-T a -74
-T A -50
-V y -89
-V u -89
-V ; -74
-V r -109
-V . -111
-V o -129
-V i -72
-V - -74
-V hy -74
-V char173 -74
-V e -129
-V , -111
-V : -74
-V a -129
-V A -129
-W y -74
-W u -74
-W ; -37
-W r -74
-W . -55
-W o -74
-W i -74
-W - -37
-W hy -37
-W char173 -37
-W e -74
-W , -55
-W : -37
-W a -74
-W A -89
-Y v -129
-Y u -129
-Y ; -111
-Y q -129
-Y . -129
-Y p -129
-Y o -129
-Y i -90
-Y - -129
-Y hy -129
-Y char173 -129
-Y e -129
-Y , -129
-Y : -111
-Y a -129
-Y A -111
-f ' 74
-1 1 -74
-` ` -18
-` oq -18
-oq ` -18
-oq oq -18
-' t -37
-' s -37
-' ' -18
-r ' 55
-r . -129
-r , -129
-v . -37
-v , -37
-w . -37
-w , -37
-y . -55
-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,722,0,0,-2 2 0000 asciicircum
-ti 606,353,0,0,-1 0 0001 asciitilde
-vS 685,954,15,31,49,31 2 0002 Scaron
-vZ 704,954,0,61,79,61 2 0003 Zcaron
-vs 481,709,15,46,48,46 2 0004 scaron
-vz 519,709,15,27,69,27 2 0005 zcaron
-:Y 704,930,0,123,35,109 2 0006 Ydieresis
-tm 950,722,0,82,8,82 2 0007 trademark
-aq 287,736,0,32,-50,32 2 0010 quotesingle
+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,53,47,53 2 0041 exclam
-" 400,737,0,157,-50,109 2 0042 quotedbl
-# 574,705,0,9,9,9 2 0043 numbersign
+! 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,799,143,35,47,35 2 0044 dollar
+$ 574,810,120,41,41,41 2 0044 -- dollar
Do "
-% 889,721,34,0,-1 2 0045 percent
-& 889,737,15,0,19 2 0046 ampersand
-' 259,739,0,92,-20,92 2 0047 quoteright
-( 407,740,123,95,-21,95 2 0050 parenleft
-) 407,740,123,0,120 2 0051 parenright
-* 500,704,0,22,18,22 2 0052 asterisk
-+ 606,505,0,0,9 0 0053 plus
-, 287,159,190,0,98 0 0054 comma
-- 333,297,0,0,40 0 0055 hyphen
+% 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,159,15,0,38 0 0056 period
-/ 278,737,15,83,75,83 2 0057 slash
+. 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,0,14,90,14 2 0062 two
-3 574,705,15,14,55,14 2 0063 three
-4 574,705,0,20,63,20 2 0064 four
-5 574,705,15,49,50,49 2 0065 five
-6 574,705,15,49,20,49 2 0066 six
-7 574,705,15,69,-14,69 2 0067 seven
-8 574,705,15,27,50,27 2 0070 eight
-9 574,705,15,20,49,20 2 0071 nine
-: 287,477,15,20,52,20 0 0072 colon
-; 287,477,190,20,89,20 0 0073 semicolon
-< 606,524,14,0,36 0 0074 less
-= 606,402,0,0,9 0 0075 equal
-> 606,524,14,0,12 0 0076 greater
-? 481,737,15,21,-29,21 2 0077 question
-@ 747,737,15,25,28,25 2 0100 at
+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,11,100,11 2 0102 B
-C 759,737,15,50,15,50 2 0103 C
-D 833,722,0,13,99,13 2 0104 D
-E 741,722,0,37,91,37 2 0105 E
-F 704,722,0,72,91,72 2 0106 F
-G 815,737,15,37,16,37 2 0107 G
-H 870,722,0,92,91,92 2 0110 H
-I 444,722,0,92,91,92 2 0111 I
-J 667,722,15,101,59,101 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,74,94 2 0115 M
-N 852,722,16,110,107,109 2 0116 N
-O 833,737,15,14,14,14 2 0117 O
-P 741,722,0,40,88,40 2 0120 P
-Q 833,737,186,13,15,13 2 0121 Q
-R 796,722,15,5,91,5 2 0122 R
-S 685,737,15,31,49,31 2 0123 S
-T 722,722,0,90,6,90 2 0124 T
-U 833,722,15,112,-38,109 2 0125 U
-V 741,722,15,111,18,109 2 0126 V
-W 944,722,15,100,10,100 2 0127 W
-X 741,722,0,120,122,109 2 0130 X
-Y 704,722,0,123,35,109 2 0131 Y
-Z 704,722,0,61,79,61 2 0132 Z
-[ 407,737,110,75,81,75 2 0133 bracketleft
+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,0,0,-31 2 0134 backslash
+\ 606,737,15,0,-111 2 0134 -- backslash
rs "
-] 407,737,110,57,99,57 2 0135 bracketright
+] 407,737,109,5,151,5 2 0135 -- bracketright
rB "
-a^ 333,709,0,82,27,82 2 0136 circumflex
+a^ 333,705,0,82,27,82 2 0136 -- circumflex
^ "
-_ 500,0,129,50,50,50 0 0137 underscore
-` 259,747,0,61,11,61 2 0140 quoteleft
+_ 500,0,125,50,50,50 0 0137 -- underscore
+` 259,737,0,65,3,65 2 0140 -- quoteleft
oq "
-a 667,477,15,29,35,29 0 0141 a
-b 611,737,15,0,22 2 0142 b
-c 537,477,15,0,47 0 0143 c
-d 667,737,15,46,50,46 2 0144 d
-e 519,477,15,9,52,9 0 0145 e
-f 389,737,205,211,98,109 3 0146 f
-g 611,529,205,41,116,41 1 0147 g
-h 685,737,15,2,50,2 2 0150 h
-i 389,737,15,4,22,4 2 0151 i
-j 370,737,205,61,220,61 3 0152 j
-k 648,737,15,0,55 2 0153 k
-l 389,737,15,31,24,31 2 0154 l
-m 944,477,15,26,41,26 0 0155 m
-n 685,477,15,7,47,7 0 0156 n
-o 574,477,15,16,40,16 0 0157 o
-p 648,477,205,0,168 1 0160 p
-q 630,477,205,7,50,7 1 0161 q
-r 519,486,0,55,47,55 0 0162 r
-s 481,477,15,6,48,6 0 0163 s
-t 407,650,15,47,26,47 2 0164 t
-u 685,477,15,4,12,4 0 0165 u
-v 556,477,15,0,18 0 0166 v
-w 833,477,15,5,28,5 0 0167 w
-x 574,477,15,47,99,47 0 0170 x
-y 519,477,205,23,116,23 1 0171 y
-z 519,477,15,2,69,2 0 0172 z
-lC 407,738,115,45,-2,45 2 0173 braceleft
+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,737,0,0,-212 2 0174 bar
+ba 606,750,250,0,-199 3 0174 -- bar
| "
-rC 407,738,115,0,80 2 0175 braceright
+rC 407,737,109,0,75 2 0175 -- braceright
} "
-a~ 333,683,0,121,16,109 2 0176 tilde
+a~ 333,690,0,115,22,109 2 0176 -- tilde
~ "
-bq 259,159,191,0,93 0 0200 quotesinglbase
-Fo 481,409,0,0,85 0 0201 guillemotleft
+bq 259,157,192,0,107 0 0200 -- quotesinglbase
+Fo 481,407,0,18,85,18 0 0201 -- guillemotleft
char171 "
-Fc 481,408,0,25,56,25 0 0202 guillemotright
+Fc 481,407,0,22,81,22 0 0202 -- guillemotright
char187 "
-bu 606,537,0,0,-59 0 0203 bullet
-Fn 574,737,205,64,77,64 3 0204 florin
-f/ 167,705,15,216,216,109 2 0205 fraction
-%0 1167,721,34,34,24,34 2 0206 perthousand
-dg 500,737,146,60,0,60 2 0207 dagger
-dd 500,737,147,64,98,64 2 0210 daggerdbl
-en 500,286,0,68,68,68 0 0211 endash
-em 1000,286,0,68,68,68 0 0212 emdash
-fi 685,737,205,11,120,11 3 0214 fi
-fl 685,737,205,46,120,46 3 0215 fl
-.i 389,477,15,14,12,14 0 0220 dotlessi
-ga 333,719,0,11,-24,11 2 0222 grave
-a" 333,719,0,189,27,109 2 0223 hungarumlaut
-a. 333,685,0,5,-95,5 2 0224 dotaccent
-ab 333,698,0,107,-17,107 2 0225 breve
-ah 333,709,0,120,-10,109 2 0226 caron
-ao 333,745,0,149,-167,109 2 0227 ring
-ho 333,0,155,0,-18 0 0230 ogonek
-lq 481,747,0,91,-2,91 2 0231 quotedblleft
-rq 481,739,0,102,-11,102 2 0232 quotedblright
-oe 852,477,15,8,55,8 0 0233 oe
-/l 389,737,15,58,24,58 2 0234 lslash
-Bq 481,159,191,0,120 0 0235 quotedblbase
-OE 963,722,0,67,31,67 2 0236 OE
-/L 704,722,0,16,91,16 2 0237 Lslash
-r! 333,544,205,6,89,6 1 0241 exclamdown
+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,600,124,0,20 0 0242 cent
+ct 574,578,144,0,20 0 0242 -- cent
char162 "
-Po 574,705,15,42,68,42 2 0243 sterling
+Po 574,705,15,42,68,42 2 0243 -- sterling
char163 "
-Cs 574,612,0,22,10,22 0 0244 currency
+Cs 574,605,0,23,23,23 0 0244 -- currency
char164 "
-Ye 574,705,0,111,27,109 2 0245 yen
+Ye 574,690,0,105,33,105 2 0245 -- yen
char165 "
-bb 606,737,0,0,-212 2 0246 brokenbar
+bb 606,675,175,0,-199 2 0246 -- brokenbar
char166 "
-sc 500,737,145,55,90,55 2 0247 section
+sc 500,737,146,65,80,65 2 0247 -- section
char167 "
-ad 333,685,0,109,16,109 2 0250 dieresis
+ad 333,690,0,110,17,109 2 0250 -- dieresis
char168 "
-co 747,737,15,26,27,26 2 0251 copyright
+co 747,737,15,53,52,53 2 0251 -- copyright
char169 "
-Of 412,737,0,87,21,87 2 0252 ordfeminine
+Of 412,705,0,98,3,98 2 0252 -- ordfeminine
char170 "
-fo 278,409,0,0,85 0 0253 guilsinglleft
-no 606,402,0,0,9 0 0254 logicalnot
+fo 278,407,0,16,75,16 0 0253 -- guilsinglleft
+no 606,403 0 0254 -- logicalnot
char172 "
-\- 606,304,0,0,9 0 0255 minus
-rg 747,737,15,26,27,26 2 0256 registered
+\- 606,307 0 0255 -- minus
+rg 747,737,15,53,52,53 2 0256 -- registered
char174 "
-a- 333,649,0,104,18,104 2 0257 macron
+a- 333,649,0,121,3,109 2 0257 -- macron
char175 "
-de 400,705,0,20,-20,20 2 0260 degree
+de 400,705,0,22,-36,22 2 0260 -- degree
char176 "
-char177 606,505,0,0,9 0 0261 plusminus
-S2 344,705,0,66,66,66 2 0262 twosuperior
+char177 606,506 0 0261 -- plusminus
+S2 344,705,0,68,67,68 2 0262 -- twosuperior
char178 "
-S3 344,705,0,54,54,54 2 0263 threesuperior
+S3 344,705,0,67,47,67 2 0263 -- threesuperior
char179 "
-aa 333,719,0,88,-73,88 2 0264 acute
+aa 333,722,0,89,-73,89 2 0264 -- acute
char180 "
-char181 685,477,205,4,140,4 1 0265 mu
-ps 650,737,0,61,-17,61 2 0266 paragraph
+char181 685,477,205,0,139 1 0265 -- mu
+ps 650,722,131,81,25,81 2 0266 -- paragraph
char182 "
-char183 287,342,0,0,9 0 0267 periodcentered
-ac 333,3,220,0,137 1 0270 cedilla
+pc 287,372,0,0,-7 0 0267 -- periodcentered
+char183 "
+ac 333,3,220,0,71 1 0270 -- cedilla
char184 "
-S1 344,705,0,29,29,29 2 0271 onesuperior
+S1 344,705,0,32,31,32 2 0271 -- onesuperior
char185 "
-Om 356,737,0,77,21,77 2 0272 ordmasculine
+Om 356,705,0,88,8,88 2 0272 -- ordmasculine
char186 "
-fc 278,408,0,25,56,25 0 0273 guilsinglright
-14 861,705,15,15,29,15 2 0274 onequarter
+fc 278,407,0,15,76,15 0 0273 -- guilsinglright
+14 861,705,15,0,33 2 0274 -- onequarter
char188 "
-12 861,705,15,46,29,46 2 0275 onehalf
+12 861,705,15,0,33 2 0275 -- onehalf
char189 "
-34 861,705,15,15,54,15 2 0276 threequarters
+34 861,705,15,0,15 2 0276 -- threequarters
char190 "
-r? 481,544,205,0,49 1 0277 questiondown
+r? 481,547,205,0,50 1 0277 -- questiondown
char191 "
-`A 741,964,0,25,125,25 2 0300 Agrave
+`A 741,947,0,25,125,25 2 0300 -- Agrave
char192 "
-'A 741,964,0,25,125,25 2 0301 Aacute
+'A 741,947,0,25,125,25 2 0301 -- Aacute
char193 "
-^A 741,954,0,25,125,25 2 0302 Acircumflex
+^A 741,930,0,25,125,25 2 0302 -- Acircumflex
char194 "
-~A 741,928,0,25,125,25 2 0303 Atilde
+~A 741,915,0,25,125,25 2 0303 -- Atilde
char195 "
-:A 741,930,0,25,125,25 2 0304 Adieresis
+:A 741,915,0,25,125,25 2 0304 -- Adieresis
char196 "
-oA 741,990,0,25,125,25 2 0305 Aring
+oA 741,991,0,25,125,25 2 0305 -- Aring
char197 "
-AE 889,722,0,64,131,64 2 0306 AE
+AE 889,722,0,76,136,76 2 0306 -- AE
char198 "
-,C 759,737,220,50,15,50 3 0307 Ccedilla
+,C 759,737,220,50,13,50 3 0307 -- Ccedilla
char199 "
-`E 741,964,0,37,91,37 2 0310 Egrave
+`E 741,947,0,39,91,39 2 0310 -- Egrave
char200 "
-'E 741,964,0,37,91,37 2 0311 Eacute
+'E 741,947,0,39,91,39 2 0311 -- Eacute
char201 "
-^E 741,954,0,37,91,37 2 0312 Ecircumflex
+^E 741,930,0,39,91,39 2 0312 -- Ecircumflex
char202 "
-:E 741,930,0,37,91,37 2 0313 Edieresis
+:E 741,915,0,39,91,39 2 0313 -- Edieresis
char203 "
-`I 444,964,0,92,91,92 2 0314 Igrave
+`I 444,947,0,91,91,91 2 0314 -- Igrave
char204 "
-'I 444,964,0,92,91,92 2 0315 Iacute
+'I 444,947,0,94,91,94 2 0315 -- Iacute
char205 "
-^I 444,954,0,92,91,92 2 0316 Icircumflex
+^I 444,930,0,91,91,91 2 0316 -- Icircumflex
char206 "
-:I 444,930,0,104,91,104 2 0317 Idieresis
+:I 444,915,0,115,91,109 2 0317 -- Idieresis
char207 "
--D 833,722,0,13,99,13 2 0320 Eth
+-D 833,722,0,13,97,13 2 0320 -- Eth
char208 "
-~N 852,928,16,110,107,109 2 0321 Ntilde
+~N 852,915,10,111,111,109 2 0321 -- Ntilde
char209 "
-`O 833,964,15,14,14,14 2 0322 Ograve
+`O 833,947,15,13,13,13 2 0322 -- Ograve
char210 "
-'O 833,964,15,14,14,14 2 0323 Oacute
+'O 833,947,15,13,13,13 2 0323 -- Oacute
char211 "
-^O 833,954,15,14,14,14 2 0324 Ocircumflex
+^O 833,930,15,13,13,13 2 0324 -- Ocircumflex
char212 "
-~O 833,928,15,14,14,14 2 0325 Otilde
+~O 833,915,15,13,13,13 2 0325 -- Otilde
char213 "
-:O 833,930,15,14,14,14 2 0326 Odieresis
+:O 833,915,15,13,13,13 2 0326 -- Odieresis
char214 "
-char215 606,507,0,0,9 0 0327 multiply
-/O 833,775,82,14,33,14 2 0330 Oslash
+char215 606,491,0,0,-15 0 0327 -- multiply
+/O 833,790,68,15,15,15 2 0330 -- Oslash
char216 "
-`U 833,964,15,112,-38,109 2 0331 Ugrave
+`U 833,947,15,117,-38,109 2 0331 -- Ugrave
char217 "
-'U 833,964,15,112,-38,109 2 0332 Uacute
+'U 833,947,15,117,-38,109 2 0332 -- Uacute
char218 "
-^U 833,954,15,112,-38,109 2 0333 Ucircumflex
+^U 833,930,15,117,-38,109 2 0333 -- Ucircumflex
char219 "
-:U 833,930,15,112,-38,109 2 0334 Udieresis
+:U 833,915,15,117,-38,109 2 0334 -- Udieresis
char220 "
-'Y 704,964,0,123,35,109 2 0335 Yacute
+'Y 704,947,0,121,37,109 2 0335 -- Yacute
char221 "
-TP 741,722,0,0,88 2 0336 Thorn
+TP 741,722,0,0,91 2 0336 -- Thorn
char222 "
-ss 574,737,205,0,116 3 0337 germandbls
+ss 574,737,205,16,141,16 3 0337 -- germandbls
char223 "
-`a 667,719,15,29,35,29 2 0340 agrave
+`a 667,722,15,19,44,19 2 0340 -- agrave
char224 "
-'a 667,719,15,29,35,29 2 0341 aacute
+'a 667,722,15,19,44,19 2 0341 -- aacute
char225 "
-^a 667,709,15,29,35,29 2 0342 acircumflex
+^a 667,705,15,19,44,19 2 0342 -- acircumflex
char226 "
-~a 667,683,15,29,35,29 2 0343 atilde
+~a 667,690,15,19,44,19 2 0343 -- atilde
char227 "
-:a 667,685,15,29,35,29 2 0344 adieresis
+:a 667,690,15,19,44,19 2 0344 -- adieresis
char228 "
-oa 667,745,15,29,35,29 2 0345 aring
+oa 667,746,15,19,44,19 2 0345 -- aring
char229 "
-ae 815,477,15,9,69,9 0 0346 ae
+ae 815,477,15,10,68,10 0 0346 -- ae
char230 "
-,c 537,477,220,0,47 1 0347 ccedilla
+,c 537,477,220,0,50 1 0347 -- ccedilla
char231 "
-`e 519,719,15,9,52,9 2 0350 egrave
+`e 519,722,15,10,50,10 2 0350 -- egrave
char232 "
-'e 519,719,15,9,52,9 2 0351 eacute
+'e 519,722,15,10,50,10 2 0351 -- eacute
char233 "
-^e 519,709,15,9,52,9 2 0352 ecircumflex
+^e 519,705,15,10,50,10 2 0352 -- ecircumflex
char234 "
-:e 519,685,15,26,52,26 2 0353 edieresis
+:e 519,690,15,17,50,17 2 0353 -- edieresis
char235 "
-`i 389,719,15,14,12,14 2 0354 igrave
+`i 389,715,15,6,18,6 2 0354 -- igrave
char236 "
-'i 389,719,15,60,12,60 2 0355 iacute
+'i 389,715,15,31,18,31 2 0355 -- iacute
char237 "
-^i 389,709,15,44,12,44 2 0356 icircumflex
+^i 389,698,15,24,29,24 2 0356 -- icircumflex
char238 "
-:i 389,685,15,71,12,71 2 0357 idieresis
+:i 389,683,15,52,19,52 2 0357 -- idieresis
char239 "
-Sd 574,737,15,16,40,16 2 0360 eth
+Sd 574,752,15,6,50,6 2 0360 -- eth
char240 "
-~n 685,683,15,7,47,7 2 0361 ntilde
+~n 685,690,15,4,50,4 2 0361 -- ntilde
char241 "
-`o 574,719,15,16,40,16 2 0362 ograve
+`o 574,722,15,6,50,6 2 0362 -- ograve
char242 "
-'o 574,719,15,16,40,16 2 0363 oacute
+'o 574,722,15,6,50,6 2 0363 -- oacute
char243 "
-^o 574,709,15,16,40,16 2 0364 ocircumflex
+^o 574,705,15,6,50,6 2 0364 -- ocircumflex
char244 "
-~o 574,683,15,16,40,16 2 0365 otilde
+~o 574,690,15,6,50,6 2 0365 -- otilde
char245 "
-:o 574,685,15,16,40,16 2 0366 odieresis
+:o 574,690,15,6,50,6 2 0366 -- odieresis
char246 "
-char247 606,505,0,0,9 0 0367 divide
-/o 574,578,126,16,40,16 0 0370 oslash
+char247 606,546,40 0 0367 -- divide
+/o 574,583,121,6,50,6 0 0370 -- oslash
char248 "
-`u 685,719,15,4,12,4 2 0371 ugrave
+`u 685,722,15,0,20 2 0371 -- ugrave
char249 "
-'u 685,719,15,4,12,4 2 0372 uacute
+'u 685,722,15,0,20 2 0372 -- uacute
char250 "
-^u 685,709,15,4,12,4 2 0373 ucircumflex
+^u 685,705,15,0,20 2 0373 -- ucircumflex
char251 "
-:u 685,685,15,4,12,4 2 0374 udieresis
+:u 685,690,15,0,20 2 0374 -- udieresis
char252 "
-'y 519,719,205,23,116,23 3 0375 yacute
+'y 519,722,205,24,116,24 3 0375 -- yacute
char253 "
-Tp 648,650,205,0,168 3 0376 thorn
+Tp 648,737,205,0,169 3 0376 -- thorn
char254 "
-:y 519,685,205,23,116,23 3 0377 ydieresis
+:y 519,690,205,24,116,24 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/NI b/contrib/groff/devps/NI
index eb250d77d134..af7c79ff6735 100644
--- a/contrib/groff/devps/NI
+++ b/contrib/groff/devps/NI
@@ -5,443 +5,531 @@ spacewidth 278
encoding text.enc
ligatures fi fl 0
kernpairs
-A y -54
-A w -20
-A v -20
-A ' -74
-A Y -74
-A W -92
-A V -111
-A T -74
-F . -129
-F f -18
-F , -129
-F A -74
-L y -55
-L ' -55
-L Y -55
-L W -55
-L V -74
-L T -55
-P . -129
-P , -129
-P A -92
-R y -54
-R Y -74
-R W -55
-R V -20
-R T -20
-T y -89
-T w -89
-T u -89
-T ; -92
-T s -89
-T r -89
-T . -111
-T o -89
-T i -71
-T - -129
-T hy -129
-T char173 -129
-T e -89
-T , -111
-T : -92
-T c -89
+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 A -18
-V y -109
-V u -109
-V ; -74
-V r -109
-V . -111
-V o -129
-V i -62
-V - -74
-V hy -74
-V char173 -74
-V e -129
-V , -140
-V : -74
-V a -129
-V A -111
-W y -74
-W u -74
-W ; -37
-W r -74
-W . -55
-W o -74
-W i -74
-W - -37
-W hy -37
-W char173 -37
-W e -74
-W , -55
-W : -37
-W a -74
-W A -74
-Y v -99
-Y u -99
-Y ; -111
-Y q -129
-Y . -129
-Y p -129
-Y o -129
-Y i -70
-Y - -129
-Y hy -129
-Y char173 -129
-Y e -129
-Y , -129
-Y : -111
-Y a -129
-Y A -74
-f ' 94
-1 1 -74
-` ` -18
-` oq -18
-oq ` -18
-oq oq -18
-' t -37
-' s -37
-' ' -18
-r ' 55
-r . -129
-r , -129
-v . -37
-v , -37
-w . -37
-w , -37
-y . -55
-y , -55
+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,722,0,0,-2 2 0000 asciicircum
-ti 606,335,0,0,9 0 0001 asciitilde
-vS 667,944,15,15,50,15 2 0002 Scaron
-vZ 667,944,0,50,75,50 2 0003 Zcaron
-vs 444,688,15,40,51,40 2 0004 scaron
-vz 463,688,15,30,83,30 2 0005 zcaron
-:Y 685,900,0,123,18,107 2 0006 Ydieresis
-tm 950,722,0,71,2,71 2 0007 trademark
-aq 278,737,0,34,-64,34 2 0010 quotesingle
+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,33,20,33 2 0041 exclam
-" 400,737,0,45,-50,45 2 0042 quotedbl
-# 556,705,0,18,17,18 2 0043 numbersign
+! 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,800,133,30,47,30 2 0044 dollar
+$ 556,808,142,30,46,30 2 0044 -- dollar
Do "
-% 833,705,17,9,4,9 2 0045 percent
-& 852,737,15,0,26 2 0046 ampersand
-' 204,737,0,76,11,76 2 0047 quoteright
-( 333,737,124,116,10,107 2 0050 parenleft
-) 333,737,124,0,143 2 0051 parenright
-* 500,705,0,2,16,2 2 0052 asterisk
-+ 606,504,0,0,13 0 0053 plus
-, 278,109,165,0,89 0 0054 comma
-- 333,273,0,0,18 0 0055 hyphen
+% 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,102,0,-90 2 0057 slash
+. 278,109,15,0,33 0 0056 -- period
+/ 606,737,15,0,-82 2 0057 -- slash
sl "
-0 556,705,15,21,21,21 2 0060 zero
-1 556,705 2 0061 one
-2 556,705,0,2,85,2 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,41,14,41 2 0066 six
-7 556,705,15,55,-19,55 2 0067 seven
-8 556,705,15,21,42,21 2 0070 eight
-9 556,705,15,13,43,13 2 0071 nine
-: 278,466,15,26,8,26 0 0072 colon
-; 278,466,165,33,64,33 0 0073 semicolon
-< 606,518,10,0,16 0 0074 less
-= 606,381,0,0,14 0 0075 equal
-> 606,518,10,6,-3,6 0 0076 greater
-? 444,737,15,23,-52,23 2 0077 question
-@ 747,737,15,31,22,31 2 0100 at
+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,132,14 2 0101 A
-B 722,722,0,0,81 2 0102 B
-C 722,737,15,41,10,41 2 0103 C
-D 778,722,0,7,88,7 2 0104 D
-E 722,722,0,29,87,29 2 0105 E
-F 667,722,0,81,84,81 2 0106 F
-G 778,737,15,35,11,35 2 0107 G
-H 833,722,0,84,88,84 2 0110 H
-I 407,722,0,74,83,74 2 0111 I
-J 611,722,17,85,63,85 2 0112 J
-K 741,722,0,123,90,107 2 0113 K
-L 667,722,0,13,87,13 2 0114 L
-M 944,722,0,79,76,79 2 0115 M
-N 815,722,17,94,98,94 2 0116 N
-O 778,737,15,7,10,7 2 0117 O
-P 667,722,0,46,83,46 2 0120 P
-Q 778,737,190,7,10,7 2 0121 Q
-R 741,722,17,0,91 2 0122 R
-S 667,737,15,15,50,15 2 0123 S
-T 685,722,0,91,10,91 2 0124 T
-U 815,722,15,95,-43,95 2 0125 U
-V 704,722,15,118,14,107 2 0126 V
-W 926,722,15,97,-3,97 2 0127 W
-X 704,722,0,116,123,107 2 0130 X
-Y 685,722,0,123,18,107 2 0131 Y
-Z 667,722,0,50,75,50 2 0132 Z
-[ 333,737,109,127,83,107 2 0133 bracketleft
+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,0,0,-39 2 0134 backslash
+\ 606,737,15,0,-82 2 0134 -- backslash
rs "
-] 333,737,109,76,133,76 2 0135 bracketright
+] 333,737,109,83,127,83 2 0135 -- bracketright
rB "
-a^ 333,688,0,48,13,48 2 0136 circumflex
+a^ 333,690,0,48,13,48 2 0136 -- circumflex
^ "
-_ 500,0,123,50,50,50 0 0137 underscore
-` 204,749,0,98,-11,98 2 0140 quoteleft
+_ 500,0,125,50,50,50 0 0137 -- underscore
+` 204,737,0,75,11,75 2 0140 -- quoteleft
oq "
-a 574,466,15,0,49 0 0141 a
-b 556,737,15,0,18 2 0142 b
-c 444,466,15,7,45,7 0 0143 c
-d 611,737,15,25,47,25 2 0144 d
-e 444,466,15,0,56 0 0145 e
-f 333,737,205,187,118,107 3 0146 f
-g 537,499,205,36,129,36 1 0147 g
-h 611,737,15,0,50 2 0150 h
-i 333,715,15,0,23 2 0151 i
-j 315,715,205,52,216,52 3 0152 j
-k 556,737,15,0,55 2 0153 k
-l 333,737,15,11,34,11 2 0154 l
-m 889,466,15,0,35 0 0155 m
-n 611,466,15,1,36,1 0 0156 n
-o 500,466,15,0,45 0 0157 o
-p 574,466,205,0,151 1 0160 p
-q 556,466,205,0,50 1 0161 q
-r 444,466,0,39,41,39 0 0162 r
-s 444,466,15,0,51 0 0163 s
-t 352,619,15,27,25,27 2 0164 t
-u 611,466,15,0,9 0 0165 u
-v 519,466,15,0,16 0 0166 v
-w 778,466,15,0,18 0 0167 w
-x 500,466,15,21,83,21 0 0170 x
-y 500,466,205,4,129,4 1 0171 y
-z 463,466,15,4,83,4 0 0172 z
-lC 333,737,116,98,-2,98 2 0173 braceleft
+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,737,0,0,-219 2 0174 bar
+ba 606,750,250,0,-217 3 0174 -- bar
| "
-rC 333,737,116,0,148 2 0175 braceright
+rC 333,737,109,0,137 2 0175 -- braceright
} "
-a~ 333,650,0,97,-2,97 2 0176 tilde
+a~ 333,649,0,100,-2,100 2 0176 -- tilde
~ "
-bq 204,109,167,0,129 0 0200 quotesinglbase
-Fo 426,399,0,26,65,26 0 0201 guillemotleft
+bq 204,109,165,0,128 0 0200 -- quotesinglbase
+Fo 426,402,0,26,65,26 0 0201 -- guillemotleft
char171 "
-Fc 426,394,0,24,67,24 0 0202 guillemotright
+Fc 426,402,0,26,65,26 0 0202 -- guillemotright
char187 "
-bu 606,537,0,0,-64 0 0203 bullet
-Fn 556,737,205,57,107,57 3 0204 florin
-f/ 167,705,17,216,154,107 2 0205 fraction
-%0 1000,705,15,53,56,53 2 0206 perthousand
-dg 500,737,147,68,-14,68 2 0207 dagger
-dd 500,737,148,78,80,78 2 0210 daggerdbl
-en 500,260,0,68,68,68 0 0211 endash
-em 1000,260,0,68,68,68 0 0212 emdash
-fi 611,737,205,3,110,3 3 0214 fi
-fl 611,737,205,33,110,33 3 0215 fl
-.i 333,466,15,0,23 0 0220 dotlessi
-ga 333,691,0,0,-23 2 0222 grave
-a" 333,689,0,237,-84,107 2 0223 hungarumlaut
-a. 333,644,0,0,-68 2 0224 dotaccent
-ab 333,677,0,87,-19,87 2 0225 breve
-ah 333,688,0,95,-23,95 2 0226 caron
-ao 333,712,0,146,-180,107 2 0227 ring
-ho 333,0,155,0,-18 0 0230 ogonek
-lq 389,749,0,93,-13,93 2 0231 quotedblleft
-rq 389,737,0,68,12,68 2 0232 quotedblright
-oe 778,466,17,0,50 0 0233 oe
-/l 333,737,15,59,34,59 2 0234 lslash
-Bq 389,109,167,0,129 0 0235 quotedblbase
-OE 981,722,0,32,14,32 2 0236 OE
-/L 667,722,0,13,87,13 2 0237 Lslash
-r! 333,542,205,0,57 1 0241 exclamdown
+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,595,129,0,-11 0 0242 cent
+ct 556,580,144,0,-12 0 0242 -- cent
char162 "
-Po 556,705,15,39,58,39 2 0243 sterling
+Po 556,705,15,38,63,38 2 0243 -- sterling
char163 "
-Cs 556,603,0,24,25,24 0 0244 currency
+Cs 556,597,0,24,24,24 0 0244 -- currency
char164 "
-Ye 556,705,0,117,10,107 2 0245 yen
+Ye 556,690,0,118,10,107 2 0245 -- yen
char165 "
-bb 606,737,0,0,-219 2 0246 brokenbar
+bb 606,675,175,0,-217 2 0246 -- brokenbar
char166 "
-sc 500,737,147,30,61,30 2 0247 section
+sc 500,737,147,30,60,30 2 0247 -- section
char167 "
-ad 333,644,0,76,-9,76 2 0250 dieresis
+ad 333,646,0,76,-9,76 2 0250 -- dieresis
char168 "
-co 747,737,15,27,26,27 2 0251 copyright
+co 747,737,15,53,52,53 2 0251 -- copyright
char169 "
-Of 422,737,0,50,-33,50 2 0252 ordfeminine
+Of 422,705,0,48,-22,48 2 0252 -- ordfeminine
char170 "
-fo 333,399,0,0,8 0 0253 guilsinglleft
-no 606,381,0,0,9 0 0254 logicalnot
+fo 333,402,0,0,10 0 0253 -- guilsinglleft
+no 606,389 0 0254 -- logicalnot
char172 "
-\- 606,287,0,0,9 0 0255 minus
-rg 747,737,15,26,27,26 2 0256 registered
+\- 606,289 0 0255 -- minus
+rg 747,737,15,53,52,53 2 0256 -- registered
char174 "
-a- 333,610,0,80,-1,80 0 0257 macron
+a- 333,610,0,80,-2,80 0 0257 -- macron
char175 "
-de 400,705,0,20,-20,20 2 0260 degree
+de 400,705,0,22,-36,22 2 0260 -- degree
char176 "
-char177 606,504,0,0,13 0 0261 plusminus
-S2 333,705,0,70,50,70 2 0262 twosuperior
+char177 606,506 0 0261 -- plusminus
+S2 333,705,0,76,50,76 2 0262 -- twosuperior
char178 "
-S3 333,705,0,48,49,48 2 0263 threesuperior
+S3 333,705,0,76,28,76 2 0263 -- threesuperior
char179 "
-aa 333,689,0,72,-82,72 2 0264 acute
+aa 333,690,0,72,-82,72 2 0264 -- acute
char180 "
-char181 611,466,205,0,120 1 0265 mu
-ps 650,737,0,45,-38,45 2 0266 paragraph
+char181 611,466,205,0,110 1 0265 -- mu
+ps 650,722,132,65,2,65 2 0266 -- paragraph
char182 "
-char183 278,316,0,0,-27 0 0267 periodcentered
-ac 333,0,227,0,47 1 0270 cedilla
+pc 278,374,0,0,-21 0 0267 -- periodcentered
+char183 "
+ac 333,0,215,0,47 1 0270 -- cedilla
char184 "
-S1 333,705,0,26,7,26 2 0271 onesuperior
+S1 333,705,0,28,16,28 2 0271 -- onesuperior
char185 "
-Om 372,738,0,50,-33,50 2 0272 ordmasculine
+Om 372,705,0,48,-16,48 2 0272 -- ordmasculine
char186 "
-fc 333,394,0,0,10 0 0273 guilsinglright
-14 834,705,17,49,17,49 2 0274 onequarter
+fc 333,402,0,0,10 0 0273 -- guilsinglright
+14 834,705,15,0,16 2 0274 -- onequarter
char188 "
-12 834,705,17,60,17,60 2 0275 onehalf
+12 834,705,15,0,16 2 0275 -- onehalf
char189 "
-34 834,705,17,49,49,49 2 0276 threequarters
+34 834,705,15,0,28 2 0276 -- threequarters
char190 "
-r? 444,542,205,0,43 1 0277 questiondown
+r? 444,547,205,0,53 1 0277 -- questiondown
char191 "
-`A 704,947,0,14,132,14 2 0300 Agrave
+`A 704,946,0,14,137,14 2 0300 -- Agrave
char192 "
-'A 704,945,0,14,132,14 2 0301 Aacute
+'A 704,946,0,14,137,14 2 0301 -- Aacute
char193 "
-^A 704,944,0,14,132,14 2 0302 Acircumflex
+^A 704,946,0,14,137,14 2 0302 -- Acircumflex
char194 "
-~A 704,906,0,14,132,14 2 0303 Atilde
+~A 704,905,0,14,137,14 2 0303 -- Atilde
char195 "
-:A 704,900,0,14,132,14 2 0304 Adieresis
+:A 704,902,0,14,137,14 2 0304 -- Adieresis
char196 "
-oA 704,968,0,14,132,14 2 0305 Aring
+oA 704,958,0,14,137,14 2 0305 -- Aring
char197 "
-AE 870,722,0,50,142,50 2 0306 AE
+AE 870,722,0,68,137,68 2 0306 -- AE
char198 "
-,C 722,737,227,41,10,41 3 0307 Ccedilla
+,C 722,737,215,40,10,40 3 0307 -- Ccedilla
char199 "
-`E 722,947,0,29,87,29 2 0310 Egrave
+`E 722,946,0,28,83,28 2 0310 -- Egrave
char200 "
-'E 722,945,0,29,87,29 2 0311 Eacute
+'E 722,946,0,28,83,28 2 0311 -- Eacute
char201 "
-^E 722,944,0,29,87,29 2 0312 Ecircumflex
+^E 722,946,0,28,83,28 2 0312 -- Ecircumflex
char202 "
-:E 722,900,0,29,87,29 2 0313 Edieresis
+:E 722,902,0,28,83,28 2 0313 -- Edieresis
char203 "
-`I 407,947,0,74,83,74 2 0314 Igrave
+`I 407,946,0,78,83,78 2 0314 -- Igrave
char204 "
-'I 407,945,0,74,83,74 2 0315 Iacute
+'I 407,946,0,95,83,95 2 0315 -- Iacute
char205 "
-^I 407,944,0,74,83,74 2 0316 Icircumflex
+^I 407,946,0,78,83,78 2 0316 -- Icircumflex
char206 "
-:I 407,900,0,89,83,89 2 0317 Idieresis
+:I 407,902,0,99,83,99 2 0317 -- Idieresis
char207 "
--D 778,722,0,7,88,7 2 0320 Eth
+-D 778,722,0,10,83,10 2 0320 -- Eth
char208 "
-~N 815,906,17,94,98,94 2 0321 Ntilde
+~N 815,905,15,101,101,101 2 0321 -- Ntilde
char209 "
-`O 778,947,15,7,10,7 2 0322 Ograve
+`O 778,946,15,10,10,10 2 0322 -- Ograve
char210 "
-'O 778,945,15,7,10,7 2 0323 Oacute
+'O 778,946,15,10,10,10 2 0323 -- Oacute
char211 "
-^O 778,944,15,7,10,7 2 0324 Ocircumflex
+^O 778,946,15,10,10,10 2 0324 -- Ocircumflex
char212 "
-~O 778,906,15,7,10,7 2 0325 Otilde
+~O 778,905,15,10,10,10 2 0325 -- Otilde
char213 "
-:O 778,900,15,7,10,7 2 0326 Odieresis
+:O 778,902,15,10,10,10 2 0326 -- Odieresis
char214 "
-char215 606,504,0,0,13 0 0327 multiply
-/O 778,755,87,7,49,7 2 0330 Oslash
+char215 606,482,0,0,-24 0 0327 -- multiply
+/O 778,780,68,20,34,20 2 0330 -- Oslash
char216 "
-`U 815,947,15,95,-43,95 2 0331 Ugrave
+`U 815,946,15,102,-43,102 2 0331 -- Ugrave
char217 "
-'U 815,945,15,95,-43,95 2 0332 Uacute
+'U 815,946,15,102,-43,102 2 0332 -- Uacute
char218 "
-^U 815,944,15,95,-43,95 2 0333 Ucircumflex
+^U 815,946,15,102,-43,102 2 0333 -- Ucircumflex
char219 "
-:U 815,900,15,95,-43,95 2 0334 Udieresis
+:U 815,902,15,102,-43,102 2 0334 -- Udieresis
char220 "
-'Y 685,945,0,123,18,107 2 0335 Yacute
+'Y 685,946,0,125,19,107 2 0335 -- Yacute
char221 "
-TP 667,722,0,7,83,7 2 0336 Thorn
+TP 667,722,0,10,83,10 2 0336 -- Thorn
char222 "
-ss 556,737,205,19,126,19 3 0337 germandbls
+ss 556,737,205,19,126,19 3 0337 -- germandbls
char223 "
-`a 574,691,15,0,49 2 0340 agrave
+`a 574,690,15,0,48 2 0340 -- agrave
char224 "
-'a 574,689,15,0,49 2 0341 aacute
+'a 574,690,15,0,48 2 0341 -- aacute
char225 "
-^a 574,688,15,0,49 2 0342 acircumflex
+^a 574,690,15,0,48 2 0342 -- acircumflex
char226 "
-~a 574,650,15,0,49 2 0343 atilde
+~a 574,649,15,0,48 2 0343 -- atilde
char227 "
-:a 574,644,15,0,49 2 0344 adieresis
+:a 574,646,15,0,48 2 0344 -- adieresis
char228 "
-oa 574,712,15,0,49 2 0345 aring
+oa 574,712,15,0,48 2 0345 -- aring
char229 "
-ae 722,466,15,0,68 0 0346 ae
+ae 722,466,15,0,68 0 0346 -- ae
char230 "
-,c 444,466,227,7,45,7 1 0347 ccedilla
+,c 444,466,215,0,48 1 0347 -- ccedilla
char231 "
-`e 444,691,15,0,56 2 0350 egrave
+`e 444,690,15,0,56 2 0350 -- egrave
char232 "
-'e 444,689,15,17,56,17 2 0351 eacute
+'e 444,690,15,17,56,17 2 0351 -- eacute
char233 "
-^e 444,688,15,0,56 2 0352 ecircumflex
+^e 444,690,15,0,56 2 0352 -- ecircumflex
char234 "
-:e 444,644,15,11,56,11 2 0353 edieresis
+:e 444,646,15,21,56,21 2 0353 -- edieresis
char235 "
-`i 333,691,15,0,23 2 0354 igrave
+`i 333,690,15,0,21 2 0354 -- igrave
char236 "
-'i 333,689,15,72,23,72 2 0355 iacute
+'i 333,690,15,72,21,72 2 0355 -- iacute
char237 "
-^i 333,688,15,8,53,8 2 0356 icircumflex
+^i 333,690,15,48,21,48 2 0356 -- icircumflex
char238 "
-:i 333,644,15,66,23,66 2 0357 idieresis
+:i 333,646,15,76,21,76 2 0357 -- idieresis
char239 "
-Sd 500,737,15,0,45 2 0360 eth
+Sd 500,737,15,0,48 2 0360 -- eth
char240 "
-~n 611,650,15,1,36,1 2 0361 ntilde
+~n 611,649,15,1,36,1 2 0361 -- ntilde
char241 "
-`o 500,691,15,0,45 2 0362 ograve
+`o 500,690,15,0,48 2 0362 -- ograve
char242 "
-'o 500,689,15,0,45 2 0363 oacute
+'o 500,690,15,0,48 2 0363 -- oacute
char243 "
-^o 500,688,15,0,45 2 0364 ocircumflex
+^o 500,690,15,0,48 2 0364 -- ocircumflex
char244 "
-~o 500,650,15,4,45,4 2 0365 otilde
+~o 500,649,15,17,48,17 2 0365 -- otilde
char245 "
-:o 500,644,15,0,45 2 0366 odieresis
+:o 500,646,15,0,48 2 0366 -- odieresis
char246 "
-char247 606,504,0,0,13 0 0367 divide
-/o 500,549,121,0,55 0 0370 oslash
+char247 606,528,22 0 0367 -- divide
+/o 500,549,121,0,48 0 0370 -- oslash
char248 "
-`u 611,691,15,0,9 2 0371 ugrave
+`u 611,690,15,0,6 2 0371 -- ugrave
char249 "
-'u 611,689,15,0,9 2 0372 uacute
+'u 611,690,15,0,6 2 0372 -- uacute
char250 "
-^u 611,688,15,0,9 2 0373 ucircumflex
+^u 611,690,15,0,6 2 0373 -- ucircumflex
char251 "
-:u 611,644,15,0,9 2 0374 udieresis
+:u 611,646,15,0,6 2 0374 -- udieresis
char252 "
-'y 500,689,205,4,129,4 3 0375 yacute
+'y 500,690,205,0,133 3 0375 -- yacute
char253 "
-Tp 574,656,205,0,151 3 0376 thorn
+Tp 574,737,205,0,151 3 0376 -- thorn
char254 "
-:y 500,644,205,4,129,4 3 0377 ydieresis
+:y 500,646,205,0,133 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/NR b/contrib/groff/devps/NR
index d545b2ab8237..b111f5d2b7c5 100644
--- a/contrib/groff/devps/NR
+++ b/contrib/groff/devps/NR
@@ -4,444 +4,519 @@ spacewidth 278
encoding text.enc
ligatures fi fl 0
kernpairs
-A y -74
-A w -74
-A v -74
+A y -37
+A w -25
+A v -37
A ' -74
-A Y -92
-A W -92
-A V -111
-A T -55
-F . -111
-F , -111
-F A -74
-L y -55
-L ' -55
-L Y -92
+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 -92
-L T -55
-P . -129
-P , -129
-P A -74
-R y -18
-R Y -37
-R W -37
-R V -37
-T y -52
-T w -71
-T u -71
-T ; -55
-T s -62
-T r -62
-T . -92
-T o -92
-T i -25
-T - -92
-T hy -92
-T char173 -92
-T e -92
-T , -92
-T : -55
-T c -81
-T a -62
-T A -55
-V y -92
-V u -74
-V ; -74
-V r -74
-V . -129
-V o -92
-V i -44
-V - -92
-V hy -92
-V char173 -92
-V e -92
-V , -129
-V : -74
-V a -92
-V A -111
-W y -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 ; -37
-W r -55
-W . -111
-W o -55
-W i -37
-W - -37
-W hy -37
-W char173 -37
-W e -55
-W , -111
-W : -37
-W a -74
-W A -92
-Y v -111
-Y u -92
-Y ; -92
-Y q -111
-Y . -111
-Y p -111
-Y o -111
-Y i -44
-Y - -111
-Y hy -111
-Y char173 -111
-Y e -111
-Y , -111
-Y : -92
-Y a -111
-Y A -92
-f ' 114
-1 1 -55
-` ` -18
-` oq -18
-oq ` -18
-oq oq -18
-' t -18
-' s -37
-' ' -18
-r ' 55
-r . -74
-r - -18
-r hy -18
-r char173 -18
-r , -74
-v . -111
-v , -111
-w . -92
-w , -92
-y . -111
-y , -111
+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,722 2 0000 asciicircum
-ti 606,329 0 0001 asciitilde
-vS 630,952,15 2 0002 Scaron
-vZ 611,952 2 0003 Zcaron
-vs 463,694,15 2 0004 scaron
-vz 481,694 2 0005 zcaron
-:Y 704,902 2 0006 Ydieresis
-tm 1000,737 2 0007 trademark
-aq 204,737 2 0010 quotesingle
+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
-# 556,690 2 0043 numbersign
+! 296,737,15 2 0041 -- exclam
+" 389,737 2 0042 -- quotedbl
+dq "
+# 556,690 2 0043 -- numbersign
sh "
-$ 556,804,129 2 0044 dollar
+$ 556,813,138 2 0044 -- dollar
Do "
-% 833,707,18 2 0045 percent
-& 815,737,15 2 0046 ampersand
-' 204,737 2 0047 quoteright
-( 333,737,124 2 0050 parenleft
-) 333,737,124 2 0051 parenright
-* 500,737 2 0052 asterisk
-+ 606,492,13 0 0053 plus
-, 278,109,184 0 0054 comma
-- 333,279 0 0055 hyphen
+% 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
+. 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,4 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,475,15 0 0072 colon
-; 278,475,189 0 0073 semicolon
-< 606,503,25 0 0074 less
-= 606,374 0 0075 equal
-> 606,503,25 0 0076 greater
-? 444,737,15 2 0077 question
-@ 737,737,15 2 0100 at
+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,189 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,15 2 0126 V
-W 981,722,15 2 0127 W
-X 704,722 2 0130 X
-Y 704,722 2 0131 Y
-Z 611,722 2 0132 Z
-[ 333,722,109 2 0133 bracketleft
+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 2 0134 backslash
+\ 606,737,15 2 0134 -- backslash
rs "
-] 333,723,108 2 0135 bracketright
+] 333,737,109 2 0135 -- bracketright
rB "
-a^ 333,694 2 0136 circumflex
+a^ 333,695 2 0136 -- circumflex
^ "
-_ 500,0,134 0 0137 underscore
-` 204,737 2 0140 quoteleft
+_ 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,716 2 0151 i
-j 296,716,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,15 0 0166 v
-w 778,464,15 0 0167 w
-x 537,464 0 0170 x
-y 537,464,205 1 0171 y
-z 481,464 0 0172 z
-lC 333,722,109 2 0173 braceleft
+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,737 2 0174 bar
+ba 606,750,250 3 0174 -- bar
| "
-rC 333,722,109 2 0175 braceright
+rC 333,737,109 2 0175 -- braceright
} "
-a~ 333,659 0 0176 tilde
+a~ 333,655 0 0176 -- tilde
~ "
-bq 204,104,189 0 0200 quotesinglbase
-Fo 426,397 0 0201 guillemotleft
+bq 204,109,185 0 0200 -- quotesinglbase
+Fo 426,398 0 0201 -- guillemotleft
char171 "
-Fc 426,399 0 0202 guillemotright
+Fc 426,398 0 0202 -- guillemotright
char187 "
-bu 606,554 0 0203 bullet
-Fn 556,737,205 3 0204 florin
-f/ 167,705 2 0205 fraction
-%0 1000,699,1 2 0206 perthousand
-dg 500,737,147 2 0207 dagger
-dd 500,737,151 2 0210 daggerdbl
-en 556,269 0 0211 endash
-em 1000,269 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,714 2 0223 hungarumlaut
-a. 333,644 0 0224 dotaccent
-ab 333,685 2 0225 breve
-ah 333,694 2 0226 caron
-ao 333,722 2 0227 ring
-ho 333,0,163 0 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,104,189 0 0235 quotedblbase
-OE 1000,722 2 0236 OE
-/L 667,722 2 0237 Lslash
-r! 296,547,205 1 0241 exclamdown
+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
+ct 556,584,141 0 0242 -- cent
char162 "
-Po 556,705,15 2 0243 sterling
+Po 556,705,15 2 0243 -- sterling
char163 "
-Cs 556,603 0 0244 currency
+Cs 556,597 0 0244 -- currency
char164 "
-Ye 556,705 2 0245 yen
+Ye 556,690 2 0245 -- yen
char165 "
-bb 606,737 2 0246 brokenbar
+bb 606,675,175 2 0246 -- brokenbar
char166 "
-sc 500,737,147 2 0247 section
+sc 500,737,147 2 0247 -- section
char167 "
-ad 333,644 0 0250 dieresis
+ad 333,645 0 0250 -- dieresis
char168 "
-co 737,737,15 2 0251 copyright
+co 737,737,15 2 0251 -- copyright
char169 "
-Of 334,722 2 0252 ordfeminine
+Of 334,705 2 0252 -- ordfeminine
char170 "
-fo 259,397 0 0253 guilsinglleft
-no 606,374 0 0254 logicalnot
+fo 259,398 0 0253 -- guilsinglleft
+no 606,389 0 0254 -- logicalnot
char172 "
-\- 606,277 0 0255 minus
-rg 737,737,15 2 0256 registered
+\- 606,289 0 0255 -- minus
+rg 737,737,15 2 0256 -- registered
char174 "
-a- 333,622 0 0257 macron
+a- 333,623 0 0257 -- macron
char175 "
-de 400,705 2 0260 degree
+de 400,705 2 0260 -- degree
char176 "
-char177 606,492 0 0261 plusminus
-S2 333,705 2 0262 twosuperior
+char177 606,506 0 0261 -- plusminus
+S2 333,705 2 0262 -- twosuperior
char178 "
-S3 333,705 2 0263 threesuperior
+S3 333,705 2 0263 -- threesuperior
char179 "
-aa 333,699 2 0264 acute
+aa 333,699 2 0264 -- acute
char180 "
-char181 611,464,205 1 0265 mu
-ps 606,722,147 2 0266 paragraph
+char181 611,464,205 1 0265 -- mu
+ps 606,722,132 2 0266 -- paragraph
char182 "
-char183 278,302 0 0267 periodcentered
-ac 333,0,215 1 0270 cedilla
+pc 278,374 0 0267 -- periodcentered
+char183 "
+ac 333,0,215 1 0270 -- cedilla
char184 "
-S1 333,705 2 0271 onesuperior
+S1 333,705 2 0271 -- onesuperior
char185 "
-Om 300,722 2 0272 ordmasculine
+Om 300,705 2 0272 -- ordmasculine
char186 "
-fc 259,399 0 0273 guilsinglright
-14 834,705 2 0274 onequarter
+fc 259,398 0 0273 -- guilsinglright
+14 834,705,15 2 0274 -- onequarter
char188 "
-12 834,705,2 2 0275 onehalf
+12 834,705,15 2 0275 -- onehalf
char189 "
-34 834,705 2 0276 threequarters
+34 834,705,15 2 0276 -- threequarters
char190 "
-r? 444,547,205 1 0277 questiondown
+r? 444,547,205 1 0277 -- questiondown
char191 "
-`A 722,957 2 0300 Agrave
+`A 722,937 2 0300 -- Agrave
char192 "
-'A 722,957 2 0301 Aacute
+'A 722,937 2 0301 -- Aacute
char193 "
-^A 722,952 2 0302 Acircumflex
+^A 722,933 2 0302 -- Acircumflex
char194 "
-~A 722,917 2 0303 Atilde
+~A 722,893 2 0303 -- Atilde
char195 "
-:A 722,902 2 0304 Adieresis
+:A 722,883 2 0304 -- Adieresis
char196 "
-oA 722,980 2 0305 Aring
+oA 722,965 2 0305 -- Aring
char197 "
-AE 1000,722 2 0306 AE
+AE 1000,722 2 0306 -- AE
char198 "
-,C 722,737,215 3 0307 Ccedilla
+,C 722,737,215 3 0307 -- Ccedilla
char199 "
-`E 722,957 2 0310 Egrave
+`E 722,937 2 0310 -- Egrave
char200 "
-'E 722,957 2 0311 Eacute
+'E 722,937 2 0311 -- Eacute
char201 "
-^E 722,952 2 0312 Ecircumflex
+^E 722,933 2 0312 -- Ecircumflex
char202 "
-:E 722,902 2 0313 Edieresis
+:E 722,883 2 0313 -- Edieresis
char203 "
-`I 407,957 2 0314 Igrave
+`I 407,937 2 0314 -- Igrave
char204 "
-'I 407,957 2 0315 Iacute
+'I 407,937 2 0315 -- Iacute
char205 "
-^I 407,952 2 0316 Icircumflex
+^I 407,933 2 0316 -- Icircumflex
char206 "
-:I 407,902 2 0317 Idieresis
+:I 407,883 2 0317 -- Idieresis
char207 "
--D 778,722 2 0320 Eth
+-D 778,722 2 0320 -- Eth
char208 "
-~N 815,917,15 2 0321 Ntilde
+~N 815,893,15 2 0321 -- Ntilde
char209 "
-`O 778,957,15 2 0322 Ograve
+`O 778,937,15 2 0322 -- Ograve
char210 "
-'O 778,957,15 2 0323 Oacute
+'O 778,937,15 2 0323 -- Oacute
char211 "
-^O 778,952,15 2 0324 Ocircumflex
+^O 778,933,15 2 0324 -- Ocircumflex
char212 "
-~O 778,917,15 2 0325 Otilde
+~O 778,893,15 2 0325 -- Otilde
char213 "
-:O 778,902,15 2 0326 Odieresis
+:O 778,883,15 2 0326 -- Odieresis
char214 "
-char215 606,491,13 0 0327 multiply
-/O 778,760,74 2 0330 Oslash
+char215 606,482 0 0327 -- multiply
+/O 778,778,56 2 0330 -- Oslash
char216 "
-`U 815,957,15 2 0331 Ugrave
+`U 815,937,15 2 0331 -- Ugrave
char217 "
-'U 815,957,15 2 0332 Uacute
+'U 815,937,15 2 0332 -- Uacute
char218 "
-^U 815,952,15 2 0333 Ucircumflex
+^U 815,933,15 2 0333 -- Ucircumflex
char219 "
-:U 815,902,15 2 0334 Udieresis
+:U 815,883,15 2 0334 -- Udieresis
char220 "
-'Y 704,957 2 0335 Yacute
+'Y 704,937 2 0335 -- Yacute
char221 "
-TP 667,722 2 0336 Thorn
+TP 667,722 2 0336 -- Thorn
char222 "
-ss 574,737,15 2 0337 germandbls
+ss 574,737,15 2 0337 -- germandbls
char223 "
-`a 556,699,15 2 0340 agrave
+`a 556,699,15 2 0340 -- agrave
char224 "
-'a 556,699,15 2 0341 aacute
+'a 556,699,15 2 0341 -- aacute
char225 "
-^a 556,694,15 2 0342 acircumflex
+^a 556,695,15 2 0342 -- acircumflex
char226 "
-~a 556,659,15 0 0343 atilde
+~a 556,655,15 0 0343 -- atilde
char227 "
-:a 556,644,15 0 0344 adieresis
+:a 556,645,15 0 0344 -- adieresis
char228 "
-oa 556,722,15 2 0345 aring
+oa 556,732,15 2 0345 -- aring
char229 "
-ae 796,479,15 0 0346 ae
+ae 796,479,15 0 0346 -- ae
char230 "
-,c 444,479,215 1 0347 ccedilla
+,c 444,479,215 1 0347 -- ccedilla
char231 "
-`e 500,699,15 2 0350 egrave
+`e 500,699,15 2 0350 -- egrave
char232 "
-'e 500,699,15 2 0351 eacute
+'e 500,699,15 2 0351 -- eacute
char233 "
-^e 500,694,15 2 0352 ecircumflex
+^e 500,695,15 2 0352 -- ecircumflex
char234 "
-:e 500,644,15 0 0353 edieresis
+:e 500,645,15 0 0353 -- edieresis
char235 "
-`i 315,699 2 0354 igrave
+`i 315,699 2 0354 -- igrave
char236 "
-'i 315,699 2 0355 iacute
+'i 315,699 2 0355 -- iacute
char237 "
-^i 315,694 2 0356 icircumflex
+^i 315,695 2 0356 -- icircumflex
char238 "
-:i 315,644 0 0357 idieresis
+:i 315,645 0 0357 -- idieresis
char239 "
-Sd 500,740,15 2 0360 eth
+Sd 500,752,15 2 0360 -- eth
char240 "
-~n 611,659 0 0361 ntilde
+~n 611,655 0 0361 -- ntilde
char241 "
-`o 500,699,15 2 0362 ograve
+`o 500,699,15 2 0362 -- ograve
char242 "
-'o 500,699,15 2 0363 oacute
+'o 500,699,15 2 0363 -- oacute
char243 "
-^o 500,694,15 2 0364 ocircumflex
+^o 500,695,15 2 0364 -- ocircumflex
char244 "
-~o 500,659,15 0 0365 otilde
+~o 500,655,15 0 0365 -- otilde
char245 "
-:o 500,644,15 0 0366 odieresis
+:o 500,645,15 0 0366 -- odieresis
char246 "
-char247 606,493,11 0 0367 divide
-/o 500,556,102 0 0370 oslash
+char247 606,528,22 0 0367 -- divide
+/o 500,561,97 0 0370 -- oslash
char248 "
-`u 611,699,15 2 0371 ugrave
+`u 611,699,15 2 0371 -- ugrave
char249 "
-'u 611,699,15 2 0372 uacute
+'u 611,699,15 2 0372 -- uacute
char250 "
-^u 611,694,15 2 0373 ucircumflex
+^u 611,695,15 2 0373 -- ucircumflex
char251 "
-:u 611,644,15 0 0374 udieresis
+:u 611,645,15 0 0374 -- udieresis
char252 "
-'y 537,699,205 3 0375 yacute
+'y 537,699,205 3 0375 -- yacute
char253 "
-Tp 574,737,205 3 0376 thorn
+Tp 574,737,205 3 0376 -- thorn
char254 "
-:y 537,644,205 1 0377 ydieresis
+:y 537,645,205 1 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/PB b/contrib/groff/devps/PB
index 348281ad3ddb..0f327d3480f1 100644
--- a/contrib/groff/devps/PB
+++ b/contrib/groff/devps/PB
@@ -8,6 +8,7 @@ A y -70
A w -70
A v -70
A ' -92
+A cq -92
A Y -111
A W -90
A V -129
@@ -17,6 +18,7 @@ F , -111
F A -55
L y -74
L ' -74
+L cq -74
L Y -92
L W -92
L V -92
@@ -94,6 +96,7 @@ Y : -55
Y a -74
Y A -55
f ' 37
+f cq 37
f f -18
1 1 -37
` ` -55
@@ -101,9 +104,15 @@ f f -18
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
@@ -116,334 +125,337 @@ 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
+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
-# 500,673 2 0043 numbersign
+! 278,688,12 2 0041 -- exclam
+" 402,695 2 0042 -- quotedbl
+dq "
+# 500,673 2 0043 -- numbersign
sh "
-$ 500,721,114 2 0044 dollar
+$ 500,721,114 2 0044 -- dollar
Do "
-% 889,714,9 2 0045 percent
-& 833,684,17 2 0046 ampersand
-' 278,695 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 606,720 2 0134 -- backslash
rs "
-] 333,720,104 2 0135 bracketright
+] 333,720,104 2 0135 -- bracketright
rB "
-a^ 333,681 2 0136 circumflex
+a^ 333,681 2 0136 -- circumflex
^ "
-_ 500,0,125 0 0137 underscore
-` 278,695 2 0140 quoteleft
+_ 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
+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
+ba 606,720 2 0174 -- bar
| "
-rC 310,725,117 2 0175 braceright
+rC 310,725,117 2 0175 -- braceright
} "
-a~ 333,661 2 0176 tilde
+a~ 333,661 2 0176 -- tilde
~ "
-bq 333,130,160 0 0200 quotesinglbase
-Fo 500,438 0 0201 guillemotleft
+bq 333,130,160 0 0200 -- quotesinglbase
+Fo 500,438 0 0201 -- guillemotleft
char171 "
-Fc 500,438 0 0202 guillemotright
+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
+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
+ct 500,554,106 0 0242 -- cent
char162 "
-Po 500,676,19 2 0243 sterling
+Po 500,676,19 2 0243 -- sterling
char163 "
-Cs 500,533 0 0244 currency
+Cs 500,533 0 0244 -- currency
char164 "
-Ye 500,695,3 2 0245 yen
+Ye 500,695,3 2 0245 -- yen
char165 "
-bb 606,720 2 0246 brokenbar
+bb 606,720 2 0246 -- brokenbar
char166 "
-sc 500,695,217 2 0247 section
+sc 500,695,217 2 0247 -- section
char167 "
-ad 333,671 2 0250 dieresis
+ad 333,671 2 0250 -- dieresis
char168 "
-co 747,695,17 2 0251 copyright
+co 747,695,17 2 0251 -- copyright
char169 "
-Of 438,660 2 0252 ordfeminine
+Of 438,660 2 0252 -- ordfeminine
char170 "
-fo 389,438 0 0253 guilsinglleft
-no 606,396 0 0254 logicalnot
+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
+\- 606,298 0 0255 -- minus
+rg 747,695,17 2 0256 -- registered
char174 "
-a- 333,609 0 0257 macron
+a- 333,609 0 0257 -- macron
char175 "
-de 400,660 2 0260 degree
+de 400,660 2 0260 -- degree
char176 "
-char177 606,505 0 0261 plusminus
-S2 300,660 2 0262 twosuperior
+char177 606,505 0 0261 -- plusminus
+S2 300,660 2 0262 -- twosuperior
char178 "
-S3 300,667 2 0263 threesuperior
+S3 300,667 2 0263 -- threesuperior
char179 "
-aa 333,691 2 0264 acute
+aa 333,691 2 0264 -- acute
char180 "
-char181 611,471,225 0 0265 mu
-ps 641,683,161 2 0266 paragraph
+char181 611,471,225 0 0265 -- mu
+ps 641,683,161 2 0266 -- paragraph
char182 "
-char183 250,335 0 0267 periodcentered
-ac 333,0,225 0 0270 cedilla
+pc 250,335 0 0267 -- periodcentered
+char183 "
+ac 333,0,225 0 0270 -- cedilla
char184 "
-S1 300,665 2 0271 onesuperior
+S1 300,665 2 0271 -- onesuperior
char185 "
-Om 488,660 2 0272 ordmasculine
+Om 488,660 2 0272 -- ordmasculine
char186 "
-fc 389,438 0 0273 guilsinglright
-14 750,665,2 2 0274 onequarter
+fc 389,438 0 0273 -- guilsinglright
+14 750,665,2 2 0274 -- onequarter
char188 "
-12 750,665,2 2 0275 onehalf
+12 750,665,2 2 0275 -- onehalf
char189 "
-34 750,667,2 2 0276 threequarters
+34 750,667,2 2 0276 -- threequarters
char190 "
-r? 444,471,231 0 0277 questiondown
+r? 444,471,231 0 0277 -- questiondown
char191 "
-`A 778,915,3 2 0300 Agrave
+`A 778,915,3 2 0300 -- Agrave
char192 "
-'A 778,915,3 2 0301 Aacute
+'A 778,915,3 2 0301 -- Aacute
char193 "
-^A 778,905,3 2 0302 Acircumflex
+^A 778,905,3 2 0302 -- Acircumflex
char194 "
-~A 778,885,3 2 0303 Atilde
+~A 778,885,3 2 0303 -- Atilde
char195 "
-:A 778,895,3 2 0304 Adieresis
+:A 778,895,3 2 0304 -- Adieresis
char196 "
-oA 778,924,3 2 0305 Aring
+oA 778,924,3 2 0305 -- Aring
char197 "
-AE 1000,681,4 2 0306 AE
+AE 1000,681,4 2 0306 -- AE
char198 "
-,C 722,695,225 2 0307 Ccedilla
+,C 722,695,225 2 0307 -- Ccedilla
char199 "
-`E 611,915,4 2 0310 Egrave
+`E 611,915,4 2 0310 -- Egrave
char200 "
-'E 611,915,4 2 0311 Eacute
+'E 611,915,4 2 0311 -- Eacute
char201 "
-^E 611,905,4 2 0312 Ecircumflex
+^E 611,905,4 2 0312 -- Ecircumflex
char202 "
-:E 611,895,4 2 0313 Edieresis
+:E 611,895,4 2 0313 -- Edieresis
char203 "
-`I 389,915,3 2 0314 Igrave
+`I 389,915,3 2 0314 -- Igrave
char204 "
-'I 389,915,3 2 0315 Iacute
+'I 389,915,3 2 0315 -- Iacute
char205 "
-^I 389,905,3 2 0316 Icircumflex
+^I 389,905,3 2 0316 -- Icircumflex
char206 "
-:I 389,895,3 2 0317 Idieresis
+:I 389,895,3 2 0317 -- Idieresis
char207 "
--D 833,681,3 2 0320 Eth
+-D 833,681,3 2 0320 -- Eth
char208 "
-~N 833,885,16 2 0321 Ntilde
+~N 833,885,16 2 0321 -- Ntilde
char209 "
-`O 833,915,17 2 0322 Ograve
+`O 833,915,17 2 0322 -- Ograve
char210 "
-'O 833,915,17 2 0323 Oacute
+'O 833,915,17 2 0323 -- Oacute
char211 "
-^O 833,905,17 2 0324 Ocircumflex
+^O 833,905,17 2 0324 -- Ocircumflex
char212 "
-~O 833,885,17 2 0325 Otilde
+~O 833,885,17 2 0325 -- Otilde
char213 "
-:O 833,895,17 2 0326 Odieresis
+:O 833,895,17 2 0326 -- Odieresis
char214 "
-char215 606,483 0 0327 multiply
-/O 833,698,20 2 0330 Oslash
+char215 606,483 0 0327 -- multiply
+/O 833,698,20 2 0330 -- Oslash
char216 "
-`U 778,915,17 2 0331 Ugrave
+`U 778,915,17 2 0331 -- Ugrave
char217 "
-'U 778,915,17 2 0332 Uacute
+'U 778,915,17 2 0332 -- Uacute
char218 "
-^U 778,905,17 2 0333 Ucircumflex
+^U 778,905,17 2 0333 -- Ucircumflex
char219 "
-:U 778,895,17 2 0334 Udieresis
+:U 778,895,17 2 0334 -- Udieresis
char220 "
-'Y 667,915,3 2 0335 Yacute
+'Y 667,915,3 2 0335 -- Yacute
char221 "
-TP 611,681,3 2 0336 Thorn
+TP 611,681,3 2 0336 -- Thorn
char222 "
-ss 611,720,17 2 0337 germandbls
+ss 611,720,17 2 0337 -- germandbls
char223 "
-`a 500,711,17 2 0340 agrave
+`a 500,711,17 2 0340 -- agrave
char224 "
-'a 500,711,17 2 0341 aacute
+'a 500,711,17 2 0341 -- aacute
char225 "
-^a 500,701,17 2 0342 acircumflex
+^a 500,701,17 2 0342 -- acircumflex
char226 "
-~a 500,673,17 2 0343 atilde
+~a 500,673,17 2 0343 -- atilde
char227 "
-:a 500,691,17 2 0344 adieresis
+:a 500,691,17 2 0344 -- adieresis
char228 "
-oa 500,700,17 2 0345 aring
+oa 500,700,17 2 0345 -- aring
char229 "
-ae 778,471,17 0 0346 ae
+ae 778,471,17 0 0346 -- ae
char230 "
-,c 444,471,225 0 0347 ccedilla
+,c 444,471,225 0 0347 -- ccedilla
char231 "
-`e 500,711,17 2 0350 egrave
+`e 500,711,17 2 0350 -- egrave
char232 "
-'e 500,711,17 2 0351 eacute
+'e 500,711,17 2 0351 -- eacute
char233 "
-^e 500,701,17 2 0352 ecircumflex
+^e 500,701,17 2 0352 -- ecircumflex
char234 "
-:e 500,691,17 2 0353 edieresis
+:e 500,691,17 2 0353 -- edieresis
char235 "
-`i 333,711,3 2 0354 igrave
+`i 333,711,3 2 0354 -- igrave
char236 "
-'i 333,711,3 2 0355 iacute
+'i 333,711,3 2 0355 -- iacute
char237 "
-^i 333,701,3 2 0356 icircumflex
+^i 333,701,3 2 0356 -- icircumflex
char238 "
-:i 333,691,3 2 0357 idieresis
+:i 333,691,3 2 0357 -- idieresis
char239 "
-Sd 556,720,17 2 0360 eth
+Sd 556,720,17 2 0360 -- eth
char240 "
-~n 611,673,3 2 0361 ntilde
+~n 611,673,3 2 0361 -- ntilde
char241 "
-`o 556,711,17 2 0362 ograve
+`o 556,711,17 2 0362 -- ograve
char242 "
-'o 556,711,17 2 0363 oacute
+'o 556,711,17 2 0363 -- oacute
char243 "
-^o 556,701,17 2 0364 ocircumflex
+^o 556,701,17 2 0364 -- ocircumflex
char244 "
-~o 556,673,17 2 0365 otilde
+~o 556,673,17 2 0365 -- otilde
char245 "
-:o 556,691,17 2 0366 odieresis
+:o 556,691,17 2 0366 -- odieresis
char246 "
-char247 606,510 0 0367 divide
-/o 556,471,18 0 0370 oslash
+char247 606,510 0 0367 -- divide
+/o 556,471,18 0 0370 -- oslash
char248 "
-`u 611,711,17 2 0371 ugrave
+`u 611,711,17 2 0371 -- ugrave
char249 "
-'u 611,711,17 2 0372 uacute
+'u 611,711,17 2 0372 -- uacute
char250 "
-^u 611,701,17 2 0373 ucircumflex
+^u 611,701,17 2 0373 -- ucircumflex
char251 "
-:u 611,691,17 2 0374 udieresis
+:u 611,691,17 2 0374 -- udieresis
char252 "
-'y 556,711,266 3 0375 yacute
+'y 556,711,266 3 0375 -- yacute
char253 "
-Tp 611,720,258 3 0376 thorn
+Tp 611,720,258 3 0376 -- thorn
char254 "
-:y 556,691,266 3 0377 ydieresis
+:y 556,691,266 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/PBI b/contrib/groff/devps/PBI
index 37facbe948c1..7ec5ff3ebfe1 100644
--- a/contrib/groff/devps/PBI
+++ b/contrib/groff/devps/PBI
@@ -9,6 +9,7 @@ A y -55
A w -37
A v -55
A ' -55
+A cq -55
A Y -74
A W -74
A V -74
@@ -18,6 +19,7 @@ F , -111
F A -74
L y -37
L ' -55
+L cq -55
L Y -74
L W -74
L V -74
@@ -93,6 +95,7 @@ Y : -55
Y a -111
Y A -55
f ' 37
+f cq 37
f f -37
1 1 -55
` ` -55
@@ -100,9 +103,15 @@ f f -37
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
@@ -118,334 +127,337 @@ 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
+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
-# 500,673,0,46,46,46 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 606,720,0,0,-22 2 0134 -- backslash
rs "
-] 333,723,102,32,71,32 2 0135 bracketright
+] 333,723,102,32,71,32 2 0135 -- bracketright
rB "
-a^ 333,684,0,132,-38,66 2 0136 circumflex
+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
+_ 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
+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
+ba 606,720,0,0,-209 2 0174 -- bar
| "
-rC 333,720,105,32,51,32 2 0175 braceright
+rC 333,720,105,32,51,32 2 0175 -- braceright
} "
-a~ 333,654,0,158,-32,66 2 0176 tilde
+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
+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
+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
+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
+ct 500,547,105,6,-2,6 0 0242 -- cent
char162 "
-Po 500,683,5,51,29,51 2 0243 sterling
+Po 500,683,5,51,29,51 2 0243 -- sterling
char163 "
-Cs 500,533,0,18,18,18 0 0244 currency
+Cs 500,533,0,18,18,18 0 0244 -- currency
char164 "
-Ye 500,695,3,88,39,66 2 0245 yen
+Ye 500,695,3,88,39,66 2 0245 -- yen
char165 "
-bb 606,720,0,0,-209 2 0246 brokenbar
+bb 606,720,0,0,-209 2 0246 -- brokenbar
char166 "
-sc 556,695,151,0,3 2 0247 section
+sc 556,695,151,0,3 2 0247 -- section
char167 "
-ad 333,668,0,143,-40,66 2 0250 dieresis
+ad 333,668,0,143,-40,66 2 0250 -- dieresis
char168 "
-co 747,695,17,23,24,23 2 0251 copyright
+co 747,695,17,23,24,23 2 0251 -- copyright
char169 "
-Of 333,684,0,72,3,66 2 0252 ordfeminine
+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
+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
+\- 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
+a- 333,608,0,135,-26,66 0 0257 -- macron
char175 "
-de 400,683 2 0260 degree
+de 400,683 2 0260 -- degree
char176 "
-char177 606,501 0 0261 plusminus
-S2 300,683,0,71,24,66 2 0262 twosuperior
+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
+S3 300,683,0,60,27,60 2 0263 -- threesuperior
char179 "
-aa 333,699,0,109,-103,66 2 0264 acute
+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
+char181 556,469,232,15,65,15 0 0265 -- mu
+ps 556,681,204,123,36,66 2 0266 -- paragraph
char182 "
-char183 250,324,0,6,-17,6 0 0267 periodcentered
-ac 333,5,218,0,38 0 0270 cedilla
+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
+S1 300,680,0,48,9,48 2 0271 -- onesuperior
char185 "
-Om 333,683,0,63,-1,63 2 0272 ordmasculine
+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
+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
+12 750,683,2,36,36,36 2 0275 -- onehalf
char189 "
-34 750,683,2,32,32,32 2 0276 threequarters
+34 750,683,2,32,32,32 2 0276 -- threequarters
char190 "
-r? 444,479,226,0,62 0 0277 questiondown
+r? 444,479,226,0,62 0 0277 -- questiondown
char191 "
-`A 722,911,3,13,85,13 2 0300 Agrave
+`A 722,911,3,13,85,13 2 0300 -- Agrave
char192 "
-'A 722,911,3,13,85,13 2 0301 Aacute
+'A 722,911,3,13,85,13 2 0301 -- Aacute
char193 "
-^A 722,896,3,13,85,13 2 0302 Acircumflex
+^A 722,896,3,13,85,13 2 0302 -- Acircumflex
char194 "
-~A 722,866,3,13,85,13 2 0303 Atilde
+~A 722,866,3,13,85,13 2 0303 -- Atilde
char195 "
-:A 722,880,3,13,85,13 2 0304 Adieresis
+:A 722,880,3,13,85,13 2 0304 -- Adieresis
char196 "
-oA 722,926,3,13,85,13 2 0305 Aring
+oA 722,926,3,13,85,13 2 0305 -- Aring
char197 "
-AE 944,681,3,33,79,33 2 0306 AE
+AE 944,681,3,33,79,33 2 0306 -- AE
char198 "
-,C 685,695,218,60,-19,60 2 0307 Ccedilla
+,C 685,695,218,60,-19,60 2 0307 -- Ccedilla
char199 "
-`E 611,911,3,45,39,45 2 0310 Egrave
+`E 611,911,3,45,39,45 2 0310 -- Egrave
char200 "
-'E 611,911,3,45,39,45 2 0311 Eacute
+'E 611,911,3,45,39,45 2 0311 -- Eacute
char201 "
-^E 611,896,3,45,39,45 2 0312 Ecircumflex
+^E 611,896,3,45,39,45 2 0312 -- Ecircumflex
char202 "
-:E 611,880,3,45,39,45 2 0313 Edieresis
+:E 611,880,3,45,39,45 2 0313 -- Edieresis
char203 "
-`I 389,911,3,73,51,66 2 0314 Igrave
+`I 389,911,3,73,51,66 2 0314 -- Igrave
char204 "
-'I 389,911,3,81,51,66 2 0315 Iacute
+'I 389,911,3,81,51,66 2 0315 -- Iacute
char205 "
-^I 389,896,3,104,51,66 2 0316 Icircumflex
+^I 389,896,3,104,51,66 2 0316 -- Icircumflex
char206 "
-:I 389,880,3,115,51,66 2 0317 Idieresis
+:I 389,880,3,115,51,66 2 0317 -- Idieresis
char207 "
--D 778,682,3,19,50,19 2 0320 Eth
+-D 778,682,3,19,50,19 2 0320 -- Eth
char208 "
-~N 778,866,3,101,52,66 2 0321 Ntilde
+~N 778,866,3,101,52,66 2 0321 -- Ntilde
char209 "
-`O 833,911,17,11,-26,11 2 0322 Ograve
+`O 833,911,17,11,-26,11 2 0322 -- Ograve
char210 "
-'O 833,911,17,11,-26,11 2 0323 Oacute
+'O 833,911,17,11,-26,11 2 0323 -- Oacute
char211 "
-^O 833,896,17,11,-26,11 2 0324 Ocircumflex
+^O 833,896,17,11,-26,11 2 0324 -- Ocircumflex
char212 "
-~O 833,866,17,11,-26,11 2 0325 Otilde
+~O 833,866,17,11,-26,11 2 0325 -- Otilde
char213 "
-:O 833,880,17,11,-26,11 2 0326 Odieresis
+: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
+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
+`U 778,911,17,97,-33,66 2 0331 -- Ugrave
char217 "
-'U 778,911,17,97,-33,66 2 0332 Uacute
+'U 778,911,17,97,-33,66 2 0332 -- Uacute
char218 "
-^U 778,896,17,97,-33,66 2 0333 Ucircumflex
+^U 778,896,17,97,-33,66 2 0333 -- Ucircumflex
char219 "
-:U 778,880,17,97,-33,66 2 0334 Udieresis
+:U 778,880,17,97,-33,66 2 0334 -- Udieresis
char220 "
-'Y 611,911,3,114,-4,66 2 0335 Yacute
+'Y 611,911,3,114,-4,66 2 0335 -- Yacute
char221 "
-TP 667,681,3,27,39,27 2 0336 Thorn
+TP 667,681,3,27,39,27 2 0336 -- Thorn
char222 "
-ss 556,726,271,43,181,43 3 0337 germandbls
+ss 556,726,271,43,181,43 3 0337 -- germandbls
char223 "
-`a 556,719,17,13,6,13 2 0340 agrave
+`a 556,719,17,13,6,13 2 0340 -- agrave
char224 "
-'a 556,719,17,13,6,13 2 0341 aacute
+'a 556,719,17,13,6,13 2 0341 -- aacute
char225 "
-^a 556,704,17,21,6,21 2 0342 acircumflex
+^a 556,704,17,21,6,21 2 0342 -- acircumflex
char226 "
-~a 556,666,17,47,6,47 2 0343 atilde
+~a 556,666,17,47,6,47 2 0343 -- atilde
char227 "
-:a 556,688,17,32,6,32 2 0344 adieresis
+:a 556,688,17,32,6,32 2 0344 -- adieresis
char228 "
-oa 556,714,17,13,6,13 2 0345 aring
+oa 556,714,17,13,6,13 2 0345 -- aring
char229 "
-ae 738,469,17,23,6,23 0 0346 ae
+ae 738,469,17,23,6,23 0 0346 -- ae
char230 "
-,c 444,469,218,42,18,42 0 0347 ccedilla
+,c 444,469,218,42,18,42 0 0347 -- ccedilla
char231 "
-`e 444,719,17,24,22,24 2 0350 egrave
+`e 444,719,17,24,22,24 2 0350 -- egrave
char232 "
-'e 444,719,17,54,22,54 2 0351 eacute
+'e 444,719,17,54,22,54 2 0351 -- eacute
char233 "
-^e 444,704,17,77,22,66 2 0352 ecircumflex
+^e 444,704,17,77,22,66 2 0352 -- ecircumflex
char234 "
-:e 444,688,17,88,22,66 2 0353 edieresis
+:e 444,688,17,88,22,66 2 0353 -- edieresis
char235 "
-`i 333,719,17,39,24,39 2 0354 igrave
+`i 333,719,17,39,24,39 2 0354 -- igrave
char236 "
-'i 333,719,17,109,24,66 2 0355 iacute
+'i 333,719,17,109,24,66 2 0355 -- iacute
char237 "
-^i 333,704,17,120,24,66 2 0356 icircumflex
+^i 333,704,17,120,24,66 2 0356 -- icircumflex
char238 "
-:i 333,688,17,143,24,66 2 0357 idieresis
+:i 333,688,17,143,24,66 2 0357 -- idieresis
char239 "
-Sd 556,726,17,40,2,40 2 0360 eth
+Sd 556,726,17,40,2,40 2 0360 -- eth
char240 "
-~n 556,666,17,47,33,47 2 0361 ntilde
+~n 556,666,17,47,33,47 2 0361 -- ntilde
char241 "
-`o 556,719,17,0,2 2 0362 ograve
+`o 556,719,17,0,2 2 0362 -- ograve
char242 "
-'o 556,719,17,0,2 2 0363 oacute
+'o 556,719,17,0,2 2 0363 -- oacute
char243 "
-^o 556,704,17,9,2,9 2 0364 ocircumflex
+^o 556,704,17,9,2,9 2 0364 -- ocircumflex
char244 "
-~o 556,666,17,47,2,47 2 0365 otilde
+~o 556,666,17,47,2,47 2 0365 -- otilde
char245 "
-:o 556,688,17,32,2,32 2 0366 odieresis
+: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
+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
+`u 556,719,17,15,28,15 2 0371 -- ugrave
char249 "
-'u 556,719,17,15,28,15 2 0372 uacute
+'u 556,719,17,15,28,15 2 0372 -- uacute
char250 "
-^u 556,704,17,15,28,15 2 0373 ucircumflex
+^u 556,704,17,15,28,15 2 0373 -- ucircumflex
char251 "
-:u 556,688,17,32,28,32 2 0374 udieresis
+:u 556,688,17,32,28,32 2 0374 -- udieresis
char252 "
-'y 556,719,271,35,37,35 3 0375 yacute
+'y 556,719,271,35,37,35 3 0375 -- yacute
char253 "
-Tp 556,726,271,10,71,10 3 0376 thorn
+Tp 556,726,271,10,71,10 3 0376 -- thorn
char254 "
-:y 556,688,271,35,37,35 3 0377 ydieresis
+:y 556,688,271,35,37,35 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/PI b/contrib/groff/devps/PI
index 7839606f4979..d35c7f8a4192 100644
--- a/contrib/groff/devps/PI
+++ b/contrib/groff/devps/PI
@@ -9,6 +9,7 @@ A y -55
A w -37
A v -37
A ' -55
+A cq -55
A Y -55
A W -55
A V -74
@@ -18,6 +19,7 @@ F , -111
F A -111
L y -37
L ' -37
+L cq -37
L Y -74
L W -74
L V -74
@@ -96,15 +98,22 @@ 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
@@ -120,334 +129,337 @@ 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
+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
-# 500,692,0,45,46,45 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 606,733,0,0,-31 2 0134 -- backslash
rs "
-] 333,733,100,32,43,32 2 0135 bracketright
+] 333,733,100,32,43,32 2 0135 -- bracketright
rB "
-a^ 333,679,0,67,-6,67 2 0136 circumflex
+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
+_ 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
+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
+ba 606,733,0,0,-225 2 0174 -- bar
| "
-rC 333,733,100,35,36,35 2 0175 braceright
+rC 333,733,100,35,36,35 2 0175 -- braceright
} "
-a~ 333,638,0,107,-13,68 0 0176 tilde
+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
+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
+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
+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
+ct 500,551,96,0,-6 0 0242 -- cent
char162 "
-Po 500,708,18,29,48,29 2 0243 sterling
+Po 500,708,18,29,48,29 2 0243 -- sterling
char163 "
-Cs 500,577,0,36,36,36 0 0244 currency
+Cs 500,577,0,36,36,36 0 0244 -- currency
char164 "
-Ye 500,699,3,62,15,62 2 0245 yen
+Ye 500,699,3,62,15,62 2 0245 -- yen
char165 "
-bb 606,733,0,0,-225 2 0246 brokenbar
+bb 606,733,0,0,-225 2 0246 -- brokenbar
char166 "
-sc 500,706,220,13,36,13 2 0247 section
+sc 500,706,220,13,36,13 2 0247 -- section
char167 "
-ad 333,637,0,95,-28,68 0 0250 dieresis
+ad 333,637,0,95,-28,68 0 0250 -- dieresis
char168 "
-co 747,706,18,39,39,39 2 0251 copyright
+co 747,706,18,39,39,39 2 0251 -- copyright
char169 "
-Of 333,699,0,38,-10,38 2 0252 ordfeminine
+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
+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
+\- 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
+a- 333,589,0,103,-24,68 0 0257 -- macron
char175 "
-de 400,689,0,40,-40,40 2 0260 degree
+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
+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
+S3 300,699,0,54,22,54 2 0263 -- threesuperior
char179 "
-aa 333,687,0,63,-72,63 2 0264 acute
+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
+char181 556,482,226,6,35,6 0 0265 -- mu
+ps 500,692,224,161,17,68 2 0266 -- paragraph
char182 "
-char183 250,312,0,0,-3 0 0267 periodcentered
-ac 333,0,216,0,59 0 0270 cedilla
+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
+S1 300,699,0,35,-11,35 2 0271 -- onesuperior
char185 "
-Om 333,699,0,39,-16,39 2 0272 ordmasculine
+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
+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
+12 750,699,2,21,19,21 2 0275 -- onehalf
char189 "
-34 750,699,2,15,15,15 2 0276 threequarters
+34 750,699,2,15,15,15 2 0276 -- threequarters
char190 "
-r? 500,467,246,0,-7 0 0277 questiondown
+r? 500,467,246,0,-7 0 0277 -- questiondown
char191 "
-`A 722,897,3,5,69,5 2 0300 Agrave
+`A 722,897,3,5,69,5 2 0300 -- Agrave
char192 "
-'A 722,897,3,5,69,5 2 0301 Aacute
+'A 722,897,3,5,69,5 2 0301 -- Aacute
char193 "
-^A 722,889,3,5,69,5 2 0302 Acircumflex
+^A 722,889,3,5,69,5 2 0302 -- Acircumflex
char194 "
-~A 722,866,3,5,69,5 2 0303 Atilde
+~A 722,866,3,5,69,5 2 0303 -- Atilde
char195 "
-:A 722,847,3,5,69,5 2 0304 Adieresis
+:A 722,847,3,5,69,5 2 0304 -- Adieresis
char196 "
-oA 722,918,3,5,69,5 2 0305 Aring
+oA 722,918,3,5,69,5 2 0305 -- Aring
char197 "
-AE 941,692,3,11,54,11 2 0306 AE
+AE 941,692,3,11,54,11 2 0306 -- AE
char198 "
-,C 667,706,216,34,5,34 2 0307 Ccedilla
+,C 667,706,216,34,5,34 2 0307 -- Ccedilla
char199 "
-`E 611,897,3,9,20,9 2 0310 Egrave
+`E 611,897,3,9,20,9 2 0310 -- Egrave
char200 "
-'E 611,897,3,9,20,9 2 0311 Eacute
+'E 611,897,3,9,20,9 2 0311 -- Eacute
char201 "
-^E 611,889,3,9,20,9 2 0312 Ecircumflex
+^E 611,889,3,9,20,9 2 0312 -- Ecircumflex
char202 "
-:E 611,847,3,9,20,9 2 0313 Edieresis
+:E 611,847,3,9,20,9 2 0313 -- Edieresis
char203 "
-`I 333,897,3,71,43,68 2 0314 Igrave
+`I 333,897,3,71,43,68 2 0314 -- Igrave
char204 "
-'I 333,897,3,123,43,68 2 0315 Iacute
+'I 333,897,3,123,43,68 2 0315 -- Iacute
char205 "
-^I 333,889,3,107,43,68 2 0316 Icircumflex
+^I 333,889,3,107,43,68 2 0316 -- Icircumflex
char206 "
-:I 333,847,3,135,43,68 2 0317 Idieresis
+:I 333,847,3,135,43,68 2 0317 -- Idieresis
char207 "
--D 778,692,3,13,31,13 2 0320 Eth
+-D 778,692,3,13,31,13 2 0320 -- Eth
char208 "
-~N 778,866,11,76,48,68 2 0321 Ntilde
+~N 778,866,11,76,48,68 2 0321 -- Ntilde
char209 "
-`O 778,897,18,20,-3,20 2 0322 Ograve
+`O 778,897,18,20,-3,20 2 0322 -- Ograve
char210 "
-'O 778,897,18,20,-3,20 2 0323 Oacute
+'O 778,897,18,20,-3,20 2 0323 -- Oacute
char211 "
-^O 778,889,18,20,-3,20 2 0324 Ocircumflex
+^O 778,889,18,20,-3,20 2 0324 -- Ocircumflex
char212 "
-~O 778,866,18,20,-3,20 2 0325 Otilde
+~O 778,866,18,20,-3,20 2 0325 -- Otilde
char213 "
-:O 778,847,18,20,-3,20 2 0326 Odieresis
+: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
+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
+`U 778,897,18,70,-38,68 2 0331 -- Ugrave
char217 "
-'U 778,897,18,70,-38,68 2 0332 Uacute
+'U 778,897,18,70,-38,68 2 0332 -- Uacute
char218 "
-^U 778,889,18,70,-38,68 2 0333 Ucircumflex
+^U 778,889,18,70,-38,68 2 0333 -- Ucircumflex
char219 "
-:U 778,847,18,70,-38,68 2 0334 Udieresis
+:U 778,847,18,70,-38,68 2 0334 -- Udieresis
char220 "
-'Y 667,897,3,58,-2,58 2 0335 Yacute
+'Y 667,897,3,58,-2,58 2 0335 -- Yacute
char221 "
-TP 611,692,3,9,41,9 2 0336 Thorn
+TP 611,692,3,9,41,9 2 0336 -- Thorn
char222 "
-ss 500,733,276,38,210,38 3 0337 germandbls
+ss 500,733,276,38,210,38 3 0337 -- germandbls
char223 "
-`a 444,707,11,12,46,12 2 0340 agrave
+`a 444,707,11,12,46,12 2 0340 -- agrave
char224 "
-'a 444,707,11,20,46,20 2 0341 aacute
+'a 444,707,11,20,46,20 2 0341 -- aacute
char225 "
-^a 444,699,11,12,46,12 2 0342 acircumflex
+^a 444,699,11,12,46,12 2 0342 -- acircumflex
char226 "
-~a 444,650,11,52,46,52 2 0343 atilde
+~a 444,650,11,52,46,52 2 0343 -- atilde
char227 "
-:a 444,657,11,40,46,40 2 0344 adieresis
+:a 444,657,11,40,46,40 2 0344 -- adieresis
char228 "
-oa 444,728,11,12,46,12 2 0345 aring
+oa 444,728,11,12,46,12 2 0345 -- aring
char229 "
-ae 638,482,11,35,49,35 0 0346 ae
+ae 638,482,11,35,49,35 0 0346 -- ae
char230 "
-,c 407,482,216,32,25,32 0 0347 ccedilla
+,c 407,482,216,32,25,32 0 0347 -- ccedilla
char231 "
-`e 389,707,11,35,35,35 2 0350 egrave
+`e 389,707,11,35,35,35 2 0350 -- egrave
char232 "
-'e 389,707,11,55,35,55 2 0351 eacute
+'e 389,707,11,55,35,55 2 0351 -- eacute
char233 "
-^e 389,699,11,59,35,59 2 0352 ecircumflex
+^e 389,699,11,59,35,59 2 0352 -- ecircumflex
char234 "
-:e 389,657,11,67,35,67 2 0353 edieresis
+:e 389,657,11,67,35,67 2 0353 -- edieresis
char235 "
-`i 278,707,9,43,16,43 2 0354 igrave
+`i 278,707,9,43,16,43 2 0354 -- igrave
char236 "
-'i 278,707,9,103,16,68 2 0355 iacute
+'i 278,707,9,103,16,68 2 0355 -- iacute
char237 "
-^i 278,699,9,95,21,68 2 0356 icircumflex
+^i 278,699,9,95,21,68 2 0356 -- icircumflex
char238 "
-:i 278,657,9,123,16,68 2 0357 idieresis
+:i 278,657,9,123,16,68 2 0357 -- idieresis
char239 "
-Sd 444,733,11,84,33,68 2 0360 eth
+Sd 444,733,11,84,33,68 2 0360 -- eth
char240 "
-~n 556,650,9,8,26,8 2 0361 ntilde
+~n 556,650,9,8,26,8 2 0361 -- ntilde
char241 "
-`o 444,707,11,17,33,17 2 0362 ograve
+`o 444,707,11,17,33,17 2 0362 -- ograve
char242 "
-'o 444,707,11,20,33,20 2 0363 oacute
+'o 444,707,11,20,33,20 2 0363 -- oacute
char243 "
-^o 444,699,11,17,33,17 2 0364 ocircumflex
+^o 444,699,11,17,33,17 2 0364 -- ocircumflex
char244 "
-~o 444,650,11,52,33,52 2 0365 otilde
+~o 444,650,11,52,33,52 2 0365 -- otilde
char245 "
-:o 444,657,11,40,33,40 2 0366 odieresis
+: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
+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
+`u 556,707,11,6,18,6 2 0371 -- ugrave
char249 "
-'u 556,707,11,6,18,6 2 0372 uacute
+'u 556,707,11,6,18,6 2 0372 -- uacute
char250 "
-^u 556,699,11,6,18,6 2 0373 ucircumflex
+^u 556,699,11,6,18,6 2 0373 -- ucircumflex
char251 "
-:u 556,657,11,6,18,6 2 0374 udieresis
+:u 556,657,11,6,18,6 2 0374 -- udieresis
char252 "
-'y 500,707,276,40,58,40 3 0375 yacute
+'y 500,707,276,40,58,40 3 0375 -- yacute
char253 "
-Tp 500,733,276,0,89 3 0376 thorn
+Tp 500,733,276,0,89 3 0376 -- thorn
char254 "
-:y 500,657,276,40,58,40 3 0377 ydieresis
+:y 500,657,276,40,58,40 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/PR b/contrib/groff/devps/PR
index 4dd5626d4e97..2eccf3c12fbb 100644
--- a/contrib/groff/devps/PR
+++ b/contrib/groff/devps/PR
@@ -8,6 +8,7 @@ A y -74
A w -74
A v -92
A ' -74
+A cq -74
A Y -111
A W -74
A V -111
@@ -17,6 +18,7 @@ F , -92
F A -74
L y -55
L ' -74
+L cq -74
L Y -92
L W -74
L V -92
@@ -95,6 +97,7 @@ Y : -74
Y a -92
Y A -92
f ' 55
+f cq 55
f f -18
1 1 -55
` ` -37
@@ -102,8 +105,12 @@ f f -18
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
@@ -123,334 +130,337 @@ 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
+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
-# 500,684 2 0043 numbersign
+! 278,694,5 2 0041 -- exclam
+" 371,709 2 0042 -- quotedbl
+dq "
+# 500,684 2 0043 -- numbersign
sh "
-$ 500,731,116 2 0044 dollar
+$ 500,731,116 2 0044 -- dollar
Do "
-% 840,709,20 2 0045 percent
-& 778,689,20 2 0046 ampersand
-' 278,709 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 606,726 2 0134 -- backslash
rs "
-] 333,726,184 2 0135 bracketright
+] 333,726,184 2 0135 -- bracketright
rB "
-a^ 333,677 2 0136 circumflex
+a^ 333,677 2 0136 -- circumflex
^ "
-_ 500,0,125 0 0137 underscore
-` 278,709 2 0140 quoteleft
+_ 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
+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
+ba 606,726 2 0174 -- bar
| "
-rC 333,726,175 2 0175 braceright
+rC 333,726,175 2 0175 -- braceright
} "
-a~ 333,640 2 0176 tilde
+a~ 333,640 2 0176 -- tilde
~ "
-bq 278,110,153 0 0200 quotesinglbase
-Fo 500,428 0 0201 guillemotleft
+bq 278,110,153 0 0200 -- quotesinglbase
+Fo 500,428 0 0201 -- guillemotleft
char171 "
-Fc 500,428 0 0202 guillemotright
+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
+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
+ct 500,562,101 0 0242 -- cent
char162 "
-Po 500,694,13 2 0243 sterling
+Po 500,694,13 2 0243 -- sterling
char163 "
-Cs 500,531 0 0244 currency
+Cs 500,531 0 0244 -- currency
char164 "
-Ye 500,701,3 2 0245 yen
+Ye 500,701,3 2 0245 -- yen
char165 "
-bb 606,726 2 0246 brokenbar
+bb 606,726 2 0246 -- brokenbar
char166 "
-sc 500,709,219 2 0247 section
+sc 500,709,219 2 0247 -- section
char167 "
-ad 333,637 2 0250 dieresis
+ad 333,637 2 0250 -- dieresis
char168 "
-co 747,706,18 2 0251 copyright
+co 747,706,18 2 0251 -- copyright
char169 "
-Of 333,709 2 0252 ordfeminine
+Of 333,709 2 0252 -- ordfeminine
char170 "
-fo 331,428 0 0253 guilsinglleft
-no 606,386 0 0254 logicalnot
+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
+\- 606,289 0 0255 -- minus
+rg 747,706,18 2 0256 -- registered
char174 "
-a- 333,591 0 0257 macron
+a- 333,591 0 0257 -- macron
char175 "
-de 400,689 2 0260 degree
+de 400,689 2 0260 -- degree
char176 "
-char177 606,512 0 0261 plusminus
-S2 300,689 2 0262 twosuperior
+char177 606,512 0 0261 -- plusminus
+S2 300,689 2 0262 -- twosuperior
char178 "
-S3 300,689 2 0263 threesuperior
+S3 300,689 2 0263 -- threesuperior
char179 "
-aa 333,677 2 0264 acute
+aa 333,677 2 0264 -- acute
char180 "
-char181 603,469,236 0 0265 mu
-ps 628,694,150 2 0266 paragraph
+char181 603,469,236 0 0265 -- mu
+ps 628,694,150 2 0266 -- paragraph
char182 "
-char183 250,319 0 0267 periodcentered
-ac 333,0,225 0 0270 cedilla
+pc 250,319 0 0267 -- periodcentered
+char183 "
+ac 333,0,225 0 0270 -- cedilla
char184 "
-S1 300,692 2 0271 onesuperior
+S1 300,692 2 0271 -- onesuperior
char185 "
-Om 333,709 2 0272 ordmasculine
+Om 333,709 2 0272 -- ordmasculine
char186 "
-fc 331,428 0 0273 guilsinglright
-14 750,692,3 2 0274 onequarter
+fc 331,428 0 0273 -- guilsinglright
+14 750,692,3 2 0274 -- onequarter
char188 "
-12 750,692,3 2 0275 onehalf
+12 750,692,3 2 0275 -- onehalf
char189 "
-34 750,689,3 2 0276 threequarters
+34 750,689,3 2 0276 -- threequarters
char190 "
-r? 444,469,231 0 0277 questiondown
+r? 444,469,231 0 0277 -- questiondown
char191 "
-`A 778,908,3 2 0300 Agrave
+`A 778,908,3 2 0300 -- Agrave
char192 "
-'A 778,908,3 2 0301 Aacute
+'A 778,908,3 2 0301 -- Aacute
char193 "
-^A 778,908,3 2 0302 Acircumflex
+^A 778,908,3 2 0302 -- Acircumflex
char194 "
-~A 778,871,3 2 0303 Atilde
+~A 778,871,3 2 0303 -- Atilde
char195 "
-:A 778,868,3 2 0304 Adieresis
+:A 778,868,3 2 0304 -- Adieresis
char196 "
-oA 778,927,3 2 0305 Aring
+oA 778,927,3 2 0305 -- Aring
char197 "
-AE 944,692,3 2 0306 AE
+AE 944,692,3 2 0306 -- AE
char198 "
-,C 709,709,225 2 0307 Ccedilla
+,C 709,709,225 2 0307 -- Ccedilla
char199 "
-`E 611,908,3 2 0310 Egrave
+`E 611,908,3 2 0310 -- Egrave
char200 "
-'E 611,908,3 2 0311 Eacute
+'E 611,908,3 2 0311 -- Eacute
char201 "
-^E 611,908,3 2 0312 Ecircumflex
+^E 611,908,3 2 0312 -- Ecircumflex
char202 "
-:E 611,868,3 2 0313 Edieresis
+:E 611,868,3 2 0313 -- Edieresis
char203 "
-`I 337,908,3 2 0314 Igrave
+`I 337,908,3 2 0314 -- Igrave
char204 "
-'I 337,908,3 2 0315 Iacute
+'I 337,908,3 2 0315 -- Iacute
char205 "
-^I 337,908,3 2 0316 Icircumflex
+^I 337,908,3 2 0316 -- Icircumflex
char206 "
-:I 337,868,3 2 0317 Idieresis
+:I 337,868,3 2 0317 -- Idieresis
char207 "
--D 774,692,3 2 0320 Eth
+-D 774,692,3 2 0320 -- Eth
char208 "
-~N 831,871,20 2 0321 Ntilde
+~N 831,871,20 2 0321 -- Ntilde
char209 "
-`O 786,908,20 2 0322 Ograve
+`O 786,908,20 2 0322 -- Ograve
char210 "
-'O 786,908,20 2 0323 Oacute
+'O 786,908,20 2 0323 -- Oacute
char211 "
-^O 786,908,20 2 0324 Ocircumflex
+^O 786,908,20 2 0324 -- Ocircumflex
char212 "
-~O 786,883,20 2 0325 Otilde
+~O 786,883,20 2 0325 -- Otilde
char213 "
-:O 786,868,20 2 0326 Odieresis
+:O 786,868,20 2 0326 -- Odieresis
char214 "
-char215 606,474 0 0327 multiply
-/O 833,709,20 2 0330 Oslash
+char215 606,474 0 0327 -- multiply
+/O 833,709,20 2 0330 -- Oslash
char216 "
-`U 778,908,20 2 0331 Ugrave
+`U 778,908,20 2 0331 -- Ugrave
char217 "
-'U 778,908,20 2 0332 Uacute
+'U 778,908,20 2 0332 -- Uacute
char218 "
-^U 778,908,20 2 0333 Ucircumflex
+^U 778,908,20 2 0333 -- Ucircumflex
char219 "
-:U 778,868,20 2 0334 Udieresis
+:U 778,868,20 2 0334 -- Udieresis
char220 "
-'Y 667,908,3 2 0335 Yacute
+'Y 667,908,3 2 0335 -- Yacute
char221 "
-TP 604,692,3 2 0336 Thorn
+TP 604,692,3 2 0336 -- Thorn
char222 "
-ss 556,731,9 2 0337 germandbls
+ss 556,731,9 2 0337 -- germandbls
char223 "
-`a 500,697,12 2 0340 agrave
+`a 500,697,12 2 0340 -- agrave
char224 "
-'a 500,697,12 2 0341 aacute
+'a 500,697,12 2 0341 -- aacute
char225 "
-^a 500,697,12 2 0342 acircumflex
+^a 500,697,12 2 0342 -- acircumflex
char226 "
-~a 500,652,12 2 0343 atilde
+~a 500,652,12 2 0343 -- atilde
char227 "
-:a 500,657,12 2 0344 adieresis
+:a 500,657,12 2 0344 -- adieresis
char228 "
-oa 500,716,12 2 0345 aring
+oa 500,716,12 2 0345 -- aring
char229 "
-ae 758,469,20 0 0346 ae
+ae 758,469,20 0 0346 -- ae
char230 "
-,c 444,469,225 0 0347 ccedilla
+,c 444,469,225 0 0347 -- ccedilla
char231 "
-`e 479,697,20 2 0350 egrave
+`e 479,697,20 2 0350 -- egrave
char232 "
-'e 479,697,20 2 0351 eacute
+'e 479,697,20 2 0351 -- eacute
char233 "
-^e 479,697,20 2 0352 ecircumflex
+^e 479,697,20 2 0352 -- ecircumflex
char234 "
-:e 479,657,20 2 0353 edieresis
+:e 479,657,20 2 0353 -- edieresis
char235 "
-`i 287,697,3 2 0354 igrave
+`i 287,697,3 2 0354 -- igrave
char236 "
-'i 287,697,3 2 0355 iacute
+'i 287,697,3 2 0355 -- iacute
char237 "
-^i 287,697,3 2 0356 icircumflex
+^i 287,697,3 2 0356 -- icircumflex
char238 "
-:i 287,657,3 2 0357 idieresis
+:i 287,657,3 2 0357 -- idieresis
char239 "
-Sd 546,728,20 2 0360 eth
+Sd 546,728,20 2 0360 -- eth
char240 "
-~n 582,652,3 2 0361 ntilde
+~n 582,652,3 2 0361 -- ntilde
char241 "
-`o 546,697,20 2 0362 ograve
+`o 546,697,20 2 0362 -- ograve
char242 "
-'o 546,697,20 2 0363 oacute
+'o 546,697,20 2 0363 -- oacute
char243 "
-^o 546,697,20 2 0364 ocircumflex
+^o 546,697,20 2 0364 -- ocircumflex
char244 "
-~o 546,652,20 2 0365 otilde
+~o 546,652,20 2 0365 -- otilde
char245 "
-:o 546,657,20 2 0366 odieresis
+:o 546,657,20 2 0366 -- odieresis
char246 "
-char247 606,512 0 0367 divide
-/o 556,474,23 0 0370 oslash
+char247 606,512 0 0367 -- divide
+/o 556,474,23 0 0370 -- oslash
char248 "
-`u 603,697,12 2 0371 ugrave
+`u 603,697,12 2 0371 -- ugrave
char249 "
-'u 603,697,12 2 0372 uacute
+'u 603,697,12 2 0372 -- uacute
char250 "
-^u 603,697,12 2 0373 ucircumflex
+^u 603,697,12 2 0373 -- ucircumflex
char251 "
-:u 603,657,12 2 0374 udieresis
+:u 603,657,12 2 0374 -- udieresis
char252 "
-'y 556,697,283 3 0375 yacute
+'y 556,697,283 3 0375 -- yacute
char253 "
-Tp 601,726,281 3 0376 thorn
+Tp 601,726,281 3 0376 -- thorn
char254 "
-:y 556,657,283 3 0377 ydieresis
+:y 556,657,283 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/S b/contrib/groff/devps/S
index 56fbaaa7a897..3cf77d9da18f 100644
--- a/contrib/groff/devps/S
+++ b/contrib/groff/devps/S
@@ -4,224 +4,224 @@ 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
+! 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
+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
+, 250,104,152 3 0054 -- comma
+\- 549,288 3 0055 -- minus
mi "
-. 250,95,17 3 0056 period
-/ 278,646,18 3 0057 slash
+. 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
+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
+> 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
+3d 863,478 3 0134 -- therefore
tf "
-] 333,674,155 3 0135 bracketright
+] 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
+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
+*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
+ba 200,673,177 3 0174 -- bar
| "
-rC 480,673,183 3 0175 braceright
+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
+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
+-> 987,511,15 3 0256 -- arrowright
+da 603,888,22 3 0257 -- arrowdown
arrowvertbt "
-de 400,685 3 0260 degree
+de 400,685 3 0260 -- degree
char176 "
-char177 549,645 3 0261 plusminus
+char177 549,645 3 0261 -- plusminus
+- "
-sd 411,737 3 0262 second
->= 549,639 3 0263 greaterequal
-char215 549,524 3 0264 multiply
+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
+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
+!= 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
+--- 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
+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
+bracketleftex 384,925,75 3 0352 -- bracketleftex
+bracketleftbt 384,925,75 3 0353 -- bracketleftbt
lf "
-bracelefttp 494,925,75 3 0354 bracelefttp
+bracelefttp 494,925,75 3 0354 -- bracelefttp
lt "
-braceleftmid 494,925,75 3 0355 braceleftmid
+braceleftmid 494,925,75 3 0355 -- braceleftmid
lk "
-braceleftbt 494,925,75 3 0356 braceleftbt
+braceleftbt 494,925,75 3 0356 -- braceleftbt
lb "
-braceex 494,925,75 3 0357 braceex
+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
+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
+bracketrightex 384,925,75 3 0372 -- bracketrightex
+bracketrightbt 384,925,75 3 0373 -- bracketrightbt
rf "
-bracerighttp 494,925,75 3 0374 bracerighttp
+bracerighttp 494,925,75 3 0374 -- bracerighttp
rt "
-bracerightmid 494,925,75 3 0375 bracerightmid
+bracerightmid 494,925,75 3 0375 -- bracerightmid
rk "
-bracerightbt 494,925,75 3 0376 bracerightbt
+bracerightbt 494,925,75 3 0376 -- bracerightbt
rb "
diff --git a/contrib/groff/devps/SS b/contrib/groff/devps/SS
index 02b999c17b6d..933eb1c15837 100644
--- a/contrib/groff/devps/SS
+++ b/contrib/groff/devps/SS
@@ -5,190 +5,190 @@ 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
+--- 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
index 9dae3ad182ce..4d1fc8ca77d7 100644
--- a/contrib/groff/devps/TB
+++ b/contrib/groff/devps/TB
@@ -9,6 +9,7 @@ A w -90
A v -100
A u -50
A ' -74
+A cq -74
A p -25
A Y -100
A W -130
@@ -45,6 +46,7 @@ K e -25
K O -30
L y -55
L ' -110
+L cq -110
L rq -20
L Y -92
L W -92
@@ -141,10 +143,12 @@ 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
@@ -161,6 +165,7 @@ n v -40
o w -10
o v -10
. ' -55
+. cq -55
. rq -55
lq A -10
` ` -63
@@ -170,10 +175,17 @@ 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
@@ -200,334 +212,337 @@ 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
+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
-# 500,700 2 0043 numbersign
+! 333,691,13 2 0041 -- exclam
+" 555,691 2 0042 -- quotedbl
+dq "
+# 500,700 2 0043 -- numbersign
sh "
-$ 500,750,99 2 0044 dollar
+$ 500,750,99 2 0044 -- dollar
Do "
-% 1000,692,14 2 0045 percent
-& 833,691,16 2 0046 ampersand
-' 333,691 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 278,691,19 2 0134 -- backslash
rs "
-] 333,678,149 2 0135 bracketright
+] 333,678,149 2 0135 -- bracketright
rB "
-a^ 333,704 2 0136 circumflex
+a^ 333,704 2 0136 -- circumflex
^ "
-_ 500,0,125 0 0137 underscore
-` 333,691 2 0140 quoteleft
+_ 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
+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
+ba 220,691,19 2 0174 -- bar
| "
-rC 394,698,175 2 0175 braceright
+rC 394,698,175 2 0175 -- braceright
} "
-a~ 333,674 2 0176 tilde
+a~ 333,674 2 0176 -- tilde
~ "
-bq 333,155,180 0 0200 quotesinglbase
-Fo 500,415 0 0201 guillemotleft
+bq 333,155,180 0 0200 -- quotesinglbase
+Fo 500,415 0 0201 -- guillemotleft
char171 "
-Fc 500,415 0 0202 guillemotright
+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
+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
+ct 500,588,140 0 0242 -- cent
char162 "
-Po 500,684,14 2 0243 sterling
+Po 500,684,14 2 0243 -- sterling
char163 "
-Cs 500,613 0 0244 currency
+Cs 500,613 0 0244 -- currency
char164 "
-Ye 500,676 2 0245 yen
+Ye 500,676 2 0245 -- yen
char165 "
-bb 220,691,19 2 0246 brokenbar
+bb 220,691,19 2 0246 -- brokenbar
char166 "
-sc 500,691,132 2 0247 section
+sc 500,691,132 2 0247 -- section
char167 "
-ad 333,667 2 0250 dieresis
+ad 333,667 2 0250 -- dieresis
char168 "
-co 747,691,19 2 0251 copyright
+co 747,691,19 2 0251 -- copyright
char169 "
-Of 300,688 2 0252 ordfeminine
+Of 300,688 2 0252 -- ordfeminine
char170 "
-fo 333,415 0 0253 guilsinglleft
-no 570,399 0 0254 logicalnot
+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
+\- 570,297 0 0255 -- minus
+rg 747,691,19 2 0256 -- registered
char174 "
-a- 333,637 2 0257 macron
+a- 333,637 2 0257 -- macron
char175 "
-de 400,688 2 0260 degree
+de 400,688 2 0260 -- degree
char176 "
-char177 570,506 0 0261 plusminus
-S2 300,688 2 0262 twosuperior
+char177 570,506 0 0261 -- plusminus
+S2 300,688 2 0262 -- twosuperior
char178 "
-S3 300,688 2 0263 threesuperior
+S3 300,688 2 0263 -- threesuperior
char179 "
-aa 333,713 2 0264 acute
+aa 333,713 2 0264 -- acute
char180 "
-char181 556,461,206 1 0265 mu
-ps 540,676,186 2 0266 paragraph
+char181 556,461,206 1 0265 -- mu
+ps 540,676,186 2 0266 -- paragraph
char182 "
-char183 250,417 0 0267 periodcentered
-ac 333,0,218 1 0270 cedilla
+pc 250,417 0 0267 -- periodcentered
+char183 "
+ac 333,0,218 1 0270 -- cedilla
char184 "
-S1 300,688 2 0271 onesuperior
+S1 300,688 2 0271 -- onesuperior
char185 "
-Om 330,688 2 0272 ordmasculine
+Om 330,688 2 0272 -- ordmasculine
char186 "
-fc 333,415 0 0273 guilsinglright
-14 750,688,12 2 0274 onequarter
+fc 333,415 0 0273 -- guilsinglright
+14 750,688,12 2 0274 -- onequarter
char188 "
-12 750,688,12 2 0275 onehalf
+12 750,688,12 2 0275 -- onehalf
char189 "
-34 750,688,12 2 0276 threequarters
+34 750,688,12 2 0276 -- threequarters
char190 "
-r? 500,501,201 0 0277 questiondown
+r? 500,501,201 0 0277 -- questiondown
char191 "
-`A 722,923 2 0300 Agrave
+`A 722,923 2 0300 -- Agrave
char192 "
-'A 722,923 2 0301 Aacute
+'A 722,923 2 0301 -- Aacute
char193 "
-^A 722,914 2 0302 Acircumflex
+^A 722,914 2 0302 -- Acircumflex
char194 "
-~A 722,884 2 0303 Atilde
+~A 722,884 2 0303 -- Atilde
char195 "
-:A 722,877 2 0304 Adieresis
+:A 722,877 2 0304 -- Adieresis
char196 "
-oA 722,935 2 0305 Aring
+oA 722,935 2 0305 -- Aring
char197 "
-AE 1000,676 2 0306 AE
+AE 1000,676 2 0306 -- AE
char198 "
-,C 722,691,218 3 0307 Ccedilla
+,C 722,691,218 3 0307 -- Ccedilla
char199 "
-`E 667,923 2 0310 Egrave
+`E 667,923 2 0310 -- Egrave
char200 "
-'E 667,923 2 0311 Eacute
+'E 667,923 2 0311 -- Eacute
char201 "
-^E 667,914 2 0312 Ecircumflex
+^E 667,914 2 0312 -- Ecircumflex
char202 "
-:E 667,877 2 0313 Edieresis
+:E 667,877 2 0313 -- Edieresis
char203 "
-`I 389,923 2 0314 Igrave
+`I 389,923 2 0314 -- Igrave
char204 "
-'I 389,923 2 0315 Iacute
+'I 389,923 2 0315 -- Iacute
char205 "
-^I 389,914 2 0316 Icircumflex
+^I 389,914 2 0316 -- Icircumflex
char206 "
-:I 389,877 2 0317 Idieresis
+:I 389,877 2 0317 -- Idieresis
char207 "
--D 722,676 2 0320 Eth
+-D 722,676 2 0320 -- Eth
char208 "
-~N 722,884,18 2 0321 Ntilde
+~N 722,884,18 2 0321 -- Ntilde
char209 "
-`O 778,923,19 2 0322 Ograve
+`O 778,923,19 2 0322 -- Ograve
char210 "
-'O 778,923,19 2 0323 Oacute
+'O 778,923,19 2 0323 -- Oacute
char211 "
-^O 778,914,19 2 0324 Ocircumflex
+^O 778,914,19 2 0324 -- Ocircumflex
char212 "
-~O 778,884,19 2 0325 Otilde
+~O 778,884,19 2 0325 -- Otilde
char213 "
-:O 778,877,19 2 0326 Odieresis
+:O 778,877,19 2 0326 -- Odieresis
char214 "
-char215 570,490 0 0327 multiply
-/O 778,737,74 2 0330 Oslash
+char215 570,490 0 0327 -- multiply
+/O 778,737,74 2 0330 -- Oslash
char216 "
-`U 722,923,19 2 0331 Ugrave
+`U 722,923,19 2 0331 -- Ugrave
char217 "
-'U 722,923,19 2 0332 Uacute
+'U 722,923,19 2 0332 -- Uacute
char218 "
-^U 722,914,19 2 0333 Ucircumflex
+^U 722,914,19 2 0333 -- Ucircumflex
char219 "
-:U 722,877,19 2 0334 Udieresis
+:U 722,877,19 2 0334 -- Udieresis
char220 "
-'Y 722,928 2 0335 Yacute
+'Y 722,928 2 0335 -- Yacute
char221 "
-TP 611,676 2 0336 Thorn
+TP 611,676 2 0336 -- Thorn
char222 "
-ss 556,691,12 2 0337 germandbls
+ss 556,691,12 2 0337 -- germandbls
char223 "
-`a 500,713,14 2 0340 agrave
+`a 500,713,14 2 0340 -- agrave
char224 "
-'a 500,713,14 2 0341 aacute
+'a 500,713,14 2 0341 -- aacute
char225 "
-^a 500,704,14 2 0342 acircumflex
+^a 500,704,14 2 0342 -- acircumflex
char226 "
-~a 500,674,14 2 0343 atilde
+~a 500,674,14 2 0343 -- atilde
char227 "
-:a 500,667,14 2 0344 adieresis
+:a 500,667,14 2 0344 -- adieresis
char228 "
-oa 500,740,14 2 0345 aring
+oa 500,740,14 2 0345 -- aring
char229 "
-ae 722,473,14 0 0346 ae
+ae 722,473,14 0 0346 -- ae
char230 "
-,c 444,473,218 1 0347 ccedilla
+,c 444,473,218 1 0347 -- ccedilla
char231 "
-`e 444,713,14 2 0350 egrave
+`e 444,713,14 2 0350 -- egrave
char232 "
-'e 444,713,14 2 0351 eacute
+'e 444,713,14 2 0351 -- eacute
char233 "
-^e 444,704,14 2 0352 ecircumflex
+^e 444,704,14 2 0352 -- ecircumflex
char234 "
-:e 444,667,14 2 0353 edieresis
+:e 444,667,14 2 0353 -- edieresis
char235 "
-`i 278,713 2 0354 igrave
+`i 278,713 2 0354 -- igrave
char236 "
-'i 278,713 2 0355 iacute
+'i 278,713 2 0355 -- iacute
char237 "
-^i 278,704 2 0356 icircumflex
+^i 278,704 2 0356 -- icircumflex
char238 "
-:i 278,667 2 0357 idieresis
+:i 278,667 2 0357 -- idieresis
char239 "
-Sd 500,691,14 2 0360 eth
+Sd 500,691,14 2 0360 -- eth
char240 "
-~n 556,674 2 0361 ntilde
+~n 556,674 2 0361 -- ntilde
char241 "
-`o 500,713,14 2 0362 ograve
+`o 500,713,14 2 0362 -- ograve
char242 "
-'o 500,713,14 2 0363 oacute
+'o 500,713,14 2 0363 -- oacute
char243 "
-^o 500,704,14 2 0364 ocircumflex
+^o 500,704,14 2 0364 -- ocircumflex
char244 "
-~o 500,674,14 2 0365 otilde
+~o 500,674,14 2 0365 -- otilde
char245 "
-:o 500,667,14 2 0366 odieresis
+:o 500,667,14 2 0366 -- odieresis
char246 "
-char247 570,537,31 0 0367 divide
-/o 500,549,92 0 0370 oslash
+char247 570,537,31 0 0367 -- divide
+/o 500,549,92 0 0370 -- oslash
char248 "
-`u 556,713,14 2 0371 ugrave
+`u 556,713,14 2 0371 -- ugrave
char249 "
-'u 556,713,14 2 0372 uacute
+'u 556,713,14 2 0372 -- uacute
char250 "
-^u 556,704,14 2 0373 ucircumflex
+^u 556,704,14 2 0373 -- ucircumflex
char251 "
-:u 556,667,14 2 0374 udieresis
+:u 556,667,14 2 0374 -- udieresis
char252 "
-'y 500,713,205 3 0375 yacute
+'y 500,713,205 3 0375 -- yacute
char253 "
-Tp 556,676,205 3 0376 thorn
+Tp 556,676,205 3 0376 -- thorn
char254 "
-:y 500,667,205 3 0377 ydieresis
+:y 500,667,205 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/TBI b/contrib/groff/devps/TBI
index ba58a3af3725..a79efb7503ea 100644
--- a/contrib/groff/devps/TBI
+++ b/contrib/groff/devps/TBI
@@ -10,6 +10,7 @@ A w -74
A v -74
A u -30
A ' -74
+A cq -74
A Y -70
A W -100
A V -95
@@ -47,6 +48,7 @@ K e -25
K O -30
L y -37
L ' -55
+L cq -55
L Y -37
L W -37
L V -37
@@ -139,9 +141,11 @@ 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
@@ -156,17 +160,26 @@ 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
@@ -182,334 +195,337 @@ 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
+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
-# 500,700,0,83,83,83 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 278,685,18,51,51,51 2 0134 -- backslash
rs "
-] 333,674,157,60,106,60 2 0135 bracketright
+] 333,674,157,60,106,60 2 0135 -- bracketright
rB "
-a^ 333,690,0,84,10,84 2 0136 circumflex
+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
+_ 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
+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
+ba 220,685,18,0,-16 2 0174 -- bar
| "
-rC 348,686,187,4,179,4 2 0175 braceright
+rC 348,686,187,4,179,4 2 0175 -- braceright
} "
-a~ 333,655,0,124,2,99 2 0176 tilde
+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
+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
+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
+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
+ct 500,576,143,0,8 0 0242 -- cent
char162 "
-Po 500,683,12,60,82,60 2 0243 sterling
+Po 500,683,12,60,82,60 2 0243 -- sterling
char163 "
-Cs 500,586,0,76,76,76 0 0244 currency
+Cs 500,586,0,76,76,76 0 0244 -- currency
char164 "
-Ye 500,669,0,178,17,99 2 0245 yen
+Ye 500,669,0,178,17,99 2 0245 -- yen
char165 "
-bb 220,685,18,0,-16 2 0246 brokenbar
+bb 220,685,18,0,-16 2 0246 -- brokenbar
char166 "
-sc 500,685,143,9,14,9 2 0247 section
+sc 500,685,143,9,14,9 2 0247 -- section
char167 "
-ad 333,655,0,114,-5,99 2 0250 dieresis
+ad 333,655,0,114,-5,99 2 0250 -- dieresis
char168 "
-co 747,685,18,21,20,21 2 0251 copyright
+co 747,685,18,21,20,21 2 0251 -- copyright
char169 "
-Of 266,685,0,114,34,99 2 0252 ordfeminine
+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
+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
+\- 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
+a- 333,623,0,110,-1,99 2 0257 -- macron
char175 "
-de 400,683,0,19,-33,19 2 0260 degree
+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
+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
+S3 300,683,0,71,33,71 2 0263 -- threesuperior
char179 "
-aa 333,697,0,96,-89,96 2 0264 acute
+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
+char181 576,449,207,0,110 1 0265 -- mu
+ps 500,669,193,112,107,99 2 0266 -- paragraph
char182 "
-char183 250,405,0,0,-1 0 0267 periodcentered
-ac 333,5,218,0,130 1 0270 cedilla
+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
+S1 300,683,0,51,20,51 2 0271 -- onesuperior
char185 "
-Om 300,685,0,97,-6,97 2 0272 ordmasculine
+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
+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
+12 750,683,14,23,59,23 2 0275 -- onehalf
char189 "
-34 750,683,14,26,43,26 2 0276 threequarters
+34 750,683,14,26,43,26 2 0276 -- threequarters
char190 "
-r? 500,492,205,0,20 1 0277 questiondown
+r? 500,492,205,0,20 1 0277 -- questiondown
char191 "
-`A 667,904,0,0,117 2 0300 Agrave
+`A 667,904,0,0,117 2 0300 -- Agrave
char192 "
-'A 667,904,0,0,117 2 0301 Aacute
+'A 667,904,0,0,117 2 0301 -- Aacute
char193 "
-^A 667,897,0,0,117 2 0302 Acircumflex
+^A 667,897,0,0,117 2 0302 -- Acircumflex
char194 "
-~A 667,862,0,0,117 2 0303 Atilde
+~A 667,862,0,0,117 2 0303 -- Atilde
char195 "
-:A 667,862,0,0,117 2 0304 Adieresis
+:A 667,862,0,0,117 2 0304 -- Adieresis
char196 "
-oA 667,921,0,0,117 2 0305 Aring
+oA 667,921,0,0,117 2 0305 -- Aring
char197 "
-AE 944,669,0,24,114,24 2 0306 AE
+AE 944,669,0,24,114,24 2 0306 -- AE
char198 "
-,C 667,685,218,60,18,60 3 0307 Ccedilla
+,C 667,685,218,60,18,60 3 0307 -- Ccedilla
char199 "
-`E 667,904,0,36,77,36 2 0310 Egrave
+`E 667,904,0,36,77,36 2 0310 -- Egrave
char200 "
-'E 667,904,0,36,77,36 2 0311 Eacute
+'E 667,904,0,36,77,36 2 0311 -- Eacute
char201 "
-^E 667,897,0,36,77,36 2 0312 Ecircumflex
+^E 667,897,0,36,77,36 2 0312 -- Ecircumflex
char202 "
-:E 667,862,0,36,77,36 2 0313 Edieresis
+:E 667,862,0,36,77,36 2 0313 -- Edieresis
char203 "
-`I 389,904,0,67,82,67 2 0314 Igrave
+`I 389,904,0,67,82,67 2 0314 -- Igrave
char204 "
-'I 389,904,0,73,82,73 2 0315 Iacute
+'I 389,904,0,73,82,73 2 0315 -- Iacute
char205 "
-^I 389,897,0,81,82,81 2 0316 Icircumflex
+^I 389,897,0,81,82,81 2 0316 -- Icircumflex
char206 "
-:I 389,862,0,106,82,99 2 0317 Idieresis
+:I 389,862,0,106,82,99 2 0317 -- Idieresis
char207 "
--D 722,669,0,28,81,28 2 0320 Eth
+-D 722,669,0,28,81,28 2 0320 -- Eth
char208 "
-~N 722,862,15,76,77,76 2 0321 Ntilde
+~N 722,862,15,76,77,76 2 0321 -- Ntilde
char209 "
-`O 722,904,18,19,23,19 2 0322 Ograve
+`O 722,904,18,19,23,19 2 0322 -- Ograve
char210 "
-'O 722,904,18,19,23,19 2 0323 Oacute
+'O 722,904,18,19,23,19 2 0323 -- Oacute
char211 "
-^O 722,897,18,19,23,19 2 0324 Ocircumflex
+^O 722,897,18,19,23,19 2 0324 -- Ocircumflex
char212 "
-~O 722,862,18,19,23,19 2 0325 Otilde
+~O 722,862,18,19,23,19 2 0325 -- Otilde
char213 "
-:O 722,862,18,19,23,19 2 0326 Odieresis
+: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
+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
+`U 722,904,18,72,-17,72 2 0331 -- Ugrave
char217 "
-'U 722,904,18,72,-17,72 2 0332 Uacute
+'U 722,904,18,72,-17,72 2 0332 -- Uacute
char218 "
-^U 722,897,18,72,-17,72 2 0333 Ucircumflex
+^U 722,897,18,72,-17,72 2 0333 -- Ucircumflex
char219 "
-:U 722,862,18,72,-17,72 2 0334 Udieresis
+:U 722,862,18,72,-17,72 2 0334 -- Udieresis
char220 "
-'Y 611,904,0,98,-23,98 2 0335 Yacute
+'Y 611,904,0,98,-23,98 2 0335 -- Yacute
char221 "
-TP 611,669,0,12,77,12 2 0336 Thorn
+TP 611,669,0,12,77,12 2 0336 -- Thorn
char222 "
-ss 500,705,200,23,250,23 2 0337 germandbls
+ss 500,705,200,23,250,23 2 0337 -- germandbls
char223 "
-`a 500,697,14,5,71,5 2 0340 agrave
+`a 500,697,14,5,71,5 2 0340 -- agrave
char224 "
-'a 500,697,14,13,71,13 2 0341 aacute
+'a 500,697,14,13,71,13 2 0341 -- aacute
char225 "
-^a 500,690,14,5,71,5 2 0342 acircumflex
+^a 500,690,14,5,71,5 2 0342 -- acircumflex
char226 "
-~a 500,655,14,41,71,41 2 0343 atilde
+~a 500,655,14,41,71,41 2 0343 -- atilde
char227 "
-:a 500,655,14,21,71,21 2 0344 adieresis
+:a 500,655,14,21,71,21 2 0344 -- adieresis
char228 "
-oa 500,729,14,5,71,5 2 0345 aring
+oa 500,729,14,5,71,5 2 0345 -- aring
char229 "
-ae 722,462,13,1,55,1 0 0346 ae
+ae 722,462,13,1,55,1 0 0346 -- ae
char230 "
-,c 444,462,218,0,74 1 0347 ccedilla
+,c 444,462,218,0,74 1 0347 -- ccedilla
char231 "
-`e 444,697,13,4,45,4 2 0350 egrave
+`e 444,697,13,4,45,4 2 0350 -- egrave
char232 "
-'e 444,697,13,41,45,41 2 0351 eacute
+'e 444,697,13,41,45,41 2 0351 -- eacute
char233 "
-^e 444,690,13,29,45,29 2 0352 ecircumflex
+^e 444,690,13,29,45,29 2 0352 -- ecircumflex
char234 "
-:e 444,655,13,49,45,49 2 0353 edieresis
+:e 444,655,13,49,45,49 2 0353 -- edieresis
char235 "
-`i 278,697,9,32,48,32 2 0354 igrave
+`i 278,697,9,32,48,32 2 0354 -- igrave
char236 "
-'i 278,697,9,124,48,99 2 0355 iacute
+'i 278,697,9,124,48,99 2 0355 -- iacute
char237 "
-^i 278,690,9,97,52,97 2 0356 icircumflex
+^i 278,690,9,97,52,97 2 0356 -- icircumflex
char238 "
-:i 278,655,9,132,48,99 2 0357 idieresis
+:i 278,655,9,132,48,99 2 0357 -- idieresis
char239 "
-Sd 500,699,13,4,53,4 2 0360 eth
+Sd 500,699,13,4,53,4 2 0360 -- eth
char240 "
-~n 556,655,9,0,56 2 0361 ntilde
+~n 556,655,9,0,56 2 0361 -- ntilde
char241 "
-`o 500,697,13,0,53 2 0362 ograve
+`o 500,697,13,0,53 2 0362 -- ograve
char242 "
-'o 500,697,13,13,53,13 2 0363 oacute
+'o 500,697,13,13,53,13 2 0363 -- oacute
char243 "
-^o 500,690,13,1,53,1 2 0364 ocircumflex
+^o 500,690,13,1,53,1 2 0364 -- ocircumflex
char244 "
-~o 500,655,13,41,53,41 2 0365 otilde
+~o 500,655,13,41,53,41 2 0365 -- otilde
char245 "
-:o 500,655,13,16,53,16 2 0366 odieresis
+: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
+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
+`u 556,697,9,0,35 2 0371 -- ugrave
char249 "
-'u 556,697,9,0,35 2 0372 uacute
+'u 556,697,9,0,35 2 0372 -- uacute
char250 "
-^u 556,690,9,0,35 2 0373 ucircumflex
+^u 556,690,9,0,35 2 0373 -- ucircumflex
char251 "
-:u 556,655,9,0,35 2 0374 udieresis
+:u 556,655,9,0,35 2 0374 -- udieresis
char252 "
-'y 444,697,205,41,144,41 3 0375 yacute
+'y 444,697,205,41,144,41 3 0375 -- yacute
char253 "
-Tp 500,699,205,0,170 3 0376 thorn
+Tp 500,699,205,0,170 3 0376 -- thorn
char254 "
-:y 444,655,205,44,144,44 3 0377 ydieresis
+:y 444,655,205,44,144,44 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/TI b/contrib/groff/devps/TI
index 156cba79677a..992089d96037 100644
--- a/contrib/groff/devps/TI
+++ b/contrib/groff/devps/TI
@@ -10,6 +10,7 @@ A w -55
A v -55
A u -20
A ' -37
+A cq -37
A Y -55
A W -95
A V -105
@@ -47,6 +48,7 @@ K e -35
K O -50
L y -30
L ' -37
+L cq -37
L Y -20
L W -55
L V -55
@@ -139,6 +141,7 @@ b . -40
c k -20
c h -15
, ' -140
+, cq -140
, rq -140
e y -30
e x -20
@@ -148,6 +151,7 @@ e . -15
e g -40
e , -10
f ' 92
+f cq 92
f . -15
f i -20
f f -18
@@ -164,17 +168,26 @@ 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
@@ -195,334 +208,337 @@ 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
+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
-# 500,676,0,90,48,43 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 278,666,18,91,91,43 2 0134 -- backslash
rs "
-] 389,663,153,43,38,43 2 0135 bracketright
+] 389,663,153,43,38,43 2 0135 -- bracketright
rB "
-a^ 333,661,0,102,-41,43 2 0136 circumflex
+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
+_ 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
+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
+ba 275,666,18,0,-55 2 0174 -- bar
| "
-rC 400,687,177,0,57 2 0175 braceright
+rC 400,687,177,0,57 2 0175 -- braceright
} "
-a~ 333,624,0,144,-50,43 2 0176 tilde
+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
+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
+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
+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
+ct 500,560,143,22,-27,22 2 0242 -- cent
char162 "
-Po 500,670,6,67,40,43 2 0243 sterling
+Po 500,670,6,67,40,43 2 0243 -- sterling
char163 "
-Cs 500,597,0,72,72,43 2 0244 currency
+Cs 500,597,0,72,72,43 2 0244 -- currency
char164 "
-Ye 500,653,0,153,23,43 2 0245 yen
+Ye 500,653,0,153,23,43 2 0245 -- yen
char165 "
-bb 275,666,18,0,-55 2 0246 brokenbar
+bb 275,666,18,0,-55 2 0246 -- brokenbar
char166 "
-sc 500,666,162,11,-3,11 2 0247 section
+sc 500,666,162,11,-3,11 2 0247 -- section
char167 "
-ad 333,606,0,122,-57,43 2 0250 dieresis
+ad 333,606,0,122,-57,43 2 0250 -- dieresis
char168 "
-co 760,666,18,9,9,9 2 0251 copyright
+co 760,666,18,9,9,9 2 0251 -- copyright
char169 "
-Of 276,676,0,126,8,43 2 0252 ordfeminine
+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
+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
+\- 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
+a- 333,583,0,128,-49,43 2 0257 -- macron
char175 "
-de 400,676,0,37,-51,37 2 0260 degree
+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
+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
+S3 300,676,0,89,7,43 2 0263 -- threesuperior
char179 "
-aa 333,664,0,120,-130,43 2 0264 acute
+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
+char181 500,428,209,47,80,43 1 0265 -- mu
+ps 523,653,123,143,-5,43 2 0266 -- paragraph
char182 "
-char183 250,310,0,0,-20 0 0267 periodcentered
-ac 333,0,217,0,80 1 0270 cedilla
+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
+S1 300,676,0,34,7,34 2 0271 -- onesuperior
char185 "
-Om 310,676,0,102,-17,43 2 0272 ordmasculine
+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
+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
+12 750,676,10,49,16,43 2 0275 -- onehalf
char189 "
-34 750,676,10,36,27,36 2 0276 threequarters
+34 750,676,10,36,27,36 2 0276 -- threequarters
char190 "
-r? 500,471,205,0,22 1 0277 questiondown
+r? 500,471,205,0,22 1 0277 -- questiondown
char191 "
-`A 611,876,0,3,101,3 2 0300 Agrave
+`A 611,876,0,3,101,3 2 0300 -- Agrave
char192 "
-'A 611,876,0,3,101,3 2 0301 Aacute
+'A 611,876,0,3,101,3 2 0301 -- Aacute
char193 "
-^A 611,873,0,3,101,3 2 0302 Acircumflex
+^A 611,873,0,3,101,3 2 0302 -- Acircumflex
char194 "
-~A 611,836,0,5,101,5 2 0303 Atilde
+~A 611,836,0,5,101,5 2 0303 -- Atilde
char195 "
-:A 611,818,0,3,101,3 2 0304 Adieresis
+:A 611,818,0,3,101,3 2 0304 -- Adieresis
char196 "
-oA 611,883,0,3,101,3 2 0305 Aring
+oA 611,883,0,3,101,3 2 0305 -- Aring
char197 "
-AE 889,653,0,72,77,43 2 0306 AE
+AE 889,653,0,72,77,43 2 0306 -- AE
char198 "
-,C 667,666,217,72,-16,43 3 0307 Ccedilla
+,C 667,666,217,72,-16,43 3 0307 -- Ccedilla
char199 "
-`E 611,876,0,73,51,43 2 0310 Egrave
+`E 611,876,0,73,51,43 2 0310 -- Egrave
char200 "
-'E 611,876,0,73,51,43 2 0311 Eacute
+'E 611,876,0,73,51,43 2 0311 -- Eacute
char201 "
-^E 611,873,0,73,51,43 2 0312 Ecircumflex
+^E 611,873,0,73,51,43 2 0312 -- Ecircumflex
char202 "
-:E 611,818,0,73,51,43 2 0313 Edieresis
+:E 611,818,0,73,51,43 2 0313 -- Edieresis
char203 "
-`I 333,876,0,101,58,43 2 0314 Igrave
+`I 333,876,0,101,58,43 2 0314 -- Igrave
char204 "
-'I 333,876,0,130,58,43 2 0315 Iacute
+'I 333,876,0,130,58,43 2 0315 -- Iacute
char205 "
-^I 333,873,0,142,58,43 2 0316 Icircumflex
+^I 333,873,0,142,58,43 2 0316 -- Icircumflex
char206 "
-:I 333,818,0,152,58,43 2 0317 Idieresis
+:I 333,818,0,152,58,43 2 0317 -- Idieresis
char207 "
--D 722,653,0,28,58,28 2 0320 Eth
+-D 722,653,0,28,58,28 2 0320 -- Eth
char208 "
-~N 667,836,15,110,70,43 2 0321 Ntilde
+~N 667,836,15,110,70,43 2 0321 -- Ntilde
char209 "
-`O 722,876,18,27,-10,27 2 0322 Ograve
+`O 722,876,18,27,-10,27 2 0322 -- Ograve
char210 "
-'O 722,876,18,27,-10,27 2 0323 Oacute
+'O 722,876,18,27,-10,27 2 0323 -- Oacute
char211 "
-^O 722,873,18,27,-10,27 2 0324 Ocircumflex
+^O 722,873,18,27,-10,27 2 0324 -- Ocircumflex
char212 "
-~O 722,836,18,27,-10,27 2 0325 Otilde
+~O 722,836,18,27,-10,27 2 0325 -- Otilde
char213 "
-:O 722,818,18,27,-10,27 2 0326 Odieresis
+: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
+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
+`U 722,876,18,93,-52,43 2 0331 -- Ugrave
char217 "
-'U 722,876,18,93,-52,43 2 0332 Uacute
+'U 722,876,18,93,-52,43 2 0332 -- Uacute
char218 "
-^U 722,873,18,93,-52,43 2 0333 Ucircumflex
+^U 722,873,18,93,-52,43 2 0333 -- Ucircumflex
char219 "
-:U 722,818,18,93,-52,43 2 0334 Udieresis
+:U 722,818,18,93,-52,43 2 0334 -- Udieresis
char220 "
-'Y 556,876,0,127,-28,43 2 0335 Yacute
+'Y 556,876,0,127,-28,43 2 0335 -- Yacute
char221 "
-TP 611,653,0,8,50,8 2 0336 Thorn
+TP 611,653,0,8,50,8 2 0336 -- Thorn
char222 "
-ss 500,679,207,43,218,43 3 0337 germandbls
+ss 500,679,207,43,218,43 3 0337 -- germandbls
char223 "
-`a 500,664,11,26,33,26 2 0340 agrave
+`a 500,664,11,26,33,26 2 0340 -- agrave
char224 "
-'a 500,664,11,37,33,37 2 0341 aacute
+'a 500,664,11,37,33,37 2 0341 -- aacute
char225 "
-^a 500,661,11,26,33,26 2 0342 acircumflex
+^a 500,661,11,26,33,26 2 0342 -- acircumflex
char226 "
-~a 500,624,11,61,33,43 2 0343 atilde
+~a 500,624,11,61,33,43 2 0343 -- atilde
char227 "
-:a 500,606,11,39,33,39 2 0344 adieresis
+:a 500,606,11,39,33,39 2 0344 -- adieresis
char228 "
-oa 500,691,11,26,33,26 2 0345 aring
+oa 500,691,11,26,33,26 2 0345 -- aring
char229 "
-ae 667,441,11,23,27,23 0 0346 ae
+ae 667,441,11,23,27,23 0 0346 -- ae
char230 "
-,c 444,441,217,31,24,31 1 0347 ccedilla
+,c 444,441,217,31,24,31 1 0347 -- ccedilla
char231 "
-`e 444,664,11,18,19,18 2 0350 egrave
+`e 444,664,11,18,19,18 2 0350 -- egrave
char232 "
-'e 444,664,11,65,19,43 2 0351 eacute
+'e 444,664,11,65,19,43 2 0351 -- eacute
char233 "
-^e 444,661,11,47,19,43 2 0352 ecircumflex
+^e 444,661,11,47,19,43 2 0352 -- ecircumflex
char234 "
-:e 444,606,11,57,19,43 2 0353 edieresis
+:e 444,606,11,57,19,43 2 0353 -- edieresis
char235 "
-`i 278,664,11,56,1,43 2 0354 igrave
+`i 278,664,11,56,1,43 2 0354 -- igrave
char236 "
-'i 278,664,11,128,1,43 2 0355 iacute
+'i 278,664,11,128,1,43 2 0355 -- iacute
char237 "
-^i 278,661,11,100,16,43 2 0356 icircumflex
+^i 278,661,11,100,16,43 2 0356 -- icircumflex
char238 "
-:i 278,606,11,125,1,43 2 0357 idieresis
+:i 278,606,11,125,1,43 2 0357 -- idieresis
char239 "
-Sd 500,683,11,32,23,32 2 0360 eth
+Sd 500,683,11,32,23,32 2 0360 -- eth
char240 "
-~n 500,624,9,26,36,26 2 0361 ntilde
+~n 500,624,9,26,36,26 2 0361 -- ntilde
char241 "
-`o 500,664,11,18,23,18 2 0362 ograve
+`o 500,664,11,18,23,18 2 0362 -- ograve
char242 "
-'o 500,664,11,37,23,37 2 0363 oacute
+'o 500,664,11,37,23,37 2 0363 -- oacute
char243 "
-^o 500,661,11,18,23,18 2 0364 ocircumflex
+^o 500,661,11,18,23,18 2 0364 -- ocircumflex
char244 "
-~o 500,624,11,46,23,43 2 0365 otilde
+~o 500,624,11,46,23,43 2 0365 -- otilde
char245 "
-:o 500,606,11,39,23,39 2 0366 odieresis
+: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
+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
+`u 500,664,11,25,8,25 2 0371 -- ugrave
char249 "
-'u 500,664,11,27,8,27 2 0372 uacute
+'u 500,664,11,27,8,27 2 0372 -- uacute
char250 "
-^u 500,661,11,25,8,25 2 0373 ucircumflex
+^u 500,661,11,25,8,25 2 0373 -- ucircumflex
char251 "
-:u 500,606,11,29,8,29 2 0374 udieresis
+:u 500,606,11,29,8,29 2 0374 -- udieresis
char252 "
-'y 444,664,206,65,74,43 3 0375 yacute
+'y 444,664,206,65,74,43 3 0375 -- yacute
char253 "
-Tp 500,683,205,19,125,19 3 0376 thorn
+Tp 500,683,205,19,125,19 3 0376 -- thorn
char254 "
-:y 444,606,206,47,74,43 3 0377 ydieresis
+:y 444,606,206,47,74,43 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/TR b/contrib/groff/devps/TR
index 25232c6d1add..6b98075d5cb1 100644
--- a/contrib/groff/devps/TR
+++ b/contrib/groff/devps/TR
@@ -8,6 +8,7 @@ A y -92
A w -92
A v -74
A ' -111
+A cq -111
A Y -105
A W -90
A V -135
@@ -36,6 +37,7 @@ K e -25
K O -30
L y -55
L ' -92
+L cq -92
L Y -100
L W -74
L V -100
@@ -127,6 +129,7 @@ b u -20
b . -40
c y -15
, ' -70
+, cq -70
, rq -70
e y -15
e x -15
@@ -134,6 +137,7 @@ e w -25
e v -25
e g -15
f ' 55
+f cq 55
f i -20
f f -25
f .i -50
@@ -152,6 +156,7 @@ o w -25
o v -15
p y -10
. ' -70
+. cq -70
. rq -70
lq A -80
` ` -74
@@ -161,12 +166,21 @@ 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
@@ -186,334 +200,337 @@ 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
+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
-# 500,662 2 0043 numbersign
+! 333,676,9 2 0041 -- exclam
+" 408,676 2 0042 -- quotedbl
+dq "
+# 500,662 2 0043 -- numbersign
sh "
-$ 500,727,87 2 0044 dollar
+$ 500,727,87 2 0044 -- dollar
Do "
-% 833,676,13 2 0045 percent
-& 778,676,13 2 0046 ampersand
-' 333,676 2 0047 quoteright
-( 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
+% 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
+. 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
+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
+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
+\ 278,676,14 2 0134 -- backslash
rs "
-] 333,662,156 2 0135 bracketright
+] 333,662,156 2 0135 -- bracketright
rB "
-a^ 333,674 2 0136 circumflex
+a^ 333,674 2 0136 -- circumflex
^ "
-_ 500,0,125 0 0137 underscore
-` 333,676 2 0140 quoteleft
+_ 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
+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
+ba 200,676,14 2 0174 -- bar
| "
-rC 480,680,181 2 0175 braceright
+rC 480,680,181 2 0175 -- braceright
} "
-a~ 333,638 2 0176 tilde
+a~ 333,638 2 0176 -- tilde
~ "
-bq 333,102,141 0 0200 quotesinglbase
-Fo 500,416 0 0201 guillemotleft
+bq 333,102,141 0 0200 -- quotesinglbase
+Fo 500,416 0 0201 -- guillemotleft
char171 "
-Fc 500,416 0 0202 guillemotright
+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
+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
+ct 500,579,138 2 0242 -- cent
char162 "
-Po 500,676,8 2 0243 sterling
+Po 500,676,8 2 0243 -- sterling
char163 "
-Cs 500,602 2 0244 currency
+Cs 500,602 2 0244 -- currency
char164 "
-Ye 500,662 2 0245 yen
+Ye 500,662 2 0245 -- yen
char165 "
-bb 200,676,14 2 0246 brokenbar
+bb 200,676,14 2 0246 -- brokenbar
char166 "
-sc 500,676,148 2 0247 section
+sc 500,676,148 2 0247 -- section
char167 "
-ad 333,623 2 0250 dieresis
+ad 333,623 2 0250 -- dieresis
char168 "
-co 760,676,14 2 0251 copyright
+co 760,676,14 2 0251 -- copyright
char169 "
-Of 276,676 2 0252 ordfeminine
+Of 276,676 2 0252 -- ordfeminine
char170 "
-fo 333,416 0 0253 guilsinglleft
-no 564,386 0 0254 logicalnot
+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
+\- 564,286 0 0255 -- minus
+rg 760,676,14 2 0256 -- registered
char174 "
-a- 333,601 2 0257 macron
+a- 333,601 2 0257 -- macron
char175 "
-de 400,676 2 0260 degree
+de 400,676 2 0260 -- degree
char176 "
-char177 564,506 0 0261 plusminus
-S2 300,676 2 0262 twosuperior
+char177 564,506 0 0261 -- plusminus
+S2 300,676 2 0262 -- twosuperior
char178 "
-S3 300,676 2 0263 threesuperior
+S3 300,676 2 0263 -- threesuperior
char179 "
-aa 333,678 2 0264 acute
+aa 333,678 2 0264 -- acute
char180 "
-char181 500,450,218 1 0265 mu
-ps 453,662,154 2 0266 paragraph
+char181 500,450,218 1 0265 -- mu
+ps 453,662,154 2 0266 -- paragraph
char182 "
-char183 250,310 0 0267 periodcentered
-ac 333,0,215 0 0270 cedilla
+pc 250,310 0 0267 -- periodcentered
+char183 "
+ac 333,0,215 0 0270 -- cedilla
char184 "
-S1 300,676 2 0271 onesuperior
+S1 300,676 2 0271 -- onesuperior
char185 "
-Om 310,676 2 0272 ordmasculine
+Om 310,676 2 0272 -- ordmasculine
char186 "
-fc 333,416 0 0273 guilsinglright
-14 750,676,14 2 0274 onequarter
+fc 333,416 0 0273 -- guilsinglright
+14 750,676,14 2 0274 -- onequarter
char188 "
-12 750,676,14 2 0275 onehalf
+12 750,676,14 2 0275 -- onehalf
char189 "
-34 750,676,14 2 0276 threequarters
+34 750,676,14 2 0276 -- threequarters
char190 "
-r? 444,466,218 1 0277 questiondown
+r? 444,466,218 1 0277 -- questiondown
char191 "
-`A 722,890 2 0300 Agrave
+`A 722,890 2 0300 -- Agrave
char192 "
-'A 722,890 2 0301 Aacute
+'A 722,890 2 0301 -- Aacute
char193 "
-^A 722,886 2 0302 Acircumflex
+^A 722,886 2 0302 -- Acircumflex
char194 "
-~A 722,850 2 0303 Atilde
+~A 722,850 2 0303 -- Atilde
char195 "
-:A 722,835 2 0304 Adieresis
+:A 722,835 2 0304 -- Adieresis
char196 "
-oA 722,898 2 0305 Aring
+oA 722,898 2 0305 -- Aring
char197 "
-AE 889,662 2 0306 AE
+AE 889,662 2 0306 -- AE
char198 "
-,C 667,676,215 2 0307 Ccedilla
+,C 667,676,215 2 0307 -- Ccedilla
char199 "
-`E 611,890 2 0310 Egrave
+`E 611,890 2 0310 -- Egrave
char200 "
-'E 611,890 2 0311 Eacute
+'E 611,890 2 0311 -- Eacute
char201 "
-^E 611,886 2 0312 Ecircumflex
+^E 611,886 2 0312 -- Ecircumflex
char202 "
-:E 611,835 2 0313 Edieresis
+:E 611,835 2 0313 -- Edieresis
char203 "
-`I 333,890 2 0314 Igrave
+`I 333,890 2 0314 -- Igrave
char204 "
-'I 333,890 2 0315 Iacute
+'I 333,890 2 0315 -- Iacute
char205 "
-^I 333,886 2 0316 Icircumflex
+^I 333,886 2 0316 -- Icircumflex
char206 "
-:I 333,835 2 0317 Idieresis
+:I 333,835 2 0317 -- Idieresis
char207 "
--D 722,662 2 0320 Eth
+-D 722,662 2 0320 -- Eth
char208 "
-~N 722,850,11 2 0321 Ntilde
+~N 722,850,11 2 0321 -- Ntilde
char209 "
-`O 722,890,14 2 0322 Ograve
+`O 722,890,14 2 0322 -- Ograve
char210 "
-'O 722,890,14 2 0323 Oacute
+'O 722,890,14 2 0323 -- Oacute
char211 "
-^O 722,886,14 2 0324 Ocircumflex
+^O 722,886,14 2 0324 -- Ocircumflex
char212 "
-~O 722,850,14 2 0325 Otilde
+~O 722,850,14 2 0325 -- Otilde
char213 "
-:O 722,835,14 2 0326 Odieresis
+:O 722,835,14 2 0326 -- Odieresis
char214 "
-char215 564,497 0 0327 multiply
-/O 722,734,80 2 0330 Oslash
+char215 564,497 0 0327 -- multiply
+/O 722,734,80 2 0330 -- Oslash
char216 "
-`U 722,890,14 2 0331 Ugrave
+`U 722,890,14 2 0331 -- Ugrave
char217 "
-'U 722,890,14 2 0332 Uacute
+'U 722,890,14 2 0332 -- Uacute
char218 "
-^U 722,886,14 2 0333 Ucircumflex
+^U 722,886,14 2 0333 -- Ucircumflex
char219 "
-:U 722,835,14 2 0334 Udieresis
+:U 722,835,14 2 0334 -- Udieresis
char220 "
-'Y 722,890 2 0335 Yacute
+'Y 722,890 2 0335 -- Yacute
char221 "
-TP 556,662 2 0336 Thorn
+TP 556,662 2 0336 -- Thorn
char222 "
-ss 500,683,9 2 0337 germandbls
+ss 500,683,9 2 0337 -- germandbls
char223 "
-`a 444,678,10 2 0340 agrave
+`a 444,678,10 2 0340 -- agrave
char224 "
-'a 444,678,10 2 0341 aacute
+'a 444,678,10 2 0341 -- aacute
char225 "
-^a 444,674,10 2 0342 acircumflex
+^a 444,674,10 2 0342 -- acircumflex
char226 "
-~a 444,638,10 2 0343 atilde
+~a 444,638,10 2 0343 -- atilde
char227 "
-:a 444,623,10 2 0344 adieresis
+:a 444,623,10 2 0344 -- adieresis
char228 "
-oa 444,711,10 2 0345 aring
+oa 444,711,10 2 0345 -- aring
char229 "
-ae 667,460,10 0 0346 ae
+ae 667,460,10 0 0346 -- ae
char230 "
-,c 444,460,215 0 0347 ccedilla
+,c 444,460,215 0 0347 -- ccedilla
char231 "
-`e 444,678,10 2 0350 egrave
+`e 444,678,10 2 0350 -- egrave
char232 "
-'e 444,678,10 2 0351 eacute
+'e 444,678,10 2 0351 -- eacute
char233 "
-^e 444,674,10 2 0352 ecircumflex
+^e 444,674,10 2 0352 -- ecircumflex
char234 "
-:e 444,623,10 2 0353 edieresis
+:e 444,623,10 2 0353 -- edieresis
char235 "
-`i 278,678 2 0354 igrave
+`i 278,678 2 0354 -- igrave
char236 "
-'i 278,678 2 0355 iacute
+'i 278,678 2 0355 -- iacute
char237 "
-^i 278,674 2 0356 icircumflex
+^i 278,674 2 0356 -- icircumflex
char238 "
-:i 278,623 2 0357 idieresis
+:i 278,623 2 0357 -- idieresis
char239 "
-Sd 500,686,10 2 0360 eth
+Sd 500,686,10 2 0360 -- eth
char240 "
-~n 500,638 2 0361 ntilde
+~n 500,638 2 0361 -- ntilde
char241 "
-`o 500,678,10 2 0362 ograve
+`o 500,678,10 2 0362 -- ograve
char242 "
-'o 500,678,10 2 0363 oacute
+'o 500,678,10 2 0363 -- oacute
char243 "
-^o 500,674,10 2 0364 ocircumflex
+^o 500,674,10 2 0364 -- ocircumflex
char244 "
-~o 500,638,10 2 0365 otilde
+~o 500,638,10 2 0365 -- otilde
char245 "
-:o 500,623,10 2 0366 odieresis
+:o 500,623,10 2 0366 -- odieresis
char246 "
-char247 564,516,10 0 0367 divide
-/o 500,551,112 0 0370 oslash
+char247 564,516,10 0 0367 -- divide
+/o 500,551,112 0 0370 -- oslash
char248 "
-`u 500,678,10 2 0371 ugrave
+`u 500,678,10 2 0371 -- ugrave
char249 "
-'u 500,678,10 2 0372 uacute
+'u 500,678,10 2 0372 -- uacute
char250 "
-^u 500,674,10 2 0373 ucircumflex
+^u 500,674,10 2 0373 -- ucircumflex
char251 "
-:u 500,623,10 2 0374 udieresis
+:u 500,623,10 2 0374 -- udieresis
char252 "
-'y 500,678,218 3 0375 yacute
+'y 500,678,218 3 0375 -- yacute
char253 "
-Tp 500,683,217 3 0376 thorn
+Tp 500,683,217 3 0376 -- thorn
char254 "
-:y 500,623,218 3 0377 ydieresis
+:y 500,623,218 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/ZCMI b/contrib/groff/devps/ZCMI
index 53e56fd7170b..e25c2a6426f1 100644
--- a/contrib/groff/devps/ZCMI
+++ b/contrib/groff/devps/ZCMI
@@ -6,6 +6,7 @@ encoding text.enc
ligatures fi fl 0
kernpairs
A ' -40
+A cq -40
A rq -40
A U -10
A T 10
@@ -29,6 +30,7 @@ K o -20
K e -20
L y -10
L ' -25
+L cq -25
L rq -25
L W -10
L V -20
@@ -85,12 +87,14 @@ 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
@@ -115,6 +119,7 @@ p . -30
p p -10
p , -20
. ' -80
+. cq -80
. rq -80
lq ` 20
lq oq 20
@@ -126,12 +131,21 @@ 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
@@ -144,334 +158,337 @@ 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
+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
-# 440,594,0,131,-33,87 2 0043 numbersign
+! 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
+$ 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
-( 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
+% 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
+. 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
+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
+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
+\ 480,610,16,94,-90,87 2 0134 -- backslash
rs "
-] 320,655,207,121,77,87 2 0135 bracketright
+] 320,655,207,121,77,87 2 0135 -- bracketright
rB "
-a^ 340,649,0,153,-173,87 2 0136 circumflex
+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
+_ 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
+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
+ba 520,714,16,0,-270 2 0174 -- bar
| "
-rC 240,655,207,128,60,87 2 0175 braceright
+rC 240,655,207,128,60,87 2 0175 -- braceright
} "
-a~ 440,619,0,132,-193,87 2 0176 tilde
+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
+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
+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
+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
+ct 440,543,134,86,-72,86 2 0242 -- cent
char162 "
-Po 440,610,52,116,66,87 2 0243 sterling
+Po 440,610,52,116,66,87 2 0243 -- sterling
char163 "
-Cs 440,509,0,84,0,84 0 0244 currency
+Cs 440,509,0,84,0,84 0 0244 -- currency
char164 "
-Ye 440,647,168,223,51,87 2 0245 yen
+Ye 440,647,168,223,51,87 2 0245 -- yen
char165 "
-bb 520,714,16,0,-270 2 0246 brokenbar
+bb 520,714,16,0,-270 2 0246 -- brokenbar
char166 "
-sc 420,610,215,144,-3,87 2 0247 section
+sc 420,610,215,144,-3,87 2 0247 -- section
char167 "
-ad 360,610,0,159,-193,87 2 0250 dieresis
+ad 360,610,0,159,-193,87 2 0250 -- dieresis
char168 "
-co 740,610,16,73,-87,73 2 0251 copyright
+co 740,610,16,73,-87,73 2 0251 -- copyright
char169 "
-Of 260,610,0,176,-61,87 2 0252 ordfeminine
+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
+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
+\- 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
+a- 440,578,0,75,-172,75 2 0257 -- macron
char175 "
-de 400,610,0,107,-121,87 2 0260 degree
+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
+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
+S3 264,610,0,134,-9,87 2 0263 -- threesuperior
char179 "
-aa 300,659,0,172,-215,87 2 0264 acute
+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
+char181 460,438,314,113,43,87 1 0265 -- mu
+ps 500,594,199,188,-55,87 2 0266 -- paragraph
char182 "
-char183 220,310,0,71,-89,71 0 0267 periodcentered
-ac 300,6,191,0,38 0 0270 cedilla
+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
+S1 264,610,0,97,-33,87 2 0271 -- onesuperior
char185 "
-Om 260,610,0,163,-78,87 2 0272 ordmasculine
+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
+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
+12 660,610,16,92,-6,87 2 0275 -- onehalf
char189 "
-34 660,610,16,96,11,87 2 0276 threequarters
+34 660,610,16,96,11,87 2 0276 -- threequarters
char190 "
-r? 400,438,186,37,-32,37 0 0277 questiondown
+r? 400,438,186,37,-32,37 0 0277 -- questiondown
char191 "
-`A 620,821,16,127,37,87 2 0300 Agrave
+`A 620,821,16,127,37,87 2 0300 -- Agrave
char192 "
-'A 620,821,16,132,37,87 2 0301 Aacute
+'A 620,821,16,132,37,87 2 0301 -- Aacute
char193 "
-^A 620,821,16,127,37,87 2 0302 Acircumflex
+^A 620,821,16,127,37,87 2 0302 -- Acircumflex
char194 "
-~A 620,771,16,132,37,87 2 0303 Atilde
+~A 620,771,16,132,37,87 2 0303 -- Atilde
char195 "
-:A 620,762,16,139,37,87 2 0304 Adieresis
+:A 620,762,16,139,37,87 2 0304 -- Adieresis
char196 "
-oA 620,831,16,127,37,87 2 0305 Aring
+oA 620,831,16,127,37,87 2 0305 -- Aring
char197 "
-AE 740,594,16,109,71,87 2 0306 AE
+AE 740,594,16,109,71,87 2 0306 -- AE
char198 "
-,C 520,610,191,161,-43,87 2 0307 Ccedilla
+,C 520,610,191,161,-43,87 2 0307 -- Ccedilla
char199 "
-`E 620,821,12,139,-41,87 2 0310 Egrave
+`E 620,821,12,139,-41,87 2 0310 -- Egrave
char200 "
-'E 620,821,12,139,-41,87 2 0311 Eacute
+'E 620,821,12,139,-41,87 2 0311 -- Eacute
char201 "
-^E 620,821,12,139,-41,87 2 0312 Ecircumflex
+^E 620,821,12,139,-41,87 2 0312 -- Ecircumflex
char202 "
-:E 620,762,12,139,-41,87 2 0313 Edieresis
+:E 620,762,12,139,-41,87 2 0313 -- Edieresis
char203 "
-`I 380,821,0,174,-49,87 2 0314 Igrave
+`I 380,821,0,174,-49,87 2 0314 -- Igrave
char204 "
-'I 380,821,0,202,-49,87 2 0315 Iacute
+'I 380,821,0,202,-49,87 2 0315 -- Iacute
char205 "
-^I 380,821,0,174,-49,87 2 0316 Icircumflex
+^I 380,821,0,174,-49,87 2 0316 -- Icircumflex
char206 "
-:I 380,762,0,189,-49,87 2 0317 Idieresis
+:I 380,762,0,189,-49,87 2 0317 -- Idieresis
char207 "
--D 700,640,6,118,-36,87 2 0320 Eth
+-D 700,640,6,118,-36,87 2 0320 -- Eth
char208 "
-~N 700,761,168,265,-35,87 2 0321 Ntilde
+~N 700,761,168,265,-35,87 2 0321 -- Ntilde
char209 "
-`O 600,821,16,110,-44,87 2 0322 Ograve
+`O 600,821,16,110,-44,87 2 0322 -- Ograve
char210 "
-'O 600,821,16,110,-44,87 2 0323 Oacute
+'O 600,821,16,110,-44,87 2 0323 -- Oacute
char211 "
-^O 600,821,16,110,-44,87 2 0324 Ocircumflex
+^O 600,821,16,110,-44,87 2 0324 -- Ocircumflex
char212 "
-~O 600,761,16,110,-44,87 2 0325 Otilde
+~O 600,761,16,110,-44,87 2 0325 -- Otilde
char213 "
-:O 600,762,16,110,-44,87 2 0326 Odieresis
+: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
+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
+`U 740,821,16,102,-76,87 2 0331 -- Ugrave
char217 "
-'U 740,821,16,102,-76,87 2 0332 Uacute
+'U 740,821,16,102,-76,87 2 0332 -- Uacute
char218 "
-^U 740,821,16,102,-76,87 2 0333 Ucircumflex
+^U 740,821,16,102,-76,87 2 0333 -- Ucircumflex
char219 "
-:U 740,762,16,102,-76,87 2 0334 Udieresis
+:U 740,762,16,102,-76,87 2 0334 -- Udieresis
char220 "
-'Y 560,821,168,264,9,87 2 0335 Yacute
+'Y 560,821,168,264,9,87 2 0335 -- Yacute
char221 "
-TP 540,623,0,157,-2,87 2 0336 Thorn
+TP 540,623,0,157,-2,87 2 0336 -- Thorn
char222 "
-ss 420,714,314,172,177,87 3 0337 germandbls
+ss 420,714,314,172,177,87 3 0337 -- germandbls
char223 "
-`a 420,659,15,115,-42,87 2 0340 agrave
+`a 420,659,15,115,-42,87 2 0340 -- agrave
char224 "
-'a 420,659,15,122,-42,87 2 0341 aacute
+'a 420,659,15,122,-42,87 2 0341 -- aacute
char225 "
-^a 420,649,15,115,-42,87 2 0342 acircumflex
+^a 420,649,15,115,-42,87 2 0342 -- acircumflex
char226 "
-~a 420,619,15,152,-42,87 2 0343 atilde
+~a 420,619,15,152,-42,87 2 0343 -- atilde
char227 "
-:a 420,610,15,115,-42,87 2 0344 adieresis
+:a 420,610,15,115,-42,87 2 0344 -- adieresis
char228 "
-oa 420,659,15,115,-42,87 2 0345 aring
+oa 420,659,15,115,-42,87 2 0345 -- aring
char229 "
-ae 540,468,14,134,-17,87 0 0346 ae
+ae 540,468,14,134,-17,87 0 0346 -- ae
char230 "
-,c 340,438,191,116,-12,87 0 0347 ccedilla
+,c 340,438,191,116,-12,87 0 0347 -- ccedilla
char231 "
-`e 340,659,14,113,-37,87 2 0350 egrave
+`e 340,659,14,113,-37,87 2 0350 -- egrave
char232 "
-'e 340,659,14,172,-37,87 2 0351 eacute
+'e 340,659,14,172,-37,87 2 0351 -- eacute
char233 "
-^e 340,649,14,143,-37,87 2 0352 ecircumflex
+^e 340,649,14,143,-37,87 2 0352 -- ecircumflex
char234 "
-:e 340,610,14,159,-37,87 2 0353 edieresis
+:e 340,610,14,159,-37,87 2 0353 -- edieresis
char235 "
-`i 240,659,14,116,-50,87 2 0354 igrave
+`i 240,659,14,116,-50,87 2 0354 -- igrave
char236 "
-'i 240,659,14,202,-50,87 2 0355 iacute
+'i 240,659,14,202,-50,87 2 0355 -- iacute
char237 "
-^i 240,649,14,173,-50,87 2 0356 icircumflex
+^i 240,649,14,173,-50,87 2 0356 -- icircumflex
char238 "
-:i 240,610,14,179,-50,87 2 0357 idieresis
+:i 240,610,14,179,-50,87 2 0357 -- idieresis
char239 "
-Sd 400,714,14,172,-37,87 2 0360 eth
+Sd 400,714,14,172,-37,87 2 0360 -- eth
char240 "
-~n 460,619,14,134,-51,87 2 0361 ntilde
+~n 460,619,14,134,-51,87 2 0361 -- ntilde
char241 "
-`o 400,659,14,99,-37,87 2 0362 ograve
+`o 400,659,14,99,-37,87 2 0362 -- ograve
char242 "
-'o 400,659,14,132,-37,87 2 0363 oacute
+'o 400,659,14,132,-37,87 2 0363 -- oacute
char243 "
-^o 400,649,14,103,-37,87 2 0364 ocircumflex
+^o 400,649,14,103,-37,87 2 0364 -- ocircumflex
char244 "
-~o 400,619,14,152,-37,87 2 0365 otilde
+~o 400,619,14,152,-37,87 2 0365 -- otilde
char245 "
-:o 400,610,14,129,-37,87 2 0366 odieresis
+: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
+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
+`u 460,659,14,118,-52,87 2 0371 -- ugrave
char249 "
-'u 460,659,14,118,-52,87 2 0372 uacute
+'u 460,659,14,118,-52,87 2 0372 -- uacute
char250 "
-^u 460,649,14,118,-52,87 2 0373 ucircumflex
+^u 460,649,14,118,-52,87 2 0373 -- ucircumflex
char251 "
-:u 460,610,14,118,-52,87 2 0374 udieresis
+:u 460,610,14,118,-52,87 2 0374 -- udieresis
char252 "
-'y 400,659,314,133,74,87 3 0375 yacute
+'y 400,659,314,133,74,87 3 0375 -- yacute
char253 "
-Tp 440,714,314,115,88,87 3 0376 thorn
+Tp 440,714,314,115,88,87 3 0376 -- thorn
char254 "
-:y 400,610,314,133,74,87 3 0377 ydieresis
+:y 400,610,314,133,74,87 3 0377 -- ydieresis
char255 "
diff --git a/contrib/groff/devps/ZD b/contrib/groff/devps/ZD
index c2bd4eb8ff4d..3066c39b7c84 100644
--- a/contrib/groff/devps/ZD
+++ b/contrib/groff/devps/ZD
@@ -4,190 +4,190 @@ 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
+--- 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
index 3b7f0a64cddf..ab5b54f7c0e9 100644
--- a/contrib/groff/devps/ZDR
+++ b/contrib/groff/devps/ZDR
@@ -4,190 +4,190 @@ 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
+--- 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/generate/Makefile b/contrib/groff/devps/generate/Makefile
index f62c2929662f..fb5c3d547178 100644
--- a/contrib/groff/devps/generate/Makefile
+++ b/contrib/groff/devps/generate/Makefile
@@ -1,21 +1,21 @@
-#Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
-# Written by James Clark (jjc@jclark.com)
+# Copyright (C) 1989-2000 Free Software Foundation, Inc.
+# Written by James Clark (jjc@jclark.com)
#
-#This file is part of groff.
+# This file is part of groff.
#
-#groff is free software; you can redistribute it and/or modify it under
-#the terms of the GNU General Public License as published by the Free
-#Software Foundation; either version 2, or (at your option) any later
-#version.
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
#
-#groff is distributed in the hope that it will be useful, but WITHOUT ANY
-#WARRANTY; without even the implied warranty of MERCHANTABILITY or
-#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-#for more details.
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
#
-#You should have 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.
+# You should have 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
@@ -24,7 +24,7 @@
# 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/afm
+afmdir=/usr/local/lib/afm
srcdir=generate
SPECIALFONTS=S
@@ -42,8 +42,7 @@ NOLIGFLAG=-n
TEXTENC=$(srcdir)/../text.enc
EFLAG=-e $(TEXTENC)
TEXTMAP=$(srcdir)/textmap
-SHELL=/bin/sh
-AFMNAME=$(SHELL) $(srcdir)/afmname
+AFMNAME=$(srcdir)/afmname
all: $(FONTS)
diff --git a/contrib/groff/devps/generate/afmname b/contrib/groff/devps/generate/afmname
index 8503d46d8b50..3e837df222c1 100755
--- a/contrib/groff/devps/generate/afmname
+++ b/contrib/groff/devps/generate/afmname
@@ -4,7 +4,7 @@ if test -f "$1"
then
echo "$1"
else
- echo `dirname $1`/`basename $1 .afm | awk -e '
+ echo `dirname $1`/`basename $1 .afm | awk '
/^AvantGarde-Book$/ { print "avangbk" }
/^AvantGarde-BookOblique$/ { print "avangbko" }
/^AvantGarde-Demi$/ { print "avangd" }
diff --git a/contrib/groff/devps/generate/textmap b/contrib/groff/devps/generate/textmap
index bcf3ad7b860c..5b5e0ea85c83 100644
--- a/contrib/groff/devps/generate/textmap
+++ b/contrib/groff/devps/generate/textmap
@@ -248,6 +248,7 @@ parenright )
partialdiff pd
percent %
period .
+periodcentered pc
perthousand %0
perpendicular pp
plus +
@@ -258,12 +259,14 @@ 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
diff --git a/contrib/groff/devps/symbol.afm b/contrib/groff/devps/symbol.afm
index eccf6c2aaca6..33cba6a487ff 100644
--- a/contrib/groff/devps/symbol.afm
+++ b/contrib/groff/devps/symbol.afm
@@ -1,6 +1,3 @@
-(c) 1987, 1988, 1989, 1990, 1991 Adobe Systems Incorporated.
-All rights reserved.
-
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
diff --git a/contrib/groff/devps/symbolmap b/contrib/groff/devps/symbolmap
index 82827c89f1cb..03d6e70bea21 100644
--- a/contrib/groff/devps/symbolmap
+++ b/contrib/groff/devps/symbolmap
@@ -248,6 +248,7 @@ parenright )
partialdiff pd
percent %
period .
+periodcentered pc
perthousand %0
perpendicular pp
plus +
@@ -258,12 +259,14 @@ 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
diff --git a/contrib/groff/devutf8/DESC.proto b/contrib/groff/devutf8/DESC.proto
new file mode 100644
index 000000000000..88399ab16d91
--- /dev/null
+++ b/contrib/groff/devutf8/DESC.proto
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 000000000000..f6ce659c0d6e
--- /dev/null
+++ b/contrib/groff/devutf8/Makefile.sub
@@ -0,0 +1,32 @@
+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
new file mode 100644
index 000000000000..674215557927
--- /dev/null
+++ b/contrib/groff/devutf8/NOTES
@@ -0,0 +1,92 @@
+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
new file mode 100644
index 000000000000..2b40b97d1d19
--- /dev/null
+++ b/contrib/groff/devutf8/R.proto
@@ -0,0 +1,471 @@
+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/doc/Makefile b/contrib/groff/doc/Makefile
index cccc52c1d908..042bbe054795 100644
--- a/contrib/groff/doc/Makefile
+++ b/contrib/groff/doc/Makefile
@@ -1,62 +1,80 @@
-#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.
-
-FFLAG=-F..
-TROFF=../troff/troff -M../tmac $(FFLAG)
-GROPS=../grops/grops $(FFLAG)
-DOCS=meref.ps meintro.ps pic.ps
-MEMACROS=../macros/tmac.e
-SOELIM=../soelim/soelim
+# 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.
+
+FFLAG=-F../font
+TROFF=../src/roff/troff/troff -M../tmac $(FFLAG)
+GROFF=../src/roff/groff/groff -p -e -t
+GROPS=../src/devices/grops/grops $(FFLAG)
+DOCS=meref.ps meintro.ps pic.ps pic.html homepage.html
+MEMACROS=../tmac/tmac.e
+SOELIM=../src/preproc/soelim/soelim
+
+version=`cat ../VERSION`
+# No additional number for the groff archive if revision is zero
+revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' ../REVISION`
all: $(DOCS)
-.SUFFIXES: .tr .me .ms .ps .dit
+.SUFFIXES: .tr .me .ms .ps .dit .html .ascii .texinfo .dvi
.dit.ps:
$(GROPS) $< >$@
.me.dit:
$(SOELIM) $< \
- | sed -e "s;@VERSION@;`cat ../VERSION`;" \
- | $(TROFF) -Tps $(FFLAG) -me >$@
+ | sed -e "s;@VERSION@;$(version)$(revision);" \
+ | $(TROFF) -Tps $(FFLAG) -me >$@
.tr.dit:
$(TROFF) -Tps $< >$@
-meref.ps: meref.dit
-meintro.ps: meintro.dit
+.ms.html:
+ GROFF_TMAC_PATH=../tmac; \
+ export GROFF_TMAC_PATH; \
+ sed -e "s;@VERSION@;$(version)$(revision);" $< \
+ | $(GROFF) -Thtml $(FFLAG) -U -ms >$@
+
+.ms.ascii:
+ GROFF_TMAC_PATH=../tmac; \
+ export GROFF_TMAC_PATH; \
+ sed -e "s;@VERSION@;$(version)$(revision);" $< \
+ | $(GROFF) -Tascii $(FFLAG) -U -ms -markup >$@
+
+.ms.ps:
+ GROFF_TMAC_PATH=../tmac; \
+ export GROFF_TMAC_PATH; \
+ sed -e "s;@VERSION@;$(version)$(revision);" $< \
+ | $(GROFF) -Tps $(FFLAG) -U -ms -markup >$@
-# This production must use -p -e -t so pic/eqn processing is done
-pic.ps: pic.ms
- sed -e "s;@VERSION@;`cat ../VERSION`;" $< \
- | ../groff/groff -p -e -t -Tps $(FFLAG) -ms >$@
+.texinfo.dvi:
+ texi2dvi -e $<
-pic.html: pic.ms
- sed -e "s;@VERSION@;`cat ../VERSION`;" $< \
- | ../groff/groff -p -e -t -Thtml $(FFLAG) -ms -mhtml >$@
+groff: groff.texinfo
+ makeinfo groff.texinfo
install:
clean:
- -rm -f *.ps *.html *.png *.gif *.dit core
- -rm -f *.aux *.cp *.cps *.cv *.cn *.dvi *.fn *.fns *.ky *.kys \
- *.log *.op *.pg *.pgs *.ps *.toc *.tp *.tps *.tr *.vr *.vrs
+ -rm -f *.ps *.html *.ascii *.png *.gif *.dit core
+ -rm -f *.aux *.dvi *.log *.toc texput.log
+ -rm -f *.cp *.cps *.cv *.cn *.fn *.fns *.gl *.gls *.ky *.kys \
+ *.ma *.mas *.op *.ops *.pg *.pgs *.tp *.tps *.tr *.vr *.vrs
distclean: clean
diff --git a/contrib/groff/doc/grnexmpl.g b/contrib/groff/doc/grnexmpl.g
new file mode 100644
index 000000000000..ba1a1b8790d4
--- /dev/null
+++ b/contrib/groff/doc/grnexmpl.g
@@ -0,0 +1,3250 @@
+sungremlinfile
+0 320.00 240.00
+ARC
+320.00 240.00
+320.00 416.00
+320.00 416.00
+320.00 64.00
+496.00 240.00
+144.00 240.00
+*
+4 0
+0
+CURVE BSPLINE
+764.00 288.00
+776.00 304.00
+764.00 320.00
+*
+3 0
+0
+CURVE BSPLINE
+768.00 288.00
+780.00 304.00
+768.00 320.00
+*
+3 0
+0
+CURVE BSPLINE
+768.00 320.00
+788.00 320.00
+800.00 304.00
+*
+3 0
+0
+CURVE BSPLINE
+768.00 288.00
+788.00 288.00
+800.00 304.00
+*
+3 0
+0
+ARC
+192.00 268.00
+192.00 267.00
+192.00 269.00
+192.00 267.00
+193.00 268.00
+191.00 268.00
+*
+3 0
+0
+ARC
+192.00 212.00
+192.00 211.00
+192.00 213.00
+192.00 211.00
+193.00 212.00
+191.00 212.00
+*
+3 0
+0
+CENTRIGHT
+476.00 32.00
+430.00 28.00
+453.00 28.00
+476.00 28.00
+*
+1 1
+10 $DP sub 2$
+CENTRIGHT
+476.00 224.00
+430.00 220.00
+453.00 220.00
+476.00 220.00
+*
+1 1
+10 $DP sub 2$
+CENTRIGHT
+476.00 256.00
+430.00 252.00
+453.00 252.00
+476.00 252.00
+*
+1 1
+10 $DP sub 2$
+CENTRIGHT
+476.00 448.00
+430.00 444.00
+453.00 444.00
+476.00 444.00
+*
+1 1
+10 $DP sub 2$
+VECTOR
+604.00 344.00
+612.00 344.00
+612.00 364.00
+620.00 364.00
+*
+6 0
+0
+ARC
+416.00 320.00
+416.00 319.00
+416.00 321.00
+416.00 319.00
+417.00 320.00
+415.00 320.00
+*
+3 0
+0
+CENTLEFT
+596.00 336.00
+596.00 332.00
+604.00 332.00
+613.00 332.00
+*
+1 1
+3 $-$
+CENTLEFT
+596.00 368.00
+596.00 364.00
+604.00 364.00
+612.00 364.00
+*
+1 1
+3 $+$
+POLYGON
+592.00 320.00
+592.00 384.00
+656.00 352.00
+592.00 320.00
+*
+3 1
+0
+ARC
+392.00 390.00
+392.00 392.00
+392.00 392.00
+392.00 388.00
+390.00 390.00
+394.00 390.00
+*
+3 0
+0
+VECTOR
+396.00 388.00
+384.00 384.00
+*
+3 0
+0
+ARC
+392.00 378.00
+392.00 380.00
+392.00 380.00
+392.00 376.00
+390.00 378.00
+394.00 378.00
+*
+3 0
+0
+ARC
+312.00 326.00
+312.00 328.00
+312.00 328.00
+312.00 324.00
+314.00 326.00
+310.00 326.00
+*
+3 0
+0
+CENTRIGHT
+276.00 352.00
+243.00 348.00
+259.00 348.00
+276.00 348.00
+*
+1 1
+7 $vv B2$
+POLYGON
+280.00 356.00
+280.00 348.00
+284.00 348.00
+288.00 352.00
+284.00 356.00
+*
+3 21
+0
+VECTOR
+308.00 324.00
+320.00 320.00
+*
+3 0
+0
+ARC
+312.00 314.00
+312.00 316.00
+312.00 316.00
+312.00 312.00
+314.00 314.00
+310.00 314.00
+*
+3 0
+0
+CENTLEFT
+292.00 212.00
+292.00 208.00
+300.00 208.00
+308.00 208.00
+*
+1 1
+3 $+$
+CENTLEFT
+292.00 268.00
+292.00 264.00
+300.00 264.00
+309.00 264.00
+*
+1 1
+3 $-$
+POLYGON
+288.00 192.00
+288.00 288.00
+384.00 240.00
+288.00 192.00
+*
+3 1
+0
+ARC
+256.00 268.00
+256.00 267.00
+256.00 269.00
+256.00 267.00
+257.00 268.00
+255.00 268.00
+*
+3 0
+0
+VECTOR
+328.00 268.00
+416.00 268.00
+416.00 320.00
+356.00 320.00
+*
+6 0
+0
+VECTOR
+356.00 328.00
+356.00 312.00
+*
+3 0
+0
+VECTOR
+352.00 328.00
+352.00 312.00
+*
+6 0
+0
+VECTOR
+320.00 320.00
+352.00 320.00
+*
+6 0
+0
+VECTOR
+312.00 312.00
+256.00 312.00
+256.00 268.00
+288.00 268.00
+*
+6 0
+0
+VECTOR
+224.00 276.00
+224.00 260.00
+*
+3 0
+0
+VECTOR
+228.00 276.00
+228.00 260.00
+*
+6 0
+0
+VECTOR
+228.00 268.00
+256.00 268.00
+*
+6 0
+0
+VECTOR
+224.00 268.00
+192.00 268.00
+192.00 384.00
+316.00 384.00
+*
+6 0
+0
+VECTOR
+320.00 392.00
+320.00 376.00
+*
+3 0
+0
+VECTOR
+316.00 392.00
+316.00 376.00
+*
+6 0
+0
+VECTOR
+312.00 328.00
+312.00 352.00
+288.00 352.00
+*
+6 0
+0
+VECTOR
+392.00 392.00
+416.00 392.00
+416.00 320.00
+*
+6 0
+0
+VECTOR
+320.00 384.00
+384.00 384.00
+*
+6 0
+0
+VECTOR
+192.00 256.00
+192.00 268.00
+160.00 268.00
+*
+6 0
+0
+ARC
+160.00 266.00
+160.00 268.00
+160.00 268.00
+160.00 264.00
+158.00 266.00
+162.00 266.00
+*
+3 0
+0
+VECTOR
+164.00 256.00
+152.00 260.00
+*
+3 0
+0
+ARC
+160.00 254.00
+160.00 256.00
+160.00 256.00
+160.00 252.00
+158.00 254.00
+162.00 254.00
+*
+3 0
+0
+ARC
+194.00 256.00
+196.00 256.00
+196.00 256.00
+192.00 256.00
+194.00 254.00
+194.00 258.00
+*
+3 0
+0
+VECTOR
+204.00 260.00
+200.00 248.00
+*
+3 0
+0
+VECTOR
+200.00 248.00
+200.00 232.00
+*
+6 0
+0
+VECTOR
+152.00 260.00
+128.00 260.00
+*
+6 0
+0
+ARC
+96.00 266.00
+96.00 268.00
+96.00 268.00
+96.00 264.00
+98.00 266.00
+94.00 266.00
+*
+3 0
+0
+VECTOR
+92.00 256.00
+104.00 260.00
+*
+3 0
+0
+ARC
+96.00 254.00
+96.00 256.00
+96.00 256.00
+96.00 252.00
+98.00 254.00
+94.00 254.00
+*
+3 0
+0
+VECTOR
+124.00 268.00
+124.00 252.00
+*
+3 0
+0
+VECTOR
+128.00 268.00
+128.00 252.00
+*
+6 0
+0
+VECTOR
+104.00 260.00
+124.00 260.00
+*
+6 0
+0
+VECTOR
+96.00 268.00
+96.00 320.00
+40.00 320.00
+*
+6 0
+0
+ARC
+28.00 338.00
+28.00 340.00
+28.00 340.00
+28.00 336.00
+30.00 338.00
+26.00 338.00
+*
+3 0
+0
+VECTOR
+24.00 336.00
+40.00 320.00
+*
+3 0
+0
+ARC
+28.00 302.00
+28.00 304.00
+28.00 304.00
+28.00 300.00
+30.00 302.00
+26.00 302.00
+*
+3 0
+0
+ARC
+14.00 320.00
+12.00 320.00
+12.00 320.00
+16.00 320.00
+14.00 322.00
+14.00 318.00
+*
+3 0
+0
+VECTOR
+96.00 252.00
+76.00 252.00
+*
+6 0
+0
+ARC
+68.00 258.00
+68.00 260.00
+68.00 260.00
+68.00 256.00
+70.00 258.00
+66.00 258.00
+*
+3 0
+0
+VECTOR
+64.00 248.00
+76.00 252.00
+*
+3 0
+0
+ARC
+68.00 246.00
+68.00 248.00
+68.00 248.00
+68.00 244.00
+70.00 246.00
+66.00 246.00
+*
+3 0
+0
+VECTOR
+352.00 384.00
+352.00 416.00
+512.00 416.00
+*
+6 0
+0
+VECTOR
+512.00 424.00
+512.00 408.00
+*
+3 0
+0
+VECTOR
+516.00 424.00
+516.00 408.00
+*
+6 0
+0
+VECTOR
+516.00 416.00
+564.00 416.00
+564.00 368.00
+592.00 368.00
+*
+6 0
+0
+VECTOR
+564.00 416.00
+564.00 448.00
+516.00 448.00
+*
+6 0
+0
+ARC
+480.00 454.00
+480.00 456.00
+480.00 456.00
+480.00 452.00
+482.00 454.00
+478.00 454.00
+*
+3 0
+0
+VECTOR
+476.00 444.00
+488.00 448.00
+*
+3 0
+0
+ARC
+480.00 442.00
+480.00 444.00
+480.00 444.00
+480.00 440.00
+482.00 442.00
+478.00 442.00
+*
+3 0
+0
+VECTOR
+512.00 456.00
+512.00 440.00
+*
+3 0
+0
+VECTOR
+516.00 456.00
+516.00 440.00
+*
+6 0
+0
+VECTOR
+488.00 448.00
+512.00 448.00
+*
+6 0
+0
+VECTOR
+480.00 440.00
+480.00 416.00
+*
+6 0
+0
+ARC
+352.00 384.00
+352.00 383.00
+352.00 385.00
+352.00 383.00
+353.00 384.00
+351.00 384.00
+*
+3 0
+0
+ARC
+480.00 416.00
+480.00 415.00
+480.00 417.00
+480.00 415.00
+481.00 416.00
+479.00 416.00
+*
+3 0
+0
+ARC
+564.00 416.00
+564.00 415.00
+564.00 417.00
+564.00 415.00
+565.00 416.00
+563.00 416.00
+*
+3 0
+0
+VECTOR
+480.00 456.00
+480.00 472.00
+*
+6 0
+0
+BOTCENT
+480.00 488.00
+452.00 488.00
+480.00 488.00
+509.00 488.00
+*
+1 1
+12 $- ^ vv REF$
+POLYGON
+484.00 480.00
+476.00 480.00
+476.00 476.00
+480.00 472.00
+484.00 476.00
+*
+3 21
+0
+ARC
+550.00 396.00
+548.00 396.00
+548.00 396.00
+552.00 396.00
+550.00 394.00
+550.00 398.00
+*
+3 0
+0
+VECTOR
+540.00 400.00
+544.00 388.00
+*
+3 0
+0
+VECTOR
+544.00 388.00
+544.00 316.00
+*
+6 0
+0
+VECTOR
+552.00 396.00
+552.00 416.00
+*
+6 0
+0
+ARC
+552.00 416.00
+552.00 415.00
+552.00 417.00
+552.00 415.00
+553.00 416.00
+551.00 416.00
+*
+3 0
+0
+CENTRIGHT
+516.00 352.00
+483.00 348.00
+499.00 348.00
+516.00 348.00
+*
+1 1
+7 $vv B1$
+POLYGON
+520.00 356.00
+520.00 348.00
+524.00 348.00
+528.00 352.00
+524.00 356.00
+*
+3 21
+0
+VECTOR
+512.00 280.00
+512.00 296.00
+*
+3 0
+0
+VECTOR
+516.00 280.00
+516.00 296.00
+*
+6 0
+0
+VECTOR
+564.00 288.00
+564.00 256.00
+516.00 256.00
+*
+6 0
+0
+ARC
+480.00 250.00
+480.00 248.00
+480.00 248.00
+480.00 252.00
+482.00 250.00
+478.00 250.00
+*
+3 0
+0
+VECTOR
+476.00 260.00
+488.00 256.00
+*
+3 0
+0
+ARC
+480.00 262.00
+480.00 260.00
+480.00 260.00
+480.00 264.00
+482.00 262.00
+478.00 262.00
+*
+3 0
+0
+VECTOR
+512.00 248.00
+512.00 264.00
+*
+3 0
+0
+VECTOR
+516.00 248.00
+516.00 264.00
+*
+6 0
+0
+VECTOR
+488.00 256.00
+512.00 256.00
+*
+6 0
+0
+VECTOR
+480.00 264.00
+480.00 288.00
+*
+6 0
+0
+ARC
+480.00 288.00
+480.00 289.00
+480.00 287.00
+480.00 289.00
+481.00 288.00
+479.00 288.00
+*
+3 0
+0
+ARC
+564.00 288.00
+564.00 289.00
+564.00 287.00
+564.00 289.00
+565.00 288.00
+563.00 288.00
+*
+3 0
+0
+VECTOR
+480.00 248.00
+480.00 232.00
+*
+6 0
+0
+ARC
+550.00 308.00
+548.00 308.00
+548.00 308.00
+552.00 308.00
+550.00 310.00
+550.00 306.00
+*
+3 0
+0
+VECTOR
+540.00 304.00
+544.00 316.00
+*
+3 0
+0
+VECTOR
+552.00 308.00
+552.00 288.00
+*
+6 0
+0
+ARC
+552.00 288.00
+552.00 289.00
+552.00 287.00
+552.00 289.00
+553.00 288.00
+551.00 288.00
+*
+3 0
+0
+VECTOR
+528.00 352.00
+544.00 352.00
+*
+6 0
+0
+ARC
+544.00 352.00
+544.00 351.00
+544.00 353.00
+544.00 351.00
+545.00 352.00
+543.00 352.00
+*
+3 0
+0
+VECTOR
+516.00 288.00
+564.00 288.00
+564.00 336.00
+592.00 336.00
+*
+6 0
+0
+VECTOR
+512.00 288.00
+448.00 288.00
+448.00 64.00
+*
+6 0
+0
+VECTOR
+352.00 416.00
+352.00 448.00
+*
+6 0
+0
+ARC
+352.00 416.00
+352.00 415.00
+352.00 417.00
+352.00 415.00
+353.00 416.00
+351.00 416.00
+*
+3 0
+0
+BOTCENT
+352.00 460.00
+343.00 460.00
+352.00 460.00
+361.00 460.00
+*
+1 1
+3 $A$
+POLYGON
+356.00 448.00
+348.00 448.00
+348.00 452.00
+352.00 456.00
+356.00 452.00
+*
+3 21
+0
+BOTCENT
+320.00 396.00
+307.00 396.00
+320.00 396.00
+333.00 396.00
+*
+1 1
+6 $cc F$
+BOTRIGHT
+348.00 328.00
+321.00 328.00
+334.00 328.00
+348.00 328.00
+*
+1 1
+6 $cc O$
+BOTCENT
+228.00 280.00
+215.00 280.00
+228.00 280.00
+242.00 280.00
+*
+1 1
+6 $cc C$
+BOTCENT
+128.00 272.00
+116.00 272.00
+128.00 272.00
+141.00 272.00
+*
+1 1
+6 $cc S$
+CENTLEFT
+204.00 256.00
+204.00 252.00
+227.00 252.00
+250.00 252.00
+*
+1 1
+10 $DP sub 2$
+BOTCENT
+68.00 264.00
+56.00 264.00
+68.00 264.00
+80.00 264.00
+*
+1 1
+4 $PN$
+TOPRIGHT
+388.00 380.00
+342.00 371.00
+365.00 371.00
+388.00 371.00
+*
+1 1
+10 $DP sub 2$
+TOPCENT
+392.00 348.00
+372.00 339.00
+392.00 339.00
+412.00 339.00
+*
+1 1
+6 $AGND$
+POLYGON
+396.00 352.00
+388.00 352.00
+388.00 356.00
+392.00 360.00
+396.00 356.00
+*
+3 21
+0
+VECTOR
+392.00 360.00
+392.00 376.00
+*
+6 0
+0
+TOPRIGHT
+540.00 396.00
+494.00 387.00
+517.00 387.00
+540.00 387.00
+*
+1 1
+10 $DP sub 1$
+CENTRIGHT
+508.00 440.00
+476.00 436.00
+492.00 436.00
+508.00 436.00
+*
+1 1
+7 $cc D1$
+CENTRIGHT
+508.00 408.00
+476.00 404.00
+492.00 404.00
+508.00 404.00
+*
+1 1
+7 $cc D2$
+BOTRIGHT
+508.00 268.00
+476.00 268.00
+492.00 268.00
+508.00 268.00
+*
+1 1
+7 $cc D1$
+BOTRIGHT
+508.00 300.00
+476.00 300.00
+492.00 300.00
+508.00 300.00
+*
+1 1
+7 $cc D2$
+VECTOR
+672.00 392.00
+672.00 344.00
+720.00 344.00
+720.00 392.00
+672.00 392.00
+*
+3 0
+0
+ARC
+696.00 396.00
+696.00 392.00
+696.00 400.00
+696.00 392.00
+700.00 396.00
+692.00 396.00
+*
+3 0
+0
+TOPCENT
+696.00 392.00
+688.00 383.00
+696.00 383.00
+705.00 383.00
+*
+1 1
+3 $R$
+ARC
+668.00 368.00
+668.00 364.00
+668.00 372.00
+668.00 364.00
+672.00 368.00
+664.00 368.00
+*
+3 0
+0
+CENTLEFT
+676.00 368.00
+676.00 364.00
+688.00 364.00
+700.00 364.00
+*
+1 1
+4 $CK$
+ARC
+724.00 368.00
+724.00 364.00
+724.00 372.00
+724.00 364.00
+720.00 368.00
+728.00 368.00
+*
+3 0
+0
+CENTRIGHT
+720.00 368.00
+688.00 364.00
+704.00 364.00
+720.00 364.00
+*
+1 1
+7 $O bar$
+CENTLEFT
+676.00 352.00
+676.00 348.00
+684.00 348.00
+693.00 348.00
+*
+1 1
+3 $D$
+CENTRIGHT
+720.00 352.00
+703.00 348.00
+711.00 348.00
+720.00 348.00
+*
+1 1
+3 $O$
+VECTOR
+656.00 352.00
+672.00 352.00
+*
+6 0
+0
+VECTOR
+720.00 352.00
+736.00 352.00
+736.00 176.00
+768.00 176.00
+*
+6 0
+0
+VECTOR
+728.00 368.00
+800.00 368.00
+*
+6 0
+0
+BOTRIGHT
+804.00 376.00
+762.00 376.00
+783.00 376.00
+804.00 376.00
+*
+1 1
+6 $DOWN$
+POLYGON
+800.00 372.00
+800.00 364.00
+804.00 364.00
+808.00 368.00
+804.00 372.00
+*
+3 21
+0
+VECTOR
+516.00 192.00
+564.00 192.00
+564.00 144.00
+592.00 144.00
+*
+6 0
+0
+VECTOR
+512.00 192.00
+432.00 192.00
+432.00 416.00
+*
+6 0
+0
+VECTOR
+512.00 200.00
+512.00 184.00
+*
+3 0
+0
+VECTOR
+516.00 200.00
+516.00 184.00
+*
+6 0
+0
+VECTOR
+564.00 192.00
+564.00 224.00
+516.00 224.00
+*
+6 0
+0
+ARC
+480.00 230.00
+480.00 232.00
+480.00 232.00
+480.00 228.00
+482.00 230.00
+478.00 230.00
+*
+3 0
+0
+VECTOR
+476.00 220.00
+488.00 224.00
+*
+3 0
+0
+ARC
+480.00 218.00
+480.00 220.00
+480.00 220.00
+480.00 216.00
+482.00 218.00
+478.00 218.00
+*
+3 0
+0
+VECTOR
+512.00 232.00
+512.00 216.00
+*
+3 0
+0
+VECTOR
+516.00 232.00
+516.00 216.00
+*
+6 0
+0
+VECTOR
+488.00 224.00
+512.00 224.00
+*
+6 0
+0
+VECTOR
+480.00 216.00
+480.00 192.00
+*
+6 0
+0
+ARC
+480.00 192.00
+480.00 191.00
+480.00 193.00
+480.00 191.00
+481.00 192.00
+479.00 192.00
+*
+3 0
+0
+ARC
+564.00 192.00
+564.00 191.00
+564.00 193.00
+564.00 191.00
+565.00 192.00
+563.00 192.00
+*
+3 0
+0
+VECTOR
+480.00 232.00
+480.00 248.00
+*
+6 0
+0
+VECTOR
+552.00 172.00
+552.00 192.00
+*
+6 0
+0
+ARC
+552.00 192.00
+552.00 191.00
+552.00 193.00
+552.00 191.00
+553.00 192.00
+551.00 192.00
+*
+3 0
+0
+TOPRIGHT
+508.00 220.00
+476.00 211.00
+492.00 211.00
+508.00 211.00
+*
+1 1
+7 $cc D1$
+TOPRIGHT
+508.00 188.00
+476.00 179.00
+492.00 179.00
+508.00 179.00
+*
+1 1
+7 $cc D2$
+VECTOR
+224.00 212.00
+192.00 212.00
+192.00 96.00
+316.00 96.00
+*
+6 0
+0
+VECTOR
+312.00 168.00
+256.00 168.00
+256.00 212.00
+288.00 212.00
+*
+6 0
+0
+VECTOR
+328.00 212.00
+416.00 212.00
+416.00 160.00
+356.00 160.00
+*
+6 0
+0
+VECTOR
+604.00 136.00
+612.00 136.00
+612.00 116.00
+620.00 116.00
+*
+6 0
+0
+ARC
+416.00 160.00
+416.00 161.00
+416.00 159.00
+416.00 161.00
+417.00 160.00
+415.00 160.00
+*
+3 0
+0
+CENTLEFT
+596.00 112.00
+596.00 108.00
+604.00 108.00
+613.00 108.00
+*
+1 1
+3 $-$
+CENTLEFT
+596.00 144.00
+596.00 140.00
+604.00 140.00
+612.00 140.00
+*
+1 1
+3 $+$
+POLYGON
+592.00 160.00
+592.00 96.00
+656.00 128.00
+592.00 160.00
+*
+3 1
+0
+ARC
+392.00 90.00
+392.00 88.00
+392.00 88.00
+392.00 92.00
+390.00 90.00
+394.00 90.00
+*
+3 0
+0
+VECTOR
+396.00 92.00
+384.00 96.00
+*
+3 0
+0
+ARC
+392.00 102.00
+392.00 100.00
+392.00 100.00
+392.00 104.00
+390.00 102.00
+394.00 102.00
+*
+3 0
+0
+ARC
+312.00 154.00
+312.00 152.00
+312.00 152.00
+312.00 156.00
+314.00 154.00
+310.00 154.00
+*
+3 0
+0
+CENTRIGHT
+276.00 128.00
+243.00 124.00
+259.00 124.00
+276.00 124.00
+*
+1 1
+7 $vv B2$
+POLYGON
+280.00 124.00
+280.00 132.00
+284.00 132.00
+288.00 128.00
+284.00 124.00
+*
+3 21
+0
+VECTOR
+308.00 156.00
+320.00 160.00
+*
+3 0
+0
+ARC
+312.00 166.00
+312.00 164.00
+312.00 164.00
+312.00 168.00
+314.00 166.00
+310.00 166.00
+*
+3 0
+0
+VECTOR
+356.00 152.00
+356.00 168.00
+*
+3 0
+0
+VECTOR
+352.00 152.00
+352.00 168.00
+*
+6 0
+0
+VECTOR
+320.00 160.00
+352.00 160.00
+*
+6 0
+0
+VECTOR
+320.00 88.00
+320.00 104.00
+*
+3 0
+0
+VECTOR
+316.00 88.00
+316.00 104.00
+*
+6 0
+0
+VECTOR
+312.00 152.00
+312.00 128.00
+288.00 128.00
+*
+6 0
+0
+VECTOR
+392.00 88.00
+416.00 88.00
+416.00 160.00
+*
+6 0
+0
+VECTOR
+320.00 96.00
+384.00 96.00
+*
+6 0
+0
+VECTOR
+352.00 96.00
+352.00 64.00
+512.00 64.00
+*
+6 0
+0
+VECTOR
+512.00 56.00
+512.00 72.00
+*
+3 0
+0
+VECTOR
+516.00 56.00
+516.00 72.00
+*
+6 0
+0
+VECTOR
+516.00 64.00
+564.00 64.00
+564.00 112.00
+592.00 112.00
+*
+6 0
+0
+VECTOR
+564.00 64.00
+564.00 32.00
+516.00 32.00
+*
+6 0
+0
+ARC
+480.00 26.00
+480.00 24.00
+480.00 24.00
+480.00 28.00
+482.00 26.00
+478.00 26.00
+*
+3 0
+0
+VECTOR
+476.00 36.00
+488.00 32.00
+*
+3 0
+0
+ARC
+480.00 38.00
+480.00 36.00
+480.00 36.00
+480.00 40.00
+482.00 38.00
+478.00 38.00
+*
+3 0
+0
+VECTOR
+512.00 24.00
+512.00 40.00
+*
+3 0
+0
+VECTOR
+516.00 24.00
+516.00 40.00
+*
+6 0
+0
+VECTOR
+488.00 32.00
+512.00 32.00
+*
+6 0
+0
+VECTOR
+480.00 40.00
+480.00 64.00
+*
+6 0
+0
+ARC
+352.00 96.00
+352.00 97.00
+352.00 95.00
+352.00 97.00
+353.00 96.00
+351.00 96.00
+*
+3 0
+0
+ARC
+480.00 64.00
+480.00 65.00
+480.00 63.00
+480.00 65.00
+481.00 64.00
+479.00 64.00
+*
+3 0
+0
+ARC
+564.00 64.00
+564.00 65.00
+564.00 63.00
+564.00 65.00
+565.00 64.00
+563.00 64.00
+*
+3 0
+0
+VECTOR
+480.00 24.00
+480.00 8.00
+*
+6 0
+0
+TOPCENT
+480.00 -4.00
+452.00 -13.00
+480.00 -13.00
+509.00 -13.00
+*
+1 1
+12 $- ^ vv REF$
+POLYGON
+484.00 0.00
+476.00 0.00
+476.00 4.00
+480.00 8.00
+484.00 4.00
+*
+3 21
+0
+ARC
+550.00 84.00
+548.00 84.00
+548.00 84.00
+552.00 84.00
+550.00 86.00
+550.00 82.00
+*
+3 0
+0
+VECTOR
+540.00 80.00
+544.00 92.00
+*
+3 0
+0
+VECTOR
+544.00 92.00
+544.00 164.00
+*
+6 0
+0
+VECTOR
+552.00 84.00
+552.00 64.00
+*
+6 0
+0
+ARC
+552.00 64.00
+552.00 65.00
+552.00 63.00
+552.00 65.00
+553.00 64.00
+551.00 64.00
+*
+3 0
+0
+CENTRIGHT
+516.00 128.00
+483.00 124.00
+499.00 124.00
+516.00 124.00
+*
+1 1
+7 $vv B1$
+POLYGON
+520.00 124.00
+520.00 132.00
+524.00 132.00
+528.00 128.00
+524.00 124.00
+*
+3 21
+0
+ARC
+550.00 172.00
+548.00 172.00
+548.00 172.00
+552.00 172.00
+550.00 170.00
+550.00 174.00
+*
+3 0
+0
+VECTOR
+540.00 176.00
+544.00 164.00
+*
+3 0
+0
+VECTOR
+528.00 128.00
+544.00 128.00
+*
+6 0
+0
+ARC
+544.00 128.00
+544.00 129.00
+544.00 127.00
+544.00 129.00
+545.00 128.00
+543.00 128.00
+*
+3 0
+0
+VECTOR
+352.00 64.00
+352.00 32.00
+*
+6 0
+0
+ARC
+352.00 64.00
+352.00 65.00
+352.00 63.00
+352.00 65.00
+353.00 64.00
+351.00 64.00
+*
+3 0
+0
+CENTCENT
+352.00 16.00
+344.00 12.00
+352.00 12.00
+360.00 12.00
+*
+1 1
+3 $B$
+POLYGON
+356.00 32.00
+348.00 32.00
+348.00 28.00
+352.00 24.00
+356.00 28.00
+*
+3 21
+0
+TOPCENT
+320.00 84.00
+307.00 75.00
+320.00 75.00
+333.00 75.00
+*
+1 1
+6 $cc F$
+TOPRIGHT
+348.00 160.00
+321.00 151.00
+334.00 151.00
+348.00 151.00
+*
+1 1
+6 $cc O$
+BOTRIGHT
+388.00 100.00
+342.00 100.00
+365.00 100.00
+388.00 100.00
+*
+1 1
+10 $DP sub 2$
+BOTCENT
+392.00 132.00
+372.00 132.00
+392.00 132.00
+412.00 132.00
+*
+1 1
+6 $AGND$
+POLYGON
+396.00 128.00
+388.00 128.00
+388.00 124.00
+392.00 120.00
+396.00 124.00
+*
+3 21
+0
+VECTOR
+392.00 120.00
+392.00 104.00
+*
+6 0
+0
+BOTRIGHT
+540.00 84.00
+494.00 84.00
+517.00 84.00
+540.00 84.00
+*
+1 1
+10 $DP sub 1$
+BOTRIGHT
+508.00 44.00
+476.00 44.00
+492.00 44.00
+508.00 44.00
+*
+1 1
+7 $cc D1$
+BOTRIGHT
+508.00 76.00
+476.00 76.00
+492.00 76.00
+508.00 76.00
+*
+1 1
+7 $cc D2$
+VECTOR
+672.00 88.00
+672.00 136.00
+720.00 136.00
+720.00 88.00
+672.00 88.00
+*
+3 0
+0
+ARC
+696.00 84.00
+696.00 88.00
+696.00 80.00
+696.00 88.00
+700.00 84.00
+692.00 84.00
+*
+3 0
+0
+BOTCENT
+696.00 88.00
+688.00 88.00
+696.00 88.00
+705.00 88.00
+*
+1 1
+3 $R$
+ARC
+668.00 112.00
+668.00 116.00
+668.00 108.00
+668.00 116.00
+672.00 112.00
+664.00 112.00
+*
+3 0
+0
+CENTLEFT
+676.00 112.00
+676.00 108.00
+688.00 108.00
+700.00 108.00
+*
+1 1
+4 $CK$
+ARC
+724.00 112.00
+724.00 116.00
+724.00 108.00
+724.00 116.00
+720.00 112.00
+728.00 112.00
+*
+3 0
+0
+CENTRIGHT
+720.00 112.00
+688.00 108.00
+704.00 108.00
+720.00 108.00
+*
+1 1
+7 $O bar$
+CENTLEFT
+676.00 128.00
+676.00 124.00
+684.00 124.00
+693.00 124.00
+*
+1 1
+3 $D$
+CENTRIGHT
+720.00 128.00
+703.00 124.00
+711.00 124.00
+720.00 124.00
+*
+1 1
+3 $O$
+VECTOR
+656.00 128.00
+672.00 128.00
+*
+6 0
+0
+VECTOR
+720.00 128.00
+800.00 128.00
+*
+6 0
+0
+CENTRIGHT
+804.00 120.00
+780.00 116.00
+792.00 116.00
+804.00 116.00
+*
+1 1
+4 $UP$
+POLYGON
+800.00 124.00
+800.00 132.00
+804.00 132.00
+808.00 128.00
+804.00 124.00
+*
+3 21
+0
+ARC
+256.00 212.00
+256.00 213.00
+256.00 211.00
+256.00 213.00
+257.00 212.00
+255.00 212.00
+*
+3 0
+0
+VECTOR
+224.00 204.00
+224.00 220.00
+*
+3 0
+0
+VECTOR
+228.00 204.00
+228.00 220.00
+*
+6 0
+0
+VECTOR
+228.00 212.00
+256.00 212.00
+*
+6 0
+0
+VECTOR
+192.00 224.00
+192.00 212.00
+160.00 212.00
+*
+6 0
+0
+ARC
+160.00 214.00
+160.00 212.00
+160.00 212.00
+160.00 216.00
+158.00 214.00
+162.00 214.00
+*
+3 0
+0
+VECTOR
+164.00 224.00
+152.00 220.00
+*
+3 0
+0
+ARC
+160.00 226.00
+160.00 224.00
+160.00 224.00
+160.00 228.00
+158.00 226.00
+162.00 226.00
+*
+3 0
+0
+ARC
+194.00 224.00
+196.00 224.00
+196.00 224.00
+192.00 224.00
+194.00 226.00
+194.00 222.00
+*
+3 0
+0
+VECTOR
+204.00 220.00
+200.00 232.00
+*
+3 0
+0
+VECTOR
+152.00 220.00
+128.00 220.00
+*
+6 0
+0
+ARC
+96.00 214.00
+96.00 212.00
+96.00 212.00
+96.00 216.00
+98.00 214.00
+94.00 214.00
+*
+3 0
+0
+VECTOR
+92.00 224.00
+104.00 220.00
+*
+3 0
+0
+ARC
+96.00 226.00
+96.00 224.00
+96.00 224.00
+96.00 228.00
+98.00 226.00
+94.00 226.00
+*
+3 0
+0
+VECTOR
+124.00 212.00
+124.00 228.00
+*
+3 0
+0
+VECTOR
+128.00 212.00
+128.00 228.00
+*
+6 0
+0
+VECTOR
+104.00 220.00
+124.00 220.00
+*
+6 0
+0
+VECTOR
+96.00 212.00
+96.00 160.00
+40.00 160.00
+*
+6 0
+0
+VECTOR
+96.00 228.00
+76.00 228.00
+*
+6 0
+0
+ARC
+68.00 222.00
+68.00 220.00
+68.00 220.00
+68.00 224.00
+70.00 222.00
+66.00 222.00
+*
+3 0
+0
+VECTOR
+64.00 232.00
+76.00 228.00
+*
+3 0
+0
+ARC
+68.00 234.00
+68.00 232.00
+68.00 232.00
+68.00 236.00
+70.00 234.00
+66.00 234.00
+*
+3 0
+0
+TOPCENT
+228.00 200.00
+215.00 191.00
+228.00 191.00
+242.00 191.00
+*
+1 1
+6 $cc C$
+TOPCENT
+128.00 208.00
+116.00 199.00
+128.00 199.00
+141.00 199.00
+*
+1 1
+6 $cc S$
+CENTLEFT
+204.00 224.00
+204.00 220.00
+227.00 220.00
+250.00 220.00
+*
+1 1
+10 $DP sub 2$
+CENTRIGHT
+154.00 240.00
+129.00 236.00
+141.00 236.00
+154.00 236.00
+*
+1 1
+5 $ITS$
+CENTCENT
+94.00 240.00
+84.00 236.00
+94.00 236.00
+105.00 236.00
+*
+1 1
+4 $SP$
+TOPCENT
+68.00 216.00
+56.00 207.00
+68.00 207.00
+80.00 207.00
+*
+1 1
+4 $PN$
+ARC
+432.00 416.00
+432.00 415.00
+432.00 417.00
+432.00 415.00
+433.00 416.00
+431.00 416.00
+*
+3 0
+0
+ARC
+448.00 64.00
+448.00 63.00
+448.00 65.00
+448.00 63.00
+449.00 64.00
+447.00 64.00
+*
+3 0
+0
+VECTOR
+480.00 248.00
+480.00 232.00
+*
+6 0
+0
+CENTRIGHT
+452.00 240.00
+396.00 236.00
+424.00 236.00
+452.00 236.00
+*
+1 1
+12 $+ ^ vv REF$
+POLYGON
+452.00 244.00
+452.00 236.00
+456.00 236.00
+460.00 240.00
+456.00 244.00
+*
+3 21
+0
+VECTOR
+460.00 240.00
+480.00 240.00
+*
+6 0
+0
+ARC
+480.00 240.00
+480.00 241.00
+480.00 239.00
+480.00 241.00
+481.00 240.00
+479.00 240.00
+*
+3 0
+0
+VECTOR
+160.00 252.00
+160.00 228.00
+*
+6 0
+0
+VECTOR
+160.00 240.00
+224.00 240.00
+*
+6 0
+0
+ARC
+160.00 240.00
+160.00 239.00
+160.00 241.00
+160.00 239.00
+161.00 240.00
+159.00 240.00
+*
+3 0
+0
+ARC
+200.00 240.00
+200.00 239.00
+200.00 241.00
+200.00 239.00
+201.00 240.00
+199.00 240.00
+*
+3 0
+0
+CENTLEFT
+236.00 240.00
+236.00 236.00
+252.00 236.00
+268.00 236.00
+*
+1 1
+5 $GND$
+POLYGON
+232.00 244.00
+232.00 236.00
+228.00 236.00
+224.00 240.00
+228.00 244.00
+*
+3 21
+0
+TOPRIGHT
+540.00 172.00
+494.00 163.00
+517.00 163.00
+540.00 163.00
+*
+1 1
+10 $DP sub 1$
+BOTRIGHT
+540.00 308.00
+494.00 308.00
+517.00 308.00
+540.00 308.00
+*
+1 1
+10 $DP sub 1$
+VECTOR
+340.00 260.00
+340.00 220.00
+300.00 240.00
+340.00 260.00
+*
+3 0
+0
+VECTOR
+340.00 232.00
+384.00 232.00
+384.00 224.00
+*
+6 0
+0
+POLYGON
+380.00 224.00
+392.00 224.00
+384.00 216.00
+376.00 224.00
+*
+6 21
+0
+VECTOR
+340.00 248.00
+392.00 248.00
+*
+6 0
+0
+BOTLEFT
+396.00 256.00
+396.00 256.00
+416.00 256.00
+437.00 256.00
+*
+1 1
+8 $vv INC$
+POLYGON
+400.00 252.00
+400.00 244.00
+396.00 244.00
+392.00 248.00
+396.00 252.00
+*
+3 21
+0
+CENTRIGHT
+336.00 248.00
+319.00 244.00
+327.00 244.00
+336.00 244.00
+*
+1 1
+3 $-$
+CENTRIGHT
+336.00 232.00
+320.00 228.00
+328.00 228.00
+336.00 228.00
+*
+1 1
+3 $+$
+VECTOR
+784.00 192.00
+768.00 192.00
+768.00 160.00
+784.00 160.00
+*
+3 0
+0
+ARC
+784.00 176.00
+784.00 160.00
+784.00 192.00
+*
+3 180
+0
+VECTOR
+784.00 256.00
+768.00 256.00
+768.00 224.00
+784.00 224.00
+*
+3 0
+0
+ARC
+784.00 240.00
+784.00 224.00
+784.00 256.00
+*
+3 180
+0
+ARC
+832.00 312.00
+832.00 296.00
+832.00 328.00
+*
+3 180
+0
+VECTOR
+832.00 328.00
+816.00 328.00
+816.00 296.00
+832.00 296.00
+*
+3 0
+0
+VECTOR
+744.00 368.00
+744.00 312.00
+772.00 312.00
+*
+6 0
+0
+VECTOR
+744.00 312.00
+744.00 240.00
+768.00 240.00
+*
+6 0
+0
+VECTOR
+728.00 112.00
+744.00 112.00
+744.00 232.00
+768.00 232.00
+*
+6 0
+0
+VECTOR
+800.00 304.00
+816.00 304.00
+*
+6 0
+0
+VECTOR
+816.00 320.00
+800.00 320.00
+800.00 332.00
+720.00 332.00
+*
+6 0
+0
+CENTRIGHT
+708.00 332.00
+683.00 328.00
+695.00 328.00
+708.00 328.00
+*
+1 1
+5 $ITS$
+POLYGON
+712.00 336.00
+712.00 328.00
+716.00 328.00
+720.00 332.00
+716.00 336.00
+*
+3 21
+0
+VECTOR
+760.00 332.00
+760.00 184.00
+768.00 184.00
+*
+6 0
+0
+VECTOR
+760.00 248.00
+768.00 248.00
+*
+6 0
+0
+VECTOR
+752.00 128.00
+752.00 168.00
+768.00 168.00
+*
+6 0
+0
+CENTLEFT
+828.00 240.00
+828.00 236.00
+843.00 236.00
+858.00 236.00
+*
+1 1
+5 $ABP$
+POLYGON
+816.00 244.00
+816.00 236.00
+820.00 236.00
+824.00 240.00
+820.00 244.00
+*
+3 21
+0
+VECTOR
+800.00 240.00
+816.00 240.00
+*
+6 0
+0
+CENTLEFT
+828.00 176.00
+828.00 172.00
+844.00 172.00
+860.00 172.00
+*
+1 1
+5 $ABN$
+POLYGON
+816.00 180.00
+816.00 172.00
+820.00 172.00
+824.00 176.00
+820.00 180.00
+*
+3 21
+0
+VECTOR
+800.00 176.00
+816.00 176.00
+*
+6 0
+0
+VECTOR
+848.00 312.00
+864.00 312.00
+*
+6 0
+0
+POLYGON
+864.00 316.00
+864.00 308.00
+868.00 308.00
+872.00 312.00
+868.00 316.00
+*
+3 21
+0
+CENTLEFT
+876.00 312.00
+876.00 308.00
+891.00 308.00
+907.00 308.00
+*
+1 1
+5 $ABC$
+ARC
+760.00 332.00
+760.00 331.00
+760.00 333.00
+760.00 331.00
+761.00 332.00
+759.00 332.00
+*
+3 0
+0
+ARC
+744.00 368.00
+744.00 367.00
+744.00 369.00
+744.00 367.00
+745.00 368.00
+743.00 368.00
+*
+3 0
+0
+ARC
+744.00 312.00
+744.00 311.00
+744.00 313.00
+744.00 311.00
+745.00 312.00
+743.00 312.00
+*
+3 0
+0
+ARC
+760.00 248.00
+760.00 247.00
+760.00 249.00
+760.00 247.00
+761.00 248.00
+759.00 248.00
+*
+3 0
+0
+VECTOR
+752.00 168.00
+752.00 296.00
+772.00 296.00
+*
+6 0
+0
+ARC
+752.00 128.00
+752.00 127.00
+752.00 129.00
+752.00 127.00
+753.00 128.00
+751.00 128.00
+*
+3 0
+0
+ARC
+752.00 168.00
+752.00 167.00
+752.00 169.00
+752.00 167.00
+753.00 168.00
+751.00 168.00
+*
+3 0
+0
+ARC
+28.00 178.00
+28.00 180.00
+28.00 180.00
+28.00 176.00
+30.00 178.00
+26.00 178.00
+*
+3 0
+0
+VECTOR
+24.00 176.00
+40.00 160.00
+*
+3 0
+0
+ARC
+28.00 142.00
+28.00 144.00
+28.00 144.00
+28.00 140.00
+30.00 142.00
+26.00 142.00
+*
+3 0
+0
+ARC
+14.00 160.00
+12.00 160.00
+12.00 160.00
+16.00 160.00
+14.00 162.00
+14.00 158.00
+*
+3 0
+0
+VECTOR
+28.00 300.00
+0.00 300.00
+0.00 180.00
+28.00 180.00
+*
+6 0
+0
+VECTOR
+12.00 320.00
+-16.00 320.00
+-16.00 160.00
+12.00 160.00
+*
+6 0
+0
+VECTOR
+28.00 140.00
+-32.00 140.00
+-32.00 340.00
+28.00 340.00
+*
+6 0
+0
+CENTRIGHT
+-60.00 268.00
+-116.00 264.00
+-88.00 264.00
+-60.00 264.00
+*
+1 1
+12 $+ ^ vv REF$
+POLYGON
+-56.00 272.00
+-56.00 264.00
+-52.00 264.00
+-48.00 268.00
+-52.00 272.00
+*
+3 21
+0
+VECTOR
+-48.00 268.00
+-32.00 268.00
+*
+6 0
+0
+ARC
+-32.00 268.00
+-32.00 267.00
+-32.00 269.00
+-32.00 267.00
+-31.00 268.00
+-33.00 268.00
+*
+3 0
+0
+ARC
+-16.00 240.00
+-16.00 239.00
+-16.00 241.00
+-16.00 239.00
+-15.00 240.00
+-17.00 240.00
+*
+3 0
+0
+VECTOR
+-48.00 240.00
+-16.00 240.00
+*
+6 0
+0
+POLYGON
+-56.00 244.00
+-56.00 236.00
+-52.00 236.00
+-48.00 240.00
+-52.00 244.00
+*
+3 21
+0
+CENTRIGHT
+-60.00 240.00
+-100.00 236.00
+-80.00 236.00
+-60.00 236.00
+*
+1 1
+6 $AGND$
+CENTRIGHT
+-60.00 212.00
+-117.00 208.00
+-89.00 208.00
+-60.00 208.00
+*
+1 1
+12 $- ^ vv REF$
+POLYGON
+-56.00 216.00
+-56.00 208.00
+-52.00 208.00
+-48.00 212.00
+-52.00 216.00
+*
+3 21
+0
+VECTOR
+-48.00 212.00
+0.00 212.00
+*
+6 0
+0
+ARC
+0.00 212.00
+0.00 211.00
+0.00 213.00
+0.00 211.00
+1.00 212.00
+-1.00 212.00
+*
+3 0
+0
+BOTRIGHT
+24.00 344.00
+-6.00 344.00
+9.00 344.00
+24.00 344.00
+*
+1 1
+5 $ABP$
+BOTRIGHT
+12.00 324.00
+-19.00 324.00
+-4.00 324.00
+12.00 324.00
+*
+1 1
+5 $ABC$
+BOTRIGHT
+24.00 304.00
+-8.00 304.00
+8.00 304.00
+24.00 304.00
+*
+1 1
+5 $ABN$
+BOTRIGHT
+24.00 184.00
+-6.00 184.00
+9.00 184.00
+24.00 184.00
+*
+1 1
+5 $ABP$
+BOTRIGHT
+12.00 164.00
+-19.00 164.00
+-4.00 164.00
+12.00 164.00
+*
+1 1
+5 $ABC$
+BOTRIGHT
+24.00 144.00
+-8.00 144.00
+8.00 144.00
+24.00 144.00
+*
+1 1
+5 $ABN$
+VECTOR
+68.00 260.00
+52.00 260.00
+52.00 220.00
+68.00 220.00
+*
+6 0
+0
+VECTOR
+68.00 244.00
+68.00 236.00
+*
+6 0
+0
+VECTOR
+68.00 240.00
+40.00 240.00
+*
+6 0
+0
+VECTOR
+52.00 260.00
+40.00 260.00
+*
+6 0
+0
+CENTRIGHT
+32.00 260.00
+-21.00 256.00
+5.00 256.00
+32.00 256.00
+*
+1 1
+12 $+ ^ vv SIG$
+POLYGON
+32.00 264.00
+32.00 256.00
+36.00 256.00
+40.00 260.00
+36.00 264.00
+*
+3 21
+0
+POLYGON
+32.00 244.00
+32.00 236.00
+36.00 236.00
+40.00 240.00
+36.00 244.00
+*
+3 21
+0
+CENTRIGHT
+32.00 240.00
+-22.00 236.00
+5.00 236.00
+32.00 236.00
+*
+1 1
+12 $- ^ vv SIG$
+ARC
+52.00 260.00
+52.00 259.00
+52.00 261.00
+52.00 259.00
+53.00 260.00
+51.00 260.00
+*
+3 0
+0
+ARC
+68.00 240.00
+68.00 239.00
+68.00 241.00
+68.00 239.00
+69.00 240.00
+67.00 240.00
+*
+3 0
+0
+VECTOR
+64.00 112.00
+96.00 112.00
+96.00 96.00
+*
+6 0
+0
+VECTOR
+88.00 96.00
+104.00 96.00
+*
+3 0
+0
+VECTOR
+88.00 92.00
+104.00 92.00
+*
+6 0
+0
+VECTOR
+96.00 92.00
+96.00 76.00
+*
+6 0
+0
+ARC
+90.00 68.00
+88.00 68.00
+88.00 68.00
+92.00 68.00
+90.00 70.00
+90.00 66.00
+*
+3 0
+0
+VECTOR
+92.00 64.00
+96.00 76.00
+*
+3 0
+0
+ARC
+102.00 68.00
+100.00 68.00
+100.00 68.00
+104.00 68.00
+102.00 70.00
+102.00 66.00
+*
+3 0
+0
+VECTOR
+128.00 92.00
+128.00 4.00
+*
+6 0
+0
+VECTOR
+120.00 96.00
+136.00 96.00
+*
+3 0
+0
+VECTOR
+120.00 92.00
+136.00 92.00
+*
+6 0
+0
+BOTCENT
+128.00 124.00
+119.00 124.00
+128.00 124.00
+137.00 124.00
+*
+1 1
+3 $A$
+POLYGON
+132.00 120.00
+124.00 120.00
+124.00 116.00
+128.00 112.00
+132.00 116.00
+*
+3 21
+0
+VECTOR
+128.00 112.00
+128.00 96.00
+*
+6 0
+0
+VECTOR
+88.00 68.00
+76.00 68.00
+76.00 28.00
+88.00 28.00
+*
+6 0
+0
+VECTOR
+104.00 68.00
+116.00 68.00
+116.00 28.00
+104.00 28.00
+*
+6 0
+0
+BOTLEFT
+100.00 100.00
+100.00 100.00
+114.00 100.00
+128.00 100.00
+*
+1 1
+6 $cc Y$
+BOTLEFT
+132.00 100.00
+132.00 100.00
+145.00 100.00
+158.00 100.00
+*
+1 1
+6 $cc Z$
+BOTRIGHT
+92.00 72.00
+46.00 72.00
+69.00 72.00
+92.00 72.00
+*
+1 1
+10 $DP sub 1$
+CENTRIGHT
+52.00 112.00
+8.00 108.00
+30.00 108.00
+52.00 108.00
+*
+1 1
+10 $+ ^ vv O$
+POLYGON
+56.00 116.00
+56.00 108.00
+60.00 108.00
+64.00 112.00
+60.00 116.00
+*
+3 21
+0
+BOTCENT
+384.00 300.00
+362.00 300.00
+384.00 300.00
+406.00 300.00
+*
+1 1
+10 $+ ^ vv O$
+POLYGON
+388.00 288.00
+380.00 288.00
+380.00 292.00
+384.00 296.00
+388.00 292.00
+*
+3 21
+0
+VECTOR
+384.00 288.00
+384.00 268.00
+*
+6 0
+0
+ARC
+384.00 268.00
+384.00 267.00
+384.00 269.00
+384.00 267.00
+385.00 268.00
+383.00 268.00
+*
+3 0
+0
+TOPCENT
+384.00 180.00
+362.00 171.00
+384.00 171.00
+407.00 171.00
+*
+1 1
+10 $- ^ vv O$
+POLYGON
+388.00 192.00
+380.00 192.00
+380.00 188.00
+384.00 184.00
+388.00 188.00
+*
+3 21
+0
+VECTOR
+384.00 192.00
+384.00 212.00
+*
+6 0
+0
+ARC
+384.00 212.00
+384.00 213.00
+384.00 211.00
+384.00 213.00
+385.00 212.00
+383.00 212.00
+*
+3 0
+0
+TOPLEFT
+132.00 -4.00
+132.00 -13.00
+145.00 -13.00
+158.00 -13.00
+*
+1 1
+6 $cc Z$
+VECTOR
+64.00 -16.00
+96.00 -16.00
+96.00 0.00
+*
+6 0
+0
+VECTOR
+88.00 0.00
+104.00 0.00
+*
+3 0
+0
+VECTOR
+88.00 4.00
+104.00 4.00
+*
+6 0
+0
+VECTOR
+96.00 4.00
+96.00 20.00
+*
+6 0
+0
+ARC
+90.00 28.00
+88.00 28.00
+88.00 28.00
+92.00 28.00
+90.00 26.00
+90.00 30.00
+*
+3 0
+0
+VECTOR
+92.00 32.00
+96.00 20.00
+*
+3 0
+0
+ARC
+102.00 28.00
+100.00 28.00
+100.00 28.00
+104.00 28.00
+102.00 26.00
+102.00 30.00
+*
+3 0
+0
+VECTOR
+120.00 0.00
+136.00 0.00
+*
+3 0
+0
+VECTOR
+120.00 4.00
+136.00 4.00
+*
+6 0
+0
+TOPCENT
+128.00 -28.00
+120.00 -37.00
+128.00 -37.00
+136.00 -37.00
+*
+1 1
+3 $B$
+POLYGON
+132.00 -24.00
+124.00 -24.00
+124.00 -20.00
+128.00 -16.00
+132.00 -20.00
+*
+3 21
+0
+VECTOR
+128.00 -16.00
+128.00 0.00
+*
+6 0
+0
+TOPLEFT
+100.00 -4.00
+100.00 -13.00
+114.00 -13.00
+128.00 -13.00
+*
+1 1
+6 $cc Y$
+CENTRIGHT
+92.00 24.00
+46.00 20.00
+69.00 20.00
+92.00 20.00
+*
+1 1
+10 $DP sub 1$
+CENTRIGHT
+52.00 -16.00
+8.00 -20.00
+30.00 -20.00
+52.00 -20.00
+*
+1 1
+10 $+ ^ vv O$
+POLYGON
+56.00 -20.00
+56.00 -12.00
+60.00 -12.00
+64.00 -16.00
+60.00 -20.00
+*
+3 21
+0
+VECTOR
+116.00 48.00
+152.00 48.00
+*
+6 0
+0
+CENTLEFT
+164.00 48.00
+164.00 44.00
+184.00 44.00
+205.00 44.00
+*
+1 1
+8 $vv INC$
+POLYGON
+152.00 44.00
+152.00 52.00
+156.00 52.00
+160.00 48.00
+156.00 44.00
+*
+3 21
+0
+ARC
+116.00 48.00
+116.00 49.00
+116.00 47.00
+116.00 49.00
+117.00 48.00
+115.00 48.00
+*
+3 0
+0
+ARC
+128.00 48.00
+128.00 49.00
+128.00 47.00
+128.00 49.00
+129.00 48.00
+127.00 48.00
+*
+3 0
+0
+ARC
+76.00 48.00
+76.00 49.00
+76.00 47.00
+76.00 49.00
+77.00 48.00
+75.00 48.00
+*
+3 0
+0
+VECTOR
+56.00 48.00
+76.00 48.00
+*
+6 0
+0
+POLYGON
+48.00 52.00
+48.00 44.00
+52.00 44.00
+56.00 48.00
+52.00 52.00
+*
+3 21
+0
+CENTRIGHT
+48.00 48.00
+15.00 44.00
+31.00 44.00
+48.00 44.00
+*
+1 1
+7 $vv B1$
+-1
diff --git a/contrib/groff/doc/grnexmpl.me b/contrib/groff/doc/grnexmpl.me
new file mode 100644
index 000000000000..f7f684c82b47
--- /dev/null
+++ b/contrib/groff/doc/grnexmpl.me
@@ -0,0 +1,86 @@
+.sc
+.nr pp 12
+.nr tp 12
+.nr sp 12
+.nr fi 0
+.st ug
+.ls 1
+.po 1i
+.pl 11i
+.EQ
+gsize 12
+delim $$
+define // 'over down 10'
+define sw 'phi sub'
+define aa 'A sub'
+define vv 'V sub'
+define mm 'M sub'
+define nn 'N sub'
+define cc 'C sub'
+define ll 'L sub'
+define rr 'R sub'
+define ss 'S sub'
+define gg 'g sub'
+define ff 'F sub'
+define qq 'Q sub'
+define qqq '{C prime} sub'
+define pp 'P sub'
+define tt 'T sub'
+define zz 'Z sub'
+define kk 'K sub'
+define ii 'I sub'
+define iis 'IC sub'
+define e2 '2 sup'
+define sunc '{ sin x } / x'
+define vddm1V 'vv DD - 1 ^ roman V'
+define vssp1V 'vv SS + 1 ^ roman V'
+.EN
+.pp
+The following slide shows the complete schematics of the
+fully-differential RIC. The operation includes a
+correlated-double-sampling phase that occurs once every 256
+clock periods, also called the
+.i "spreading ratio" .
+This reset phase is controlled by clocks $ DP sub 1 $ and $ DP
+sub 2 $ in which the integrator is initialized by totally
+removing the charge from $ cc F $ and storing the low-frequency
+noise of the op amp in $ cc C $. At the same time the comparison
+thresholds are set.
+.fl
+.po -0.2i
+.sp 2
+.lp
+.(b
+.EQ
+gsize -4
+.EN
+.GS
+roman 1
+italics 2
+bold 3
+special 4
+narrow 1
+medium 3
+thick 5
+width 5.5
+l mg
+file grnexmpl.g
+.GE
+.EQ
+gsize +4
+.EN
+.)b
+.fl
+.po +0.2i
+.pp
+The faster clocks are $ PN $, $ ITS $ and $ SP $. The sampling
+capacitor $ cc S $ performs the delayed subtraction of a sample
+of the input signal $ +- ^ vv SIG $ and a choice of $ - ^ vv REF
+$, $ AGND $ or $ + ^ vv REF $ according to the operations
+performed by the logic partially depicted operating on past
+results of the comparisons. The synchronous comparators are
+reset at this fast rates, thus performing one comparison for
+every fast clock cycle. The dynamic common-mode feedback
+arrangement operates synchronously with the reset time slot and
+its configuration is equivalent to that in the differential
+feedback path.
diff --git a/contrib/groff/doc/groff.texinfo b/contrib/groff/doc/groff.texinfo
index 85d92c6664b4..ca13abb78320 100644
--- a/contrib/groff/doc/groff.texinfo
+++ b/contrib/groff/doc/groff.texinfo
@@ -1,4 +1,11 @@
\input texinfo @c -*-texinfo-*-
+
+@c
+@c If you use texinfo.tex 1999-09-25.10 or earlier please convert this
+@c manual with `texi2dvi -e groff.texinfo' due to a bug in expanding
+@c user-defined macros.
+@c
+
@c %**start of header (This is for running Texinfo on a region.)
@setfilename groff
@settitle The GNU Troff Manual
@@ -7,9 +14,65 @@
@c %**end of header (This is for running Texinfo on a region.)
+@c We use the following indices:
+@c
+@c cindex: concepts
+@c findex: requests, escapes, and functions
+@c vindex: registers
+@c kindex: commands in font files
+@c pindex: programs and files
+@c tindex: environment variables
+@c maindex: macros and strings
+@c glindex: glyph names
+@c opindex: operators
+@c
+@c tindex and cindex are merged.
+
+@defcodeindex ma
+@defcodeindex gl
+@defcodeindex op
+@syncodeindex tp cp
+
+
+@macro Deffn{category, name, arg}
+@deffn \category\ @t{\name\} \arg\
+@end macro
+
+@macro end_Deffn
+@end deffn
+@end macro
+
+@macro Deffnx{category, name, arg}
+@deffnx \category\ @t{\name\} \arg\
+@end macro
+
+@macro end_Deffnx
+@end deffnx
+@end macro
+
+@macro Defmac{name, arg}
+@defmac @t{\name\} \arg\
+@end macro
+
+@macro end_Defmac
+@end defmac
+@end macro
+
+@macro Defmacx{name, arg}
+@defmacx @t{\name\} \arg\
+@end macro
+
+@macro end_Defmacx
+@end defmacx
+@end macro
+
+
+@c XXX comment all examples
+
+
@dircategory Miscellaneous
@direntry
-* Groff: (groff). The GNU troff document formatting system.
+* Groff: (groff). The GNU troff document formatting system.
@end direntry
@@ -22,13 +85,13 @@
@ifinfo
-This Info file documents GNU troff version 1.12.
+This Info file documents GNU troff version 1.16.
Published by the Free Software Foundation
59 Temple Place, Suite 330
Boston, MA 02111-1307 USA
-Copyright (C) 1994, 1999 Free Software Foundation, Inc.
+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
@@ -68,22 +131,21 @@ instead of in the original English.
@titlepage
@title groff
-@subtitle The GNU implementation of @code{groff}
-@subtitle Edition 1.12
-@subtitle October 1999
+@subtitle The GNU implementation of @code{troff}
+@subtitle Edition 1.16
+@subtitle Spring 2000
@author by Trent A.@w{ }Fisher
-@author and the maintainer of groff
+@author and Werner Lemberg
@c Include the Distribution inside the titlepage environment so
@c that headings are turned off. Headings on and off do not work.
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1994, 1999 Free Software Foundation, Inc.
-
+Copyright @copyright@w{ }1994-2000 Free Software Foundation,@w{ }Inc.
@sp 2
-Version 1.13 of @code{groff}, @*
-October 1999
+Version 1.16 of @code{groff}, @*
+Spring 2000
@sp 2
Published by the Free Software Foundation @*
59 Temple Place, Suite 330 @*
@@ -96,10 +158,10 @@ preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU General Public License'' is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
+section entitled ``GNU General Public License'' is included exactly as
+in the original, and 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,
@@ -116,7 +178,7 @@ Cover art by Etienne Suvasa.
@node Top, Copying, (dir), (dir)
@ifinfo
-This Info file documents groff version 1.13, the GNU implementation of
+This Info file documents groff version 1.16, the GNU implementation of
the troff typesetting system.
This is an in-progress document; contributions, comments, or
@@ -128,25 +190,19 @@ contributions are welcome. Send them to bug-groff@@gnu.org.
* Introduction::
* Invoking groff::
* Tutorial for Macro Users::
-* -man::
-* -ms::
-* -me::
-* -mm::
+* Macro Packages::
* Programming Tutorial::
-* geqn::
-* gtbl::
-* gpic::
-* grap::
-* grefer::
-* gsoelim::
-* Devices::
+* Preprocessors::
+* Output Devices::
* File formats::
* Installation::
-* Request Index::
+* Request and Escape Index::
+* Operator Index::
* Register Index::
-* String Index::
-* Macro Index::
-* Program Index::
+* Macro and String Index::
+* Glyph Name Index::
+* Font File Keyword Index::
+* Program and File Index::
* Concept Index::
@end menu
@@ -158,8 +214,8 @@ contributions are welcome. Send them to bug-groff@@gnu.org.
@center Version 2, June 1991
@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA 02111, USA
+Copyright @copyright{}@w{ }1989, 1991 Free Software Foundation, Inc.
+59@w{ }Temple Place, Suite@w{ }330, Boston, MA@w{ }02111, USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
@@ -303,27 +359,29 @@ scope of this License.
@item
You may copy and distribute the Program (or a work based on it, under
Section@w{ }2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
+Sections@w{ }1 and@w{ }2 above provided that you also do one of the
+following:
@enumerate a
@item
Accompany it with the complete corresponding machine-readable source
-code, which must be distributed under the terms of Sections 1 and 2
-above on a medium customarily used for software interchange; or,
+code, which must be distributed under the terms of Sections@w{ }1 and@w{
+}2 above on a medium customarily used for software interchange; or,
@item
Accompany it with a written offer, valid for at least three years, to
give any third party, for a charge no more than your cost of physically
performing source distribution, a complete machine-readable copy of the
-corresponding source code, to be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
+corresponding source code, to be distributed under the terms of
+Sections@w{ }1 and@w{ }2 above on a medium customarily used for software
+interchange; or,
@item
Accompany it with the information you received as to the offer to
distribute corresponding source code. (This alternative is allowed only
for noncommercial distribution and only if you received the program in
object code or executable form with such an offer, in accord with
-Subsection b above.)
+Subsection@w{ }b above.)
@end enumerate
The source code for a work means the preferred form of the work for
@@ -490,19 +548,19 @@ the exclusion of warranty; and each file should have at least the
@var{one line to give the program's name and an idea of what it does.}
Copyright (C) 19@var{yy} @var{name of author}
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@. See the GNU
General Public License for more details.
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-59 Temple Place, Suite 330, Boston, MA 02111, USA.
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
@end smallexample
Also add information on how to contact you by electronic and paper mail.
@@ -513,15 +571,15 @@ when it starts in an interactive mode:
@smallexample
Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type
-`show w'. This is free software, and you are welcome to redistribute it
-under certain conditions; type `show c' for details.
+`show w'. This is free software, and you are welcome to redistribute
+it under certain conditions; type `show c' for details.
@end smallexample
-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than @samp{show w} and
-@samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
+The hypothetical commands @samp{show@w{ }w} and @samp{show@w{ }c} should
+show the appropriate parts of the General Public License. Of course,
+the commands you use may be called something other than @samp{show@w{
+}w} and @samp{show@w{ }c}; they could even be mouse-clicks or menu items
+-- whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a ``copyright disclaimer'' for the program, if
@@ -529,10 +587,9 @@ necessary. Here is a sample; alter the names:
@smallexample
@group
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written
-by James Hacker.
+Yoyodyne, Inc., hereby disclaims all copyright interest
+in the program `Gnomovision' (which makes passes at compilers)
+written by James Hacker.
@var{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
@@ -547,6 +604,9 @@ General Public License instead of this License.
+@c =====================================================================
+@c =====================================================================
+
@node Introduction, Invoking groff, Copying, Top
@chapter Introduction
@cindex introduction
@@ -554,54 +614,59 @@ General Public License instead of this License.
GNU @code{troff} (or @code{groff}) is a system for typesetting
documents. @code{troff} is very flexible and has been in existence (and
use) for about 3@w{ }decades. It is quite widespread and firmly
-entrenched in the @sc{Unix} community.
-
-
+entrenched in the @acronym{UNIX} community.
@menu
* What Is groff?::
* History::
* groff Capabilities::
-* Macro Packages::
-* Preprocessors::
-* Postprocessors::
+* Macro Package Intro::
+* Preprocessor Intro::
+* Output device intro::
* Credits::
@end menu
+
+@c =====================================================================
+
@node What Is groff?, History, Introduction, Introduction
@section What Is @code{groff}?
@cindex what is @code{groff}?
@cindex @code{groff} -- what is it?
-
-@code{groff} is of an older generation of document preparation systems,
-which operate more like compilers than the more recent interactive
-WYSIWYG @footnote{What You See Is What You Get} systems. @code{groff}
-and its contemporary counterpart, @TeX{}, both work using a @dfn{batch}
-paradigm: The input (or @dfn{source}) files are normal text files with
-embedded formatting commands. These files can then be processed by
-@code{groff} to produce a typeset document on a variety of devices.
+@code{groff} belongs to an older generation of document preparation
+systems, which operate more like compilers than the more recent
+interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
+systems. @code{groff} and its contemporary counterpart, @TeX{}, both
+work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
+normal text files with embedded formatting commands. These files can
+then be processed by @code{groff} to produce a typeset document on a
+variety of devices.
Likewise, @code{groff} should not be confused with a @dfn{word
processor}, since that term connotes an integrated system which includes
an editor and a text formatter. Also, many word processors follow the
-WYSIWYG paradigm which was discussed earlier.
+@acronym{WYSIWYG} paradigm which was discussed earlier.
-Although WYSIWYG systems may be easier to use, they have a number of
-disadvantages compared to @code{troff}:
+Although @acronym{WYSIWYG} systems may be easier to use, they have a
+number of disadvantages compared to @code{troff}:
-@itemize @bullet{}
+@itemize @bullet
@item
-They must be used on a bitmapped display to do any operations on your
+They must be used on a graphics display to do any operations on a
document.
+
@item
-Most of the WYSIWYG systems are either non-free or are not very
-portable.
+Most of the @acronym{WYSIWYG} systems are either non-free or are not
+very portable.
+
@item
-@code{troff} is firmly entrenched in all @sc{Unix} systems.
+@code{troff} is firmly entrenched in all @acronym{UNIX} systems.
+
@item
It is difficult to have a wide range of capabilities available within
the confines of a GUI/window system.
+
@item
It is more difficult to make global changes to a document.
@end itemize
@@ -613,44 +678,54 @@ impossible to accomplish complex actions.'' --Doug Gwyn (22/Jun/91 in
@end quotation
+@c =====================================================================
@node History, groff Capabilities, What Is groff?, Introduction
@section History
@cindex history
+@cindex @code{runoff}
+@cindex @code{rf}
@code{troff} can trace its origins back to a formatting program called
-@code{runoff} which ran on MIT's CTSS system. This name came from the
-common phrase of the time ``I'll run off a document.''
-
-The first version of @sc{Unix} was developed on a PDP-7 which was
+@code{runoff}, written by J.@w{ }E.@w{ }Saltzer, which ran on MIT's CTSS
+operating system in the mid-sixties. This name came from the common
+phrase of the time ``I'll run off a document.'' Bob Morris ported it to
+the 635 architecture and called the program @code{roff} (an abbreviation
+of @code{runoff}). It has then been rewritten as @code{rf} for the
+PDP-7 (before having @acronym{UNIX}), and at the same time (1969), Doug
+McIllroy rewrote an extended and simplified version of @code{roff} in
+the @acronym{BCPL} programming language.
+
+@cindex @code{roff}
+The first version of @acronym{UNIX} was developed on a PDP-7 which was
sitting around Bell Labs. In 1971 the developers wanted to get a PDP-11
for further work on the operating system. In order to justify the cost
for this system, they proposed that they would implement a document
formatting system for the AT&T patents division. This first formatting
-program was a reimplementation of @code{runoff}. In accordance with
-@sc{Unix}'s penchant for abreviations, it was named @code{roff} (an
-abreviation of @code{runoff}).
+program was a reimplementation of McIllroy's @code{roff}, written by
+J.@w{ }F.@w{ }Ossanna.
+@cindex @code{nroff}
When they needed a more flexible language, a new version of @code{roff}
-called @code{nroff} (Newer @code{roff}) was written. It had a much more
-complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, J.@w{ }F.@w{
-}Ossanna wrote a version of @code{nroff} which would drive it. It was
-dubbed @code{troff} for typesetter @code{roff}, although many people
-have speculated that it actually means Times @code{roff} because of
-@code{troff}'s use of the Times font family by default. As such, the
-name @code{troff} is pronounced t-roff rather than trough.
+called @code{nroff} (``Newer @code{roff}'') was written. It had a much
+more complicated syntax, but provided the basis for all future versions.
+When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
+version of @code{nroff} which would drive it. It was dubbed
+@code{troff}, for ``typesetter @code{roff}'', although many people have
+speculated that it actually means ``Times @code{roff}'' because of the
+use of the Times font family in @code{troff} by default. As such, the
+name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
With @code{troff} came @code{nroff} (they were actually the same program
-except for some @samp{#ifdefs}), which was for producing output for line
-printers and ascii terminals. It understood everything @code{troff}
-did, and ignored the commands which were not aplicable (i.e.@: font
+except for some @samp{#ifdef}s), which was for producing output for line
+printers and character terminals. It understood everything @code{troff}
+did, and ignored the commands which were not applicable (e.g.@: font
changes).
Since there are several things which cannot be done easily in
@code{troff}, work on several preprocessors began. These programs would
transform certain parts of a document into @code{troff}, which made a
-very natural use of pipes in @sc{Unix}.
+very natural use of pipes in @acronym{UNIX}.
The @code{eqn} preprocessor allowed mathematical formul@ae{} to be
specified in a much simpler and more intuitive manner. @code{tbl} is a
@@ -663,16 +738,17 @@ language and produced output specifically for the CAT phototypesetter.
He rewrote it in C, although it was now 7000@w{ }lines of uncommented
code and still dependent on the CAT. As the CAT became less common, and
was no longer supported by the manufacturer, the need to make it support
-other devices became a priority. However, before this could be done, he
-was killed in an auto accident.
+other devices became a priority. However, before this could be done,
+Ossanna was killed in an auto accident.
@pindex ditroff
+@cindex @code{ditroff}
So, Brian Kernighan took on the task of rewriting @code{troff}. The
newly rewritten version produced a device independent code which was
very easy for postprocessors to read and translate to the appropriate
printer codes. Also, this new version of @code{troff} (called
-@code{ditroff}) had several extentions, which included drawing
-functions.
+@code{ditroff} for ``device independent @code{troff}'') had several
+extensions, which included drawing functions.
Due to the additional abilities of the new version of @code{troff},
several new preprocessors appeared. The @code{pic} preprocessor
@@ -683,21 +759,24 @@ other preprocessors, produced @code{pic} code.
James Clark began work on a GNU implementation of @code{ditroff} in
early@w{ }1989. The first version, @code{groff}@w{ }0.3.1, was released
-June@w{ }1990. @code{groff} included
+June@w{ }1990. @code{groff} included:
-@itemize @bullet{}
+@itemize @bullet
@item
-A replacement for @code{ditroff} with many extentions.
+A replacement for @code{ditroff} with many extensions.
+
@item
The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
+
@item
-Postprocessors for ascii devices, PostScript, @TeX{} DVI, and X@w{
-}windows. GNU @code{troff} also eliminated the need for a separate
-@code{nroff} program with a postprocessor which would produce ascii
-output.
+Postprocessors for character devices, @acronym{PostScript}, @TeX{} DVI,
+and X@w{ }windows. GNU @code{troff} also eliminated the need for a
+separate @code{nroff} program with a postprocessor which would produce
+@acronym{ASCII} output.
+
@item
-A version of the @code{-me} macros and an implementation of the
-@code{-man} macros.
+A version of the @file{me} macros and an implementation of the
+@file{man} macros.
@end itemize
Also, a front-end was included which could construct the, sometimes
@@ -705,223 +784,288 @@ painfully long, pipelines required for all the post- and preprocessors.
Development of GNU @code{troff} progressed rapidly, and saw the
additions of a replacement for @code{refer}, an implementation of the
-@code{-ms} and @code{-mm} macros, and a program to deduce how to format
-a document (@code{grog}).
+@file{ms} and @file{mm} macros, and a program to deduce how to format a
+document (@code{grog}).
-It was declared a stable (i.e.@: non beta) package with the release of
+It was declared a stable (i.e.@: non-beta) package with the release of
version@w{ }1.04 around November@w{ }1991.
+Beginning in@w{ }1999, @code{groff} has new maintainers (the package was
+an orphan for a few years). As a result, new features and programs like
+@code{grn}, a preprocessor for gremlin images, and @code{grohtml}, an
+output device to produce @acronym{HTML} output, have been added.
-@node groff Capabilities, Macro Packages, History, Introduction
+@c =====================================================================
+
+@node groff Capabilities, Macro Package Intro, History, Introduction
@section @code{groff} Capabilities
@cindex @code{groff} capabilities
@cindex capabilities of @code{groff}
So what exactly is @code{groff} capable of doing? @code{groff} provides
-a wide range of low-level text formatting operations. Using these, you
-can perform a wide range of formatting tasks, such as footnotes, table
-of contents, multiple columns, etc.
+a wide range of low-level text formatting operations. Using these, it
+is possible to perform a wide range of formatting tasks, such as
+footnotes, table of contents, multiple columns, etc. Here's a list of
+the most important operations supported by @code{groff}:
-@itemize @bullet{}
+@itemize @bullet
@item
-Text filling, adjusting, and centering
+text filling, adjusting, and centering
+
@item
-Hyphenation
+hyphenation
+
@item
-Page control
+page control
+
@item
-Font and character size control
+font and character size control
+
@item
-Vertical spacing (i.e.@: double spacing)
+vertical spacing (i.e.@: double spacing)
+
@item
-Line length and indenting
+line length and indenting
+
@item
-Macros, strings, diversions, and traps
+macros, strings, diversions, and traps
+
@item
-Number registers
+number registers
+
@item
-Tabs, leaders, and fields
+tabs, leaders, and fields
+
@item
-Input and output conventions and character translation
+input and output conventions and character translation
+
@item
-Overstrike, bracket, line drawing, and zero-width functions
+overstrike, bracket, line drawing, and zero-width functions
+
@item
-Local horizontal and vertical motions and the width function
+local horizontal and vertical motions and the width function
+
@item
-Three-part titles
+three-part titles
+
@item
-Output line numbering
+output line numbering
+
@item
-Conditional acceptance of input
+conditional acceptance of input
+
@item
-Environment switching
+environment switching
+
@item
-Insertions from the standard input
+insertions from the standard input
+
@item
-Input/output file switching
+input/output file switching
+
@item
-Output and error messages
+output and error messages
@end itemize
-@node Macro Packages, Preprocessors, groff Capabilities, Introduction
+@c =====================================================================
+
+@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
@section Macro Packages
@cindex macro packages
-Since @code{groff} provides such low level facilities, it can be quite
+Since @code{groff} provides such low-level facilities, it can be quite
difficult to use by itself. However, @code{groff} provides a
-@dfn{macro} facility which allows you to specify how certain routine
-operations (e.g.@w{ }starting paragraphs, printing headers and footers,
-etc.)@: should be done. These macros can be collected together into a
-@dfn{macro package}. There are a number of macro packages available;
-the most common (and the ones described in this manual) are @code{-man},
-@code{-me}, @code{-ms}, and @code{-mm}.
+@dfn{macro} facility to specify how certain routine operations (e.g.@w{
+}starting paragraphs, printing headers and footers, etc.)@: should be
+done. These macros can be collected together into a @dfn{macro
+package}. There are a number of macro packages available; the most
+common (and the ones described in this manual) are @file{man},
+@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
+
+@c =====================================================================
-@node Preprocessors, Postprocessors, Macro Packages, Introduction
+@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
@section Preprocessors
@cindex preprocessors
Although @code{groff} provides most functions needed to format a
-document, some operations would be unwieldy (i.e.@: drawing pictures).
+document, some operations would be unwieldy (e.g.@: to draw pictures).
Therefore, programs called preprocessors were written which understand
-their own language and produce the necessary groff operations. These
-preprocessors are able to differentiate their own input from the rest of
-the document via markers.
-
-To use a preprocessor, @sc{Unix} pipes are used to feed the output from
-the preprocessor into @code{groff}. Any number of preprocessors may be
-used on a given document; in this case, the preprocessors are linked
-together into one pipeline. However, in @code{groff}, the user does not
-need to construct the pipe, but only tell @code{groff} what
+their own language and produce the necessary @code{groff} operations.
+These preprocessors are able to differentiate their own input from the
+rest of the document via markers.
+
+To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
+from the preprocessor into @code{groff}. Any number of preprocessors
+may be used on a given document; in this case, the preprocessors are
+linked together into one pipeline. However, in @code{groff}, the user
+does not need to construct the pipe, but only tell @code{groff} what
preprocessors to use.
@code{groff} currently has preprocessors for producing tables
(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
-(@code{pic}), and for processing bibliographies (@code{refer}). An
-associated program which is useful when dealing with preprocessors is
-@code{soelim}.
+(@code{pic} and @code{grn}), and for processing bibliographies
+(@code{refer}). An associated program which is useful when dealing with
+preprocessors is @code{soelim}.
-There are other preprocessors in existence, but there are,
-unfortunately, no free implementations available. They are for drawing
-pictures (@code{ideal} and @code{gremlin}), for drawing graphs
-(@code{grap}), and chemical structures (@code{chem}).
+A free implementation of @code{grap}, a preprocessor for drawing graphs,
+can be obtained as an extra package; @code{groff} can use @code{grap}
+also.
+There are other preprocessors in existence, but, unfortunately, no free
+implementations are available. Among them are preprocessors for drawing
+mathematical pictures (@code{ideal}) and chemical structures
+(@code{chem}).
-@node Postprocessors, Credits, Preprocessors, Introduction
-@section Postprocessors
+
+@c =====================================================================
+
+@node Output device intro, Credits, Preprocessor Intro, Introduction
+@section Output Devices
@cindex postprocessors
+@cindex output devices
+@cindex devices for output
@code{groff} actually produces device independent code which may be fed
into a postprocessor which will produce output for a particular device.
-Currently, @code{groff} has postprocessors for PostScript, ascii
-terminals, X@w{ }windows (for previewing), @TeX{} DVI format, and HTML.
+Currently, @code{groff} has postprocessors for @acronym{PostScript}
+devices, character terminals, X@w{ }Windows (for previewing), @TeX{} DVI
+format, HP LaserJet@w{ }4 and Canon LBP printers (which use
+@acronym{CAPSL}), and @acronym{HTML}.
+
+@c =====================================================================
-@node Credits, , Postprocessors, Introduction
+@node Credits, , Output device intro, Introduction
@section Credits
@cindex credits
-
Large portions of this manual were taken from existing documents, most
notably, the manual pages for the @code{groff} package by James Clark,
-and Eric Allman's papers on the @code{-me} macro package.
+and Eric Allman's papers on the @file{me} macro package.
+
+The section on the @file{man} macro package is partly based on Susan@w{
+}G.@: Kleinmann's @file{groff_man} manual page written for the Debian
+GNU/Linux system.
+
+@c =====================================================================
+@c =====================================================================
@node Invoking groff, Tutorial for Macro Users, Introduction, Top
@chapter Invoking @code{groff}
@cindex invoking @code{groff}
@cindex @code{groff} invocation
-
-@pindex groff
-@pindex gtroff
This section focuses on how to invoke the @code{groff} front end. This
front end takes care of the details of constructing the pipeline among
the preprocessors, @code{gtroff} and the postprocessor.
-It has become a tradition that GNU programs get the prefix @dfn{g} to
-distinguish it from its original counterparts provided by the host
-(@pxref{Environment}, for more details). Thus, for example, @code{geqn}
-is GNU @code{eqn}. On operating systems like Linux or the Hurd, which
-don't contain proprietary software, this prefix is omitted since GNU
-@code{troff} is the only used incarnation of @code{troff}. Exception:
-@code{groff} is never replaced by `roff'.
-
+It has become a tradition that GNU programs get the prefix @samp{g} to
+distinguish it from its original counterparts provided by the host (see
+@ref{Environment}, for more details). Thus, for example, @code{geqn} is
+GNU @code{eqn}. On operating systems like Linux or the Hurd, which
+don't contain proprietary software, and on MS-DOS/MS-Windows, where
+@code{troff} and associated programs are not available at all, this
+prefix is omitted since GNU @code{troff} is the only used incarnation of
+@code{troff}. Exception: @code{groff} is never replaced by @code{roff}.
@menu
-* Options::
+* Groff Options::
* Environment::
* Invocation Examples::
@end menu
-@node Options, Environment, Invoking groff, Invoking groff
+
+@c =====================================================================
+
+@node Groff Options, Environment, Invoking groff, Invoking groff
@section Options
@cindex options
-
@pindex groff
@pindex gtroff
@pindex gpic
@pindex geqn
+@pindex ggrn
+@pindex grap
@pindex gtbl
@pindex grefer
@pindex gsoelim
-@code{groff} is a front-end to the groff document formatting system.
-Normally it runs the @code{gtroff} program and a postprocessor
-appropriate for the selected device. The default device is @samp{ps}.
-It can optionally preprocess with any of @code{gpic}, @code{geqn},
-@code{gtbl}, @code{grefer}, or @code{gsoelim}.
+@code{groff} normally runs the @code{gtroff} program and a postprocessor
+appropriate for the selected device. The default device is @samp{ps}
+(but it can be changed when @code{groff} is configured and built). It
+can optionally preprocess with any of @code{gpic}, @code{geqn},
+@code{gtbl}, @code{ggrn}, @code{grap}, @code{grefer}, or @code{gsoelim}.
This section only documents options to the @code{groff} front end. Many
of the arguments to @code{groff} are passed on to @code{gtroff},
therefore those are also included. Arguments to pre- or postprocessors
can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
-gtbl}, @ref{Invoking grefer}, @ref{Invoking gsoelim}, @ref{Invoking
-grotty}, @ref{Invoking grops}, @ref{Invoking grohtml}, @ref{Invoking
-grodvi}, and @ref{Invoking gxditview}
+gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking
+gsoelim}, @ref{Invoking grotty}, @ref{Invoking grops}, @ref{Invoking
+grohtml}, @ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking
+grolbp}, and @ref{Invoking gxditview}.
The command line format for @code{groff} is:
@example
-groff [ -abehilpstvzCENRSVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
+groff [ -abeghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
[ -T@var{def} ] [ -f@var{fam} ] [ -w@var{name} ] [ -W@var{name} ]
[ -M@var{dir} ] [ -d@var{cs} ] [ -r@var{cn} ] [ -n@var{num} ]
- [ -o@var{list} ] [ -P@var{arg} ] [ -L@var{arg} ]
+ [ -o@var{list} ] [ -P@var{arg} ] [ -L@var{arg} ] [ -I@var{dir} ]
[ @var{files}@dots{} ]
@end example
-The command line format for @code{gtroff} is as follows. As you can
-see, many of the options to @code{groff} are actually passed on to
-@code{gtroff}.
+The command line format for @code{gtroff} is as follows.
@example
-gtroff [ -abivzCER ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
+gtroff [ -abivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
[ -f@var{fam} ] [ -m@var{name} ] [ -n@var{num} ]
[ -o@var{list} ] [ -r@var{cn} ] [ -T@var{name} ]
[ -F@var{dir} ] [ -M@var{dir} ] [ @var{files}@dots{} ]
@end example
-Options without an argument can be grouped behind a single @samp{-}. A
-filename of @samp{-} denotes the standard input.
+@noindent
+Obviously, many of the options to @code{groff} are actually passed
+on to @code{gtroff}.
+
+Options without an argument can be grouped behind a single @option{-}.
+A filename of @file{-} denotes the standard input. It is possible to
+have whitespace between an option and its parameter.
-@pindex grog
The @code{grog} command can be used to guess the correct @code{groff}
-command to use to format a file.
+command to format a file.
+
+Here's the description of the command-line options:
+@cindex command-line options
@table @samp
@item -h
Print a help message.
+
@item -e
Preprocess with @code{geqn}.
+
@item -t
Preprocess with @code{gtbl}.
+
+@item -g
+Preprocess with @code{ggrn}.
+
+@item -G
+Preprocess with @code{grap}.
+
@item -p
Preprocess with @code{gpic}.
+
@item -s
Preprocess with @code{gsoelim}.
+
@item -R
Preprocess with @code{grefer}. No mechanism is provided for passing
arguments to @code{grefer} because most @code{grefer} options have
@@ -929,224 +1073,390 @@ equivalent commands which can be included in the file. @xref{grefer},
for more details.
@pindex troffrc
-Note that @code{gtroff} also accepts a @samp{-R} option, which is not
+@pindex troffrc-end
+Note that @code{gtroff} also accepts a @option{-R} option, which is not
accessible via @code{groff}. This option prevents the loading of the
-@file{troffrc} file.
+@file{troffrc} and @file{troffrc-end} files.
+
@item -v
Make programs run by @code{groff} print out their version number.
+
@item -V
Print the pipeline on stdout instead of executing it.
+
@item -z
-Suppress output from @code{gtroff}. Only error messages will be printed.
+Suppress output from @code{gtroff}. Only error messages will be
+printed.
+
@item -Z
Do not postprocess the output of @code{gtroff}. Normally @code{groff}
will automatically run the appropriate postprocessor.
+
@item -P@var{arg}
Pass @var{arg} to the postprocessor. Each argument should be passed
-with a separate @samp{-P} option. Note that groff does not prepend
-@samp{-} to @var{arg} before passing it to the postprocessor.
+with a separate @option{-P} option. Note that @code{groff} does not
+prepend @samp{-} to @var{arg} before passing it to the postprocessor.
+
@item -l
Send the output to a printer. The command used for this is specified by
the print command in the device description file.
+
@item -L@var{arg}
Pass @var{arg} to the spooler. Each argument should be passed with a
-separate @samp{-L} option. Note that @code{groff} does not prepend a
+separate @option{-L} option. Note that @code{groff} does not prepend a
@samp{-} to @var{arg} before passing it to the postprocessor.
+
@item -T@var{dev}
-Prepare output for device @var{dev}. The default device is @samp{ps}.
-The following are the output devices currently available:
-@table @samp
+Prepare output for device @var{dev}. The default device is @samp{ps},
+unless changed when @code{groff} was configured and built. The
+following are the output devices currently available:
+
+@table @code
@item ps
-For PostScript printers and previewers.
+For @acronym{PostScript} printers and previewers.
+
@item dvi
-For TeX dvi format.
+For @TeX{} DVI format.
+
@item X75
-For a 75 dpi X11 previewer.
+For a 75@dmn{dpi} X11 previewer.
+
@item X100
-For a 100dpi X11 previewer.
+For a 100@dmn{dpi} X11 previewer.
+
@item ascii
For typewriter-like devices.
+
@item latin1
-For typewriter-like devices using the ISO Latin-1 character set.
+For typewriter-like devices that support the @w{Latin-1} (@w{ISO 8859-1})
+character set.
+
+@item utf8
+For typewriter-like devices which use the Unicode (@w{ISO 10646})
+character set with @w{UTF-8} encoding.
+
+@item cp1047
+@cindex @acronym{EBCDIC} encoding
+@cindex cp1047
+@cindex IBM cp1047
+For typewriter-like devices which use the @acronym{EBCDIC} encoding IBM
+cp1047.
+
@item lj4
For an HP LaserJet4-compatible (or other PCL5-compatible) printer.
+
+@item lbp
+For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
+printers).
+
@item html
-To produce HTML output.
+To produce @acronym{HTML} output.
@end table
+@vindex .T
+@maindex \*(.T
+The predefined @code{gtroff} string register @code{.T} contains the
+current output device; the read-only number register @code{.T} is set
+to@w{ }1 if this option is used (which is always true if @code{groff} is
+used to call @code{gtroff}). @xref{Built-in Registers}.
+
The postprocessor to be used for a device is specified by the
@code{postpro} command in the device description file. (@xref{Font
-Files}, for more info.) This can be overridden with the @samp{-X}
+Files}, for more info.) This can be overridden with the @option{-X}
option.
+
@item -X
Preview with @code{gxditview} instead of using the usual postprocessor.
-This is unlikely to produce good results except with @samp{-Tps}.
+This is unlikely to produce good results except with @option{-Tps}.
+
+Note that this is not the same as using @option{-TX75} or
+@option{-TX100} to view a document with @code{gxditview}: The former
+will use the metrics of the specified device, whereas the latter will
+use X-specific fonts and metrics.
+
@item -N
Don't allow newlines with @code{eqn} delimiters. This is the same as
-the @samp{-N} option in @code{geqn}.
+the @option{-N} option in @code{geqn}.
+
@item -S
-Safer mode. Pass the @samp{-S} option to @code{gpic} and use the
-@samp{-msafer} macros with @code{gtroff}.
+Safer mode. Pass the @option{-S} option to @code{gpic} and use the
+@option{-msafer} macros with @code{gtroff} (enabled by default).
+
+@item -U
+Unsafe mode. Reverts to the old unsafe behaviour.
+
@item -a
-Generate an ASCII approximation of the typeset output.
+@vindex .A
+Generate an @acronym{ASCII} approximation of the typeset output. The
+read-only register @code{.A} is then set to@w{ }1. @xref{Built-in
+Registers}.
+
@item -b
Print a backtrace with each warning or error message. This backtrace
should help track down the cause of the error. The line numbers given
-in the backtrace may not always be correct: @code{troff}'s idea of line
-numbers gets confused by @code{as} or @code{am} requests.
+in the backtrace may not always be correct: @code{gtroff} can get
+confused by @code{as} or @code{am} requests while counting line numbers.
+
@item -i
Read the standard input after all the named input files have been
processed.
+
@item -w@var{name}
Enable warning @var{name}. Available warnings are described in
-@ref{Debugging}. Multiple @samp{-w} options are allowed.
+@ref{Debugging}. Multiple @option{-w} options are allowed.
+
@item -W@var{name}
-Inhibit warning @var{name}. Multiple @samp{-W} options are allowed.
+Inhibit warning @var{name}. Multiple @option{-W} options are allowed.
+
@item -E
Inhibit all error messages.
+
@item -C
-Enable compatibility mode.
+Enable compatibility mode. @xref{Implementation Differences}, for the
+list of incompatibilites between @code{groff} and traditional Unix
+@code{troff}.
+
@item -d@var{cs}
@itemx -d@var{name}=s
-Define @var{c} or @var{name} to be a string @var{s}; @var{c} must be a
-one-letter @var{name}.
+Define @var{c} or @var{name} to be a string @var{s}. @var{c} must be a
+one-letter name; @var{name} can be of arbitrary length.
+
@item -f@var{fam}
Use @var{fam} as the default font family.
+
@item -m@var{name}
Read in the file @file{tmac.@var{name}}. Normally this will be searched
-for in @code{groff}'s lib directory.
+for in the library directory of @code{groff}.
+
@item -n@var{num}
Number the first page @var{num}.
+
@item -o@var{list}
+@vindex .P
Output only pages in @var{list}, which is a comma-separated list of page
-ranges; @var{n} means print page @var{n}, @samp{@var{m}-@var{n}} means
-print every page between @var{m} and @var{n}, @samp{-@var{n}} means
-print every page up to @var{n}, @samp{@var{n}-} means print every page
-from @var{n}. @code{troff} will exit after printing the last page in
-the list.
+ranges; @samp{@var{n}} means print page @var{n}, @samp{@var{m}-@var{n}}
+means print every page between @var{m} and @var{n}, @samp{-@var{n}}
+means print every page up to @var{n}, @samp{@var{n}-} means print every
+page beginning with @var{n}. @code{gtroff} will exit after printing the
+last page in the list. All the ranges are inclusive on both ends.
+
+Within @code{gtroff}, this information can be extracted with the
+@samp{.P} register. @xref{Built-in Registers}.
+
@item -r@var{cn}
@itemx -r@var{name}=@var{n}
-Set number register @var{c} or @var{name} to @var{n}; @var{c} must be a
-one-letter @var{name}; @var{n} can be any troff numeric expression.
+Set number register @var{c} or @var{name} to the value @var{n}. @var{c}
+must be a one-letter name; @var{name} can be of arbitrary length.
+@var{n} can be any @code{gtroff} numeric expression.
+
@item -F@var{dir}
-Search @var{dir} for subdirectories dev@var{name} (@var{name} is the
-name of the device) for the @file{DESC} file and font files before the
-normal directory.
+Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
+(@var{name} is the name of the device), for the @file{DESC} file, and
+for font files before looking in the standard directory.
+
@item -M@var{dir}
-Search directory @var{dir} for macro files before the normal directory.
+Search directory @file{@var{dir}} for macro files before the standard
+directory.
+
+@item -I@var{dir}
+This option is as described in @ref{gsoelim}. It implies the
+@option{-s} option.
@end table
+@c =====================================================================
-@node Environment, Invocation Examples, Options, Invoking groff
+@node Environment, Invocation Examples, Groff Options, Invoking groff
@section Environment
-@cindex environment
+@cindex environment variables
+@cindex variables in environment
-
-There are also several environment variables which can modify groff's
-behavior.
+There are also several environment variables (of the operating system,
+not within @code{gtroff}) which can modify the behavior of @code{groff}.
@table @code
@item GROFF_COMMAND_PREFIX
+@tindex GROFF_COMMAND_PREFIX, environment variable
If this is set to @var{X}, then @code{groff} will run
-@var{X}@code{troff} instead of @code{gtroff}. This also applies to
-@code{tbl}, @code{pic}, @code{eqn}, @code{refer}, and @code{soelim}. It
-does not apply to @code{grops}, @code{grodvi}, @code{grotty},
-@code{grohtml}, @code{grolj4}, and @code{gxditview}.
+@code{@var{X}troff} instead of @code{gtroff}. This also applies to
+@code{tbl}, @code{pic}, @code{eqn}, @code{grn}, @code{refer}, and
+@code{soelim}. It does not apply to @code{grops}, @code{grodvi},
+@code{grotty}, @code{grohtml}, @code{grolj4}, and @code{gxditview}.
+
@item GROFF_TMAC_PATH
-A colon separated list of directories in which to search for macro
+@tindex GROFF_TMAC_PATH, environment variable
+A colon-separated list of directories in which to search for macro
files.
+
@item GROFF_TYPESETTER
-Default device.
+@tindex GROFF_TYPESETTER, environment variable
+The default output device.
+
@item GROFF_FONT_PATH
-A colon separated list of directories in which to search for the
+@tindex GROFF_FONT_PATH, environment variable
+A colon-separated list of directories in which to search for the
@code{dev}@var{name} directory.
+
@item PATH
-The search path for commands executed by groff.
+@tindex PATH, environment variable
+The search path for commands executed by @code{groff}.
+
@item GROFF_TMPDIR
+@tindex GROFF_TMPDIR, environment variable
+@tindex TMPDIR, environment variable
The directory in which temporary files will be created. If this is not
-set and @code{TMPDIR} is set, temporary files will be created in that
-directory. Otherwise temporary files will be created in @code{/tmp}.
-The @code{grops} and @code{grefer} commands can create temporary files.
+set and @env{TMPDIR} is set, temporary files will be created in that
+directory. Otherwise temporary files will be created in a
+system-dependent default directory (on Unix and GNU/Linux systems, this
+is usually @file{/tmp}). The @code{grops} and @code{grefer} commands
+can create temporary files in this directory.
@end table
+Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
+rather than colons, to separate the directories in the lists described
+above.
+
+
+@c =====================================================================
@node Invocation Examples, , Environment, Invoking groff
@section Invocation Examples
@cindex invocation examples
@cindex examples of invocation
-
This section will list several common uses of @code{groff} and the
command line which will accomplish it.
@example
groff file
-groff -X -me file
-groff -mm -rD1 -z file
-groff -tps -me file | lpr -Plw2
-... any more?? ...
@end example
-@subsection @code{grog}
+@noindent
+This command processes @file{file} without a macro package or a
+preprocessor. The output device is the default, @samp{ps}, and the
+output is sent to stdout.
+
+@example
+groff -t -mandoc -Tascii file | less
+@end example
+
+@noindent
+This is basically what a call to the @code{man} program does. The
+manual page @file{file} is processed with the @file{mandoc} macros
+(which in turn either calls the @file{man} or the @file{mdoc} macro
+package), using the @code{tbl} preprocessor and the @acronym{ASCII}
+output device. Finally, the result is displayed with the @code{less}
+pager.
+
+@example
+groff -X -m me file
+@end example
+
+@noindent
+Preview @file{file} with @code{gxditview}, using the @file{me} macro
+package. Since no @option{-T} option is specified, use the default
+device (@samp{ps}). Note that you can either say @w{@samp{-m me}} or
+@w{@samp{-me}}; the latter is an anachronism from the early days of
+@acronym{UNIX}.@footnote{The same is true for the other main macro
+packages that come with @code{groff}: @file{man}, @file{mdoc},
+@file{ms}, @file{mm}, and @file{mandoc}. This won't work in general;
+for example, to load @file{tmac.safer}, either @samp{-msafer} or
+@w{@samp{-m safer}} must be used.}
+
+@example
+groff -man -rD1 -z file
+@end example
-@code{grog} reads files and guesses which of the @code{groff}
-preprocessors and/or macro packages are are required for formatting
-them, and prints the @code{groff} command including those options on the
-standard output. The options generated are one of @samp{-e},
-@samp{-man}, @samp{-me}, @samp{-mm}, @samp{-ms}, @samp{-p}, @samp{-s},
-and @samp{-t}.
+@noindent
+Check @file{file} with the @file{man} macro package, forcing
+double-sided printing -- don't produce any output.
+
+@c ---------------------------------------------------------------------
+
+@menu
+* grog::
+@end menu
-A filename of @samp{-} 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,
+@node grog, , Invocation Examples, Invocation Examples
+@subsection @code{grog}
+
+@pindex grog
+@code{grog} reads files, guesses which of the @code{groff} preprocessors
+and/or macro packages are required for formatting them, and prints the
+@code{groff} command including those options on the standard output.
+The options generated are one of @option{-e}, @option{-man},
+@option{-me}, @option{-mm}, @option{-ms}, @option{-p}, @option{-R},
+@option{-g}, @option{-G}, @option{-s}, and @option{-t}.
+
+A special file name @file{-} 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,
@example
grog -Tdvi paper.ms
@end example
-will guess the approriate command to print @file{paper.ms} and then run
-it after adding the @samp{-Tdvi} option.
+@noindent
+will guess the appropriate command to print @file{paper.ms} and then
+print it to the command line after adding the @option{-Tdvi} option.
+For direct execution, enclose the call to @code{grog} in backquotes at
+the @acronym{UNIX} shell prompt:
+@example
+`grog -Tdvi paper.ms` > paper.dvi
+@end example
-@node Tutorial for Macro Users, -man, Invoking groff, Top
+@noindent
+As seen in the example, it is still necessary to redirect the output to
+something meaningful (i.e.@: either a file or a pager program like
+@code{less}).
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
@chapter Tutorial for Macro Users
@cindex tutorial for macro users
-@cindex macro tutorial for users
+@cindex macros, tutorial for users
@cindex user's tutorial for macros
@cindex user's macro tutorial
Most users tend to use a macro package to format their papers. This
-means that the whole breadth of @code{groff} is not neccessary for most
+means that the whole breadth of @code{groff} is not necessary for most
people. This chapter covers the material needed to efficiently use a
macro package.
-
@menu
* Basics::
* Common Features::
@end menu
+
+@c =====================================================================
+
@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
@section Basics
-@cindex basics
-
+@cindex basics of macros
+@cindex macro basics
-This section covers some of the basic concepts you will need to
-understand to use a macro package.@footnote{This section is derived from
-@cite{Writing Papers with nroff using -me} by Eric P.@w{ }Allman}
+This section covers some of the basic concepts necessary to understand
+how to use a macro package.@footnote{This section is derived from
+@cite{Writing Papers with nroff using -me} by Eric P.@w{ }Allman.}
References are made throughout to more detailed information, if desired.
-@code{groff} reads an input file prepared by the user and outputs a
-formatted paper suitable for publication or framing. The input consists
-of text, or words to be printed, and embedded commands (@dfn{requests}
-and @dfn{escapes}), which tell @code{groff} how to format the printed
-copy. For more detail on this @pxref{Embedded Commands}.
+@code{gtroff} reads an input file prepared by the user and outputs a
+formatted document suitable for publication or framing. The input
+consists of text, or words to be printed, and embedded commands
+(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
+format the output. For more detail on this, see @ref{Embedded
+Commands}.
-The word @dfn{argument} is used in this manual to mean a word or number
-which appears on the same line as a request which modifies the meaning
-of that request. For example, the request
+The word @dfn{argument} is used in this chapter to mean a word or number
+which appears on the same line as a request, and which modifies the
+meaning of that request. For example, the request
@example
.sp
@@ -1165,8 +1475,8 @@ request which says to space four lines instead of one. Arguments are
separated from the request and from each other by spaces. More details
on this can be found in @ref{Request Arguments}.
-The primary function of @code{groff} is to collect words from input
-lines, fill output lines with those words, justify the right hand margin
+The primary function of @code{gtroff} is to collect words from input
+lines, fill output lines with those words, justify the right-hand margin
by inserting extra spaces in the line, and output the result. For
example, the input:
@@ -1189,56 +1499,54 @@ Four score and seven years ago,...
@cindex break
@cindex line break
-Sometimes you may want to start a new output line even though the line
-you are on is not yet full; for example, at the end of a paragraph. To
-do this you can cause a @dfn{break}, which starts a new output line.
-Some requests cause a break automatically, as do blank input lines and
-input lines beginning with a space.
+Sometimes a new output line should be started even though the current
+line is not yet full; for example, at the end of a paragraph. To do
+this it is possible to cause a @dfn{break}, which starts a new output
+line. Some requests cause a break automatically, as do blank input
+lines and input lines beginning with a space.
Not all input lines are text to be formatted. Some of the input lines
are requests which describe how to format the text. Requests always
-have a period or an apostrophe (@samp{'}) as the first character of the
-input line.
+have a period (@samp{.}) or an apostrophe (@samp{'}) as the first
+character of the input line.
The text formatter also does more complex things, such as automatically
-numbering pages, skipping over page boundaries putting footnotes in the
+numbering pages, skipping over page boundaries, putting footnotes in the
correct place, and so forth.
-Here a few hints for preparing text for input to @code{groff}. First,
-keep the input lines short. Short input lines are easier to edit, and
-@code{groff} will pack words onto longer lines for you anyhow. In
+Here are a few hints for preparing text for input to @code{gtroff}.
+First, keep the input lines short. Short input lines are easier to
+edit, and @code{gtroff} will pack words onto longer lines anyhow. In
keeping with this, it is helpful to begin a new line after every period,
comma, or phrase, since common corrections are to add or delete
sentences or phrases. Secondly, do not hyphenate words at the end of
-lines -- @code{groff} is smart enough to hyphenate words for you as
-needed, but is not smart enough to take hyphens out and join a word back
-together. Also, words such as ``mother-in-law'' should not be broken
-over a line, since then you will get a space where not wanted, such as
-``mother- in-law''.
+lines -- @code{gtroff} is smart enough to hyphenate words for the user
+as needed, but is not smart enough to take hyphens out and join a word
+back together. Also, words such as ``mother-in-law'' should not be
+broken over a line, since then a space can occur where not wanted, such
+as ``@w{mother- in}-law''.
@findex ls
@cindex double spacing
@cindex spacing
-Groff will double space output text automatically if you use the request
-@samp{.ls 2}. You can revert to single spaced mode by typing @samp{.ls
-1}.
+@code{gtroff} will double space output text automatically if you use the
+request @w{@samp{.ls 2}}. Single spaced mode can be reactivated by
+typing @w{@samp{.ls 1}}.
-A number of requests allow you to change the way the printed copy looks,
-sometimes called the @dfn{layout} of the output page. Most of these
-requests adjust the placing of @dfn{white space} (blank lines or
-spaces).
+A number of requests allow to change the way the output looks, sometimes
+called the @dfn{layout} of the output page. Most of these requests
+adjust the placing of @dfn{white space} (blank lines or spaces).
-@findex bp
@cindex new page
-The @samp{.bp} request starts a new page.
+The @samp{.bp} request starts a new page, causing a line break.
-@findex sp
@cindex blank lines
@cindex empty lines
-The request @samp{.sp @var{N}} leaves @var{N} lines of blank space.
-@var{N} can be omitted (meaning skip a single line) or can be of the
-form @var{N}i (for @var{N} inches) or @var{N}c (for @var{N}
-centimeters). For example, the input:
+@cindex lines, empty
+The request @w{@samp{.sp @var{N}}} leaves @var{N}@w{ }lines of blank
+space. @var{N}@w{ }can be omitted (meaning skip a single line) or can
+be of the form @var{N}i (for @var{N}@w{ }inches) or @var{N}c (for
+@var{N}@w{ }centimeters). For example, the input:
@example
.sp 1.5i
@@ -1252,11 +1560,12 @@ thoughts on the subject'', followed by a single blank line.
@findex ce
@cindex centering lines
-Text lines can be centered by using the @samp{.ce} request. The line
-after @samp{.ce} is centered (horizontally) on the page. To center more
-than one line, use @samp{.ce @var{N}} (where @var{N} is the number of
-lines to center), followed by the @var{N} lines. If you want to center
-many lines but don't want to count them, type:
+@cindex lines, centering
+Text lines can be centered by using the @code{ce} request. The line
+after @code{ce} is centered (horizontally) on the page. To center more
+than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
+of lines to center), followed by the @var{N}@w{ }lines. To center many
+lines without counting them, type:
@example
.ce 1000
@@ -1265,40 +1574,61 @@ lines to center
@end example
@noindent
-The @samp{.ce 0} request tells @code{groff} to center zero more lines,
-in other words, stop centering.
+The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
+lines, in other words, stop centering.
@findex br
@cindex line break
@cindex break
All of these requests cause a break; that is, they always start a new
-line. If you want to start a new line without performing any other
-action, use @samp{.br}.
+line. To start a new line without performing any other action, use
+@code{br}.
+
+@c =====================================================================
@node Common Features, , Basics, Tutorial for Macro Users
@section Common Features
@cindex common features
@cindex features, common
+@code{gtroff} provides very low level operations for formatting a
+document. There are many common routine operations which are done in
+all documents. These common operations are written into @dfn{macros}
+and collected into a @dfn{macro package}.
+
+All macro packages provide certain common capabilities which fall into
+the following categories.
-Groff provides very low level operations for formatting a document.
-There are many common routine operations which are done in all documents.
-These common operations are written into @dfn{macros} and collected into a
-@dfn{macro package}.
+@c ---------------------------------------------------------------------
-All macro packages provide certain common capabilities which fall
-into the following categories.
+@menu
+* Paragraphs::
+* Sections and Chapters::
+* Headers and Footers::
+* Page Layout Adjustment::
+* Displays::
+* Footnotes and Annotations::
+* Table of Contents::
+* Indices::
+* Paper Formats::
+* Multiple Columns::
+* Font and Size Changes::
+* Predefined Strings::
+* Preprocessor Support::
+* Configuration and Customization::
+@end menu
+@node Paragraphs, Sections and Chapters, Common Features, Common Features
@subsection Paragraphs
@cindex paragraphs
-One of the most common and most used capability is starting a
-paragraph. There are a number of different types of paragraphs,
-any of which can be initiated with macros supplied by the macro
-package. Normally paragraphs start with a blank line and the first
-line indented, like the text in this manual. There are also block
-style paragraphs, which omit the indentation:
+One of the most common and most used capability is starting a paragraph.
+There are a number of different types of paragraphs, any of which can be
+initiated with macros supplied by the macro package. Normally,
+paragraphs start with a blank line and the first line indented, like the
+text in this manual. There are also block style paragraphs, which omit
+the indentation:
@example
Some men look at constitutions with sanctimonious
@@ -1306,6 +1636,7 @@ reverence, and deem them like the ark of the covenant, too
sacred to be touched.
@end example
+@noindent
And there are also indented paragraphs which begin with a tag or label
at the margin and the remaining text indented.
@@ -1320,167 +1651,628 @@ longlabel
although they will line up with each other.
@end example
-A variation of this is a bulleted list....
+A variation of this is a bulleted list.
+@c XXX description
+
+@c ---------------------------------------------------------------------
+
+@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
@subsection Sections and Chapters
-Most macro packages supply some form of section headers.
-The simplest kind is simply the heading on a line by itself in bold
-type. Others supply automatically numbered section heading or
-different heading styles at different levels.
-Some, more sophisticated, macro packages supply macros for starting
-chapters and appendicies.
+Most macro packages supply some form of section headers. The simplest
+kind is simply the heading on a line by itself in bold type. Others
+supply automatically numbered section heading or different heading
+styles at different levels. Some, more sophisticated, macro packages
+supply macros for starting chapters and appendices.
+
+@c ---------------------------------------------------------------------
+@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
@subsection Headers and Footers
-Every macro packages gives you some way to manipulate the headers and
-footers (or @dfn{titles} on each page. Some packages will allow you
-to have different ones on the even and odd pages (for material
-printed in a book form).
+Every macro package gives some way to manipulate the headers and
+footers (or @dfn{titles}) on each page. Some packages will allow for
+different ones on the even and odd pages (for material printed in a book
+form).
+
The titles are called three-part titles, that is, there is a
-left-justified part, a centered part, and a right-justified part.
-An automatically generated page number may be put in any of these
-fields with the @samp{%} character.
+left-justified part, a centered part, and a right-justified part. An
+automatically generated page number may be put in any of these fields
+with the @samp{%} character (see @ref{Page Layout}, for more details).
+
+@c ---------------------------------------------------------------------
+@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
@subsection Page Layout
-Most macro packages let you specify top and bottom margins and other
-details about the appearance of the printed pages.
+Most macro packages let the user specify top and bottom margins and
+other details about the appearance of the printed pages.
+@c ---------------------------------------------------------------------
+
+@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
@subsection Displays
@cindex displays
-Displays are sections of text to be set off from the body
-of the paper. Major quotes, tables, and figures are types of
-displays, as are all the examples used in this document.
+Displays are sections of text to be set off from the body of the paper.
+Major quotes, tables, and figures are types of displays, as are all the
+examples used in this document.
@cindex quotes, major
@cindex major quotes
-Major quotes are quotes which are several lines long,
-and hence are set in from the rest of the text without
-quote marks around them.
+@dfn{Major quotes} are quotes which are several lines long, and hence
+are set in from the rest of the text without quote marks around them.
@cindex list
-A list is an indented, single spaced, unfilled display. Lists should
-be used when the material to be printed
-should not be filled and justified like normal text, such
-as columns of figures or the examples used in this paper.
+A @dfn{list} is an indented, single spaced, unfilled display. Lists
+should be used when the material to be printed should not be filled and
+justified like normal text, such as columns of figures or the examples
+used in this paper.
@cindex keep
-A keep is a display of lines which are kept on a single page if
-possible. An example of where you would use a
-keep might be a diagram. Keeps differ from lists in that
-lists may be broken over a page boundary whereas keeps will
-not.
+A @dfn{keep} is a display of lines which are kept on a single page if
+possible. An example for a keep might be a diagram. Keeps differ from
+lists in that lists may be broken over a page boundary whereas keeps
+will not.
@cindex keep, floating
@cindex floating keep
-Floating keeps move relative to the text. Hence, they
-are good for things which will be referred to by name, such
-as ``See figure 3''. A floating keep will appear at the bottom of the
-current page if it will fit; otherwise, it will
-appear at the top of the next page. Meanwhile, the surrounding text
-will `flow' around the keep, thus leaving now blank areas.
-
-@subsection Footnotes and annotations
+Floating keeps move relative to the text. Hence, they are good for
+things which will be referred to by name, such as ``See figure@w{ }3''.
+A floating keep will appear at the bottom of the current page if it will
+fit; otherwise, it will appear at the top of the next page. Meanwhile,
+the surrounding text will `flow' around the keep, thus leaving now blank
+areas.
+
+@c ---------------------------------------------------------------------
+
+@node Footnotes and Annotations, Table of Contents, Displays, Common Features
+@subsection Footnotes and Annotations
@cindex footnotes
@cindex annotations
-There are a number of requests to save text for later
-printing. Footnotes are printed at the bottom of the current
-page. Delayed text is intended to be a variant form of foot-
-note; the text is printed only when explicitly called for,
-such as at the end of each chapter.
+There are a number of requests to save text for later printing.
-Delayed text is very similar to a footnote except that
-it is printed when called for explicitly. This allows a
-list of references to appear (for example) at the end of
-each chapter, as is the convention in some disciplines.
+@dfn{Footnotes} are printed at the bottom of the current page.
-Most macro packages which supply this functionality also supply a
-means of automatically numbering either type of annotation.
+@cindex delayed text
+@dfn{Delayed text} is very similar to a footnote except that it is
+printed when called for explicitly. This allows a list of references to
+appear (for example) at the end of each chapter, as is the convention in
+some disciplines.
+Most macro packages which supply this functionality also supply a means
+of automatically numbering either type of annotation.
+
+@c ---------------------------------------------------------------------
+
+@node Table of Contents, Indices, Footnotes and Annotations, Common Features
@subsection Table of Contents
+@cindex table of contents
+@cindex contents, table of
+
+@dfn{Tables of contents} are a type of delayed text having a tag
+(usually the page number) attached to each entry after a row of dots.
+The table accumulates throughout the paper until printed, usually after
+the paper has ended. Many macro packages will provide the ability to
+have several tables of contents (i.e.@: one standard one, one for
+tables, etc).
+
+@c ---------------------------------------------------------------------
-Tables of contents are a type of
-delayed text having a tag (usually the page number) attached
-to each entry after a row of dots. The table accumulates
-throughought the paper until printed, usually after the paper has
-ended. Many macro packages will provide the abilitly to have several
-tables of contents (i.e. one standard one, one for tables, &c.)
+@node Indices, Paper Formats, Table of Contents, Common Features
+@subsection Indices
+@cindex index, in macro package
-@subsection Indexes
+While some macro packages will use the term @dfn{index}, none actually
+provide that functionality. The facilities they call indices are
+actually more appropriate for tables of contents.
-While some macro packages will use the term @dfn{index}, none
-actually provide that functionality. The facilities they call
-indexes are actually more appropriate for tables of contents.
+@c ---------------------------------------------------------------------
-@subsection Paper formats
+@node Paper Formats, Multiple Columns, Indices, Common Features
+@subsection Paper Formats
+@cindex paper formats
Some macro packages provide stock formats for various kinds of
documents. Many of them provide a common format for the title and
-opening pages of a technical paper. The -mm macros in particular
-provide formats for letters and memorandums.
+opening pages of a technical paper. The @file{mm} macros in particular
+provide formats for letters and memoranda.
+@c ---------------------------------------------------------------------
+
+@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
@subsection Multiple Columns
-Some macro packages (except -man) provide the ability to have two or
-more columns on a page.
+Some macro packages (but not @file{man}) provide the ability to have two
+or more columns on a page.
+
+@c ---------------------------------------------------------------------
-@subsection Font and Size changes
+@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
+@subsection Font and Size Changes
-The builtin font and size functions are not always intuitive, so all
+The built-in font and size functions are not always intuitive, so all
macro packages provide macros to make these operations simpler.
+@c ---------------------------------------------------------------------
+
+@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
@subsection Predefined Strings
-Most macro packages provide various predefined strings for a variety
-of uses, examples are sub- and super-scripts, printable dates, quotes
-and various special characters.
+Most macro packages provide various predefined strings for a variety of
+uses; examples are sub- and superscripts, printable dates, quotes and
+various special characters.
+
+@c ---------------------------------------------------------------------
+@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
@subsection Preprocessor Support
All macro packages provide support for the various preprocessors.
+@c ---------------------------------------------------------------------
+
+@node Configuration and Customization, , Preprocessor Support, Common Features
@subsection Configuration and Customization
-Some macro packages provide means of customizing many of details of
-how the package behaves. This ranges from setting the default type
-size to changing the appearance of section headers.
+Some macro packages provide means of customizing many of the details of how
+the package behaves. This ranges from setting the default type size to
+changing the appearance of section headers.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Macro Packages, Programming Tutorial, Tutorial for Macro Users, Top
+@chapter Macro Packages
+@cindex macro packages
+@cindex packages, macros
+
+This chapter documents the main macro packages that come with
+@code{groff}.
+
+@menu
+* man::
+* mdoc::
+* ms::
+* me::
+* mm::
+@end menu
+
+
+@c =====================================================================
+
+@node man, mdoc, Macro Packages, Macro Packages
+@section @file{man}
+@cindex @file{man}
+@cindex manual pages
+@pindex tmac.an
+@pindex tmac.man
+
+This is the most popular and probably the most important macro package
+of @code{groff}. It is easy to use, and a vast majority of manual pages
+are based on it.
+
+@menu
+* Man options::
+* Man usage::
+* Man font macros::
+* Miscellaneous man stuff::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Man options, Man usage, man, man
+@subsection Options
+
+The command line format for using the @file{man} macros with
+@code{groff} is:
+
+@c XXX document @TMAC_AN_PREFIX@
+
+@example
+groff -m man [ -rC1 ] [ -rD1 ] [ -rP@var{nnn} ] [ -rS@var{xx} ]
+ [ -rX@var{nnn} ] [ @var{files}@dots{} ]
+@end example
+
+It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
+
+@table @code
+@item -rC1
+If more than one manual page is given on the command line, number the
+pages continuously, rather than starting each at@w{ }1.
+
+@item -rD1
+Double-sided printing. Footers for even and odd pages are formatted
+differently.
+
+@item -rP@var{nnn}
+Enumeration of pages will start with @var{nnn} rather than with@w{ }1.
+
+@item -rS@var{xx}
+Use @var{xx} (which can be 10, 11, or@w{ }12@dmn{pt}) as the base
+document font size instead of the default value of@w{ }10@dmn{pt}.
+
+@item -rX@var{nnn}
+After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
+@var{nnn}c, etc. For example, the option @option{-rX2} will produce the
+following page numbers: 1, 2, 2a, 2b, 2c, etc.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Man usage, Man font macros, Man options, man
+@subsection Usage
+@cindex @code{man} macros
+@cindex macros for manual pages
+
+@pindex man.local
+This section describes the available macros for manual pages. For
+further customization, put additional macros and requests into the file
+@file{man.local} which will be loaded immediately after @file{tmac.an}.
+
+@maindex TH
+@Defmac{TH, title section [@var{extra1}] [@var{extra2}] [@var{extra3}]}
+Sets the title of the man page to @var{title} and the section to
+@var{section}, which must have a value between 1 and@w{ }8. The value
+of @var{section} may also have a string appended, e.g.@: @samp{.pm}, to
+indicate a specific subsection of the man pages.
+
+Both @var{title} and @var{section} are positioned at the left and right
+in the header line (with @var{section} in parentheses immediately
+appended to @var{title}. @var{extra1} will be positioned in the middle
+of the footer line. @var{extra2} will be positioned at the left in the
+footer line (resp.@: at the left on even pages and at the right on odd
+pages if double-sided printing is active). @var{extra3} is centered in
+the header line.
+
+For @acronym{HTML} output, headers and footers are completely suppressed.
+
+Additionally, this macro starts a new page; the new line number is@w{ }1
+again (except if the @option{-rC1} option is given on the command line)
+-- this feature is intended only for formatting multiple man pages; a
+single man page should contain exactly one @code{TH} macro at the
+beginning of the file.
+@end_Defmac
+
+@maindex SH
+@Defmac{SH, [@var{heading}]}
+Sets up an unnumbered section heading sticking out to the left. Prints
+out all the text following @code{SH} up to the end of the line (resp.@:
+the text in the next line if there is no argument to @code{SH}) in bold
+face, one size larger than the base document size. Additionally, the
+left margin for the following text is reset to its default value.
+@end_Defmac
+
+@maindex SS
+@Defmac{SS, [@var{heading}]}
+Sets up an unnumbered section heading. Prints out all the text
+following @code{SS} up to the end of the line (resp.@: the text in the
+next line if there is no argument to @code{SS}) in bold face, at the
+same size as the base document size. Additionally, the left margin for
+the following text is reset to its default value.
+@end_Defmac
+
+@maindex TP
+@Defmac{TP, [@var{nnn}]}
+Sets up an indented paragraph with label. The indentation is set to
+@var{nnn} if that argument is supplied (the default unit is @samp{n} if
+omitted), otherwise it is set to the default indentation value.
+
+The first line of text following this macro is interpreted as a string
+to be printed flush-left, as it is appropriate for a label. It is not
+interpreted as part of a paragraph, so there is no attempt to fill the
+first line with text from the following input lines. Nevertheless, if
+the label is not as wide as the indentation, then the paragraph starts
+at the same line (but indented), continuing on the following lines. If
+the label is wider than the indentation, then the descriptive part of
+the paragraph begins on the line following the label, entirely indented.
+Note that neither font shape nor font size of the label is set to a
+default value; on the other hand, the rest of the text will have default
+font settings.
+@end_Defmac
+
+@maindex LP
+@maindex PP
+@maindex P
+@Defmac{LP}
+@Defmacx{PP}
+@Defmacx{P}
+These macros are mutual aliases. Any of them causes a line break at the
+current position, followed by a vertical space downwards by the amount
+specified by the @code{PD} macro. The font size and shape are reset to
+the default value (10@dmn{pt} resp.@: Roman). Finally, the current left
+margin is restored.
+@end_Defmac
+
+@maindex IP
+@Defmac{IP, [@var{designator}] [@var{nnn}]}
+Sets up an indented paragraph, using @var{designator} as a tag to mark
+its beginning. The indentation is set to @var{nnn} if that argument is
+supplied (default unit is @samp{n}), otherwise the default indentation
+value is used. Font size and face of the paragraph (but not the
+designator) are reset to their default values. To start an indented
+paragraph with a particular indentation but without a designator, use
+@samp{""} (two double quotes) as the first argument of @code{IP}.
+
+For example, to start a paragraph with bullets as the designator and
+4@dmn{en} indentation, write
+
+@example
+.IP \(bu 4
+@end example
+@end_Defmac
+
+@maindex HP
+@cindex hanging indentation, in manual pages
+@Defmac{HP, [@var{nnn}]}
+Sets up a paragraph with hanging left indentation. The indentation is
+set to @var{nnn} if that argument is supplied (default unit is
+@samp{n}), otherwise the default indentation value is used. Font size
+and face are reset to their default values.
+@end_Defmac
+
+@maindex RS
+@cindex left margin, how to move, in manual pages
+@Defmac{RS, [@var{nnn}]}
+This macro moves the left margin to the right by the value @var{nnn} if
+specified (default unit is @samp{n}); otherwise the default indentation
+value is used. Calls to the @code{RS} macro can be nested.
+@end_Defmac
+
+@maindex RE
+@Defmac{RE, [@var{nnn}]}
+This macro moves the left margin back to level @var{nnn}; if no argument
+is given, it moves one level back. The first level (i.e., no call to
+@code{RS} yet) has number@w{ }1, and each call to @code{RS} increases
+the level by@w{ }1.
+@end_Defmac
+
+@maindex SH
+@maindex SS
+@maindex TP
+@maindex LP
+@maindex PP
+@maindex P
+@maindex IP
+@maindex HP
+To summarize, the following macros cause a line break with the insertion
+of vertical space (which amount can be changed with the @code{PD}
+macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
+@code{P}), @code{IP}, and @code{HP}.
+
+@maindex RS
+@maindex RE
+The macros @code{RS} and @code{RE} also cause a break but do not insert
+vertical space.
+
+@c ---------------------------------------------------------------------
+
+@node Man font macros, Miscellaneous man stuff, Man usage, man
+@subsection Macros to set fonts
+@cindex fonts in manual pages
+@cindex @code{man}, how to set fonts
+
+The standard font is Roman; the default text size is 10@w{ }point.
+
+@maindex SM
+@Defmac{SM, [@var{text}]}
+Causes the text on the same line or the text on the next line to appear
+in a font that is one point size smaller than the default font.
+@end_Defmac
+
+@maindex SB
+@cindex boldface, in manual pages
+@Defmac{SB, [@var{text}]}
+Causes the text on the same line or the text on the next line to appear
+in boldface font, one point size smaller than the default font.
+@end_Defmac
+
+@maindex BI
+@Defmac{BI, text}
+Causes text on the same line to appear alternately in bold face and
+italic. The text must be on the same line as the macro call. Thus,
+
+@example
+.BI this "word and" that
+@end example
+
+@noindent
+would cause ``this'' and ``that'' to appear in bold face, while ``word
+and'' appears in italics.
+@end_Defmac
+
+@maindex IB
+@Defmac{IB, text}
+Causes text to appear alternately in italic and bold face. The text
+must be on the same line as the macro call.
+@end_Defmac
+
+@maindex RI
+@Defmac{RI, text}
+Causes text on the same line to appear alternately in roman and italic.
+The text must be on the same line as the macro call.
+@end_Defmac
+
+@maindex IR
+@Defmac{IR, text}
+Causes text on the same line to appear alternately in italic and roman.
+The text must be on the same line as the macro call.
+@end_Defmac
+
+@maindex BR
+@Defmac{BR, text}
+Causes text on the same line to appear alternately in bold face and
+roman. The text must be on the same line as the macro call.
+@end_Defmac
+
+@maindex RB
+@Defmac{RB, text}
+Causes text on the same line to appear alternately in roman and bold
+face. The text must be on the same line as the macro call.
+@end_Defmac
+
+@maindex R
+@Defmac{R, [@var{text}]}
+Causes @var{text} to appear in roman font. If no text is present on the
+line where the macro is called, then the text of the next line appears
+in roman. This is the default font to which text is returned at the end
+of processing of the other macros.
+@end_Defmac
+
+@maindex B
+@Defmac{B, [@var{text}]}
+Causes @var{text} to appear in bold face. If no text is present on the
+line where the macro is called, then the text of the next line appears
+in bold face.
+@end_Defmac
+
+@maindex I
+@cindex italic, in manual pages
+@Defmac{I, [@var{text}]}
+Causes @var{text} to appear in italic. If no text is present on the
+line where the macro is called, then the text of the next line appears
+in italic.
+@end_Defmac
+
+@c ---------------------------------------------------------------------
+
+@node Miscellaneous man stuff, , Man font macros, man
+@subsection Miscellaneous
+
+@pindex grohtml
+@cindex @file{man}, default indentation
+@cindex default indentation, @file{man}
+The default indentation is 7.2@dmn{n} for all output devices except for
+@code{grohtml} which uses 1.2@dmn{i} instead.
+
+@maindex DT
+@maindex TH
+@cindex tab stops, in manual pages
+@Defmac{DT}
+Sets tabs every 0.5@w{ }inches. Since this macro is always called
+during a @code{TH} request, it makes sense to call it only if the tab
+positions have been changed.
+@end_Defmac
+
+@maindex PD
+@cindex empty space before a paragraph, in manual pages
+@Defmac{PD, [@var{nnn}]}
+Adjusts the empty space before a new paragraph (resp.@: section). The
+optional argument gives the amount of space (default units are
+@samp{v}); without parameter, the value is reset to its default value
+(1@w{ }line for tty devices, 0.4@dmn{v}@w{ }otherwise).
+@end_Defmac
+
+@maindex SH
+@maindex SS
+@maindex TP
+@maindex LP
+@maindex PP
+@maindex P
+@maindex IP
+@maindex HP
+This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP}
+(resp.@: @code{PP} and @code{P}), @code{IP}, and @code{HP}.
+
+The following strings are defined:
+
+@maindex \*S
+@Defmac{\\*S}
+Switch back to the default font size.
+@end_Defmac
+
+@maindex \*R
+@Defmac{\\*R}
+The `registered' sign.
+@end_Defmac
+
+@maindex \*(Tm
+@Defmac{\\*(Tm}
+The `trademark' sign.
+@end_Defmac
+
+@maindex \*(lq
+@maindex \*(rq
+@glindex lq
+@glindex rq
+@Defmac{\\*(lq}
+@Defmacx{\\*(rq}
+Left and right quote.
+This is equal to @code{\(lq} and @code{\(rq}, respectively.
+@end_Defmac
+
+@cindex preprocessor, calling convention
+@cindex calling convention of preprocessors
+If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
+become common usage to make the first line of the man page look like
+this:
+
+@example
+.\" @var{word}
+@end example
+
+@pindex geqn@r{, invocation in manual pages}
+@pindex grefer@r{, invocation in manual pages}
+@pindex gtbl@r{, invocation in manual pages}
+@pindex man@r{, invocation of preprocessors}
+Note the single space character after the double quote. @var{word}
+consists of letters for the needed preprocessors: @samp{e} for
+@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
+Modern implementations of the @code{man} program read this first line
+and automatically call the right preprocessor(s).
+
+
+@c =====================================================================
+
+@node mdoc, ms, man, Macro Packages
+@section @file{mdoc}
+@cindex @file{mdoc}
+@c XXX documentation
-@node -man, -ms, Tutorial for Macro Users, Top
-@chapter -man
-@cindex @code{-man}
+@c =====================================================================
+@node ms, me, mdoc, Macro Packages
+@section @file{ms}
+@cindex @file{ms}
-@node -ms, -me, -man, Top
-@chapter -ms
-@cindex @code{-ms}
+@c XXX documentation
+@c =====================================================================
-@node -me, -mm, -ms, Top
-@chapter -me
-@cindex @code{-me}
+@node me, mm, ms, Macro Packages
+@section @file{me}
+@cindex @file{me}
+@c XXX documentation
-@node -mm, Programming Tutorial, -me, Top
-@chapter -mm
-@cindex @code{-mm}
+@c =====================================================================
+@node mm, , me, Macro Packages
+@section @file{mm}
+@cindex @file{mm}
+@c XXX documentation
-@node Programming Tutorial, geqn, -mm, Top
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Programming Tutorial, Preprocessors, Macro Packages, Top
@chapter Programming Tutorial
@cindex programming tutorial
@cindex tutorial for programming
-This chapter covers @strong{all} of the facilities of groff.
-If you are intending to use a macro package, you probably do not want
-to read this chapter.
+This chapter covers @strong{all} of the facilities of @code{gtroff}.
+Users of macro packages may skip it if not interested in details.
@menu
@@ -1496,6 +2288,7 @@ to read this chapter.
* Manipulating Spacing::
* Tabs and Fields::
* Character Translations::
+* Troff and Nroff Mode::
* Line Layout::
* Page Layout::
* Page Control::
@@ -1505,31 +2298,30 @@ to read this chapter.
* Conditionals and Loops::
* Writing Macros::
* Page Motions::
-* Drawing Functions::
+* Drawing Requests::
* Traps::
* Diversions::
* Environments::
* I/O::
* Postprocessor Access::
-* Miscellany::
+* Miscellaneous::
* Debugging::
* Implementation Differences::
* Summary::
@end menu
+
+@c =====================================================================
+
@node Text, Input Conventions, Programming Tutorial, Programming Tutorial
@section Text
-@cindex text
-
-@code{groff} input files contain text with control commands
-interspersed throughout. But, even without control codes,
-@code{groff} will still do several things with your text:
-filling and adjusting,
-adding additional space after sentences,
-hyphenating
-and
-inserting implicit line breaks.
+@cindex text, @code{gtroff} processing
+@code{gtroff} input files contain text with control commands
+interspersed throughout. But, even without control codes, @code{gtroff}
+will still do several things with the input text: filling and adjusting,
+adding additional space after sentences, hyphenating and inserting
+implicit line breaks.
@menu
* Filling and Adjusting::
@@ -1539,320 +2331,498 @@ inserting implicit line breaks.
* Implicit Line Breaks::
@end menu
+@c ---------------------------------------------------------------------
+
@node Filling and Adjusting, Hyphenation, Text, Text
@subsection Filling and Adjusting
-@cindex filling and adjusting
-@cindex adjusting and filling
+@cindex filling
+@cindex adjusting
-
-When troff reads in text it collects words from input and fits as many
-of them together on one output line as it can. This is known as
+When @code{gtroff} reads in text it collects words from input and fits
+as many of them together on one output line as it can. This is known as
@dfn{filling}.
-Once troff has a @dfn{filled} line it will try to @dfn{adjust} it.
-which means it will widen the spacing between words until
-the text reaches the right margin (in the default adjustment mode).
-Extra spaces between words are preserved, but
-spaces at the end of lines are ignored.
-Spaces at the front of a line will cause a @dfn{break}
-(breaks will be explained in @ref{Implicit Line Breaks})
+@cindex leading spaces
+@cindex spaces, leading and trailing
+@cindex extra spaces
+@cindex trailing spaces
+Once @code{gtroff} has a @dfn{filled} line it will try to @dfn{adjust}
+it. This means it will widen the spacing between words until the text
+reaches the right margin (in the default adjustment mode). Extra spaces
+between words are preserved, but spaces at the end of lines are ignored.
+Spaces at the front of a line will cause a @dfn{break} (breaks will be
+explained in @ref{Implicit Line Breaks})
+
+@xref{Manipulating Filling and Adjusting}.
-@c distribute these through the text
-@xref{Manipulating Filling and Adjusting}
+@c ---------------------------------------------------------------------
@node Hyphenation, Sentences, Filling and Adjusting, Text
@subsection Hyphenation
@cindex hyphenation
+Since the odds are not great for finding a set of words, for every
+output line, which will fit nicely on a line without inserting excessive
+amounts of space between words, @code{gtroff} will hyphenate words so
+that lines can be justified without there being too much space between
+words. It uses an internal hyphenation algorithm (a simplified version
+of the algorithm used within @TeX{}) to indicate which words can be
+hyphenated and how to do so. When a word is hyphenated the first part
+of the word will be added to the current filled line being output (with
+an attached hyphen), and the other portion will be added to the next
+line to be filled.
-Since the odds of finding a set of words, for every output line,
-which will fit nicely on a
-line without inserting excessive amounts of space between words
-is not great,
-troff will hyphenate words so that lines can be justified
-without there being too much space between words.
-It uses an internal hyphenation algorithm, to indicate which words can
-be hyphenated and how to do so.
-When a word is hyphenated the first part of the word will be added
-to the current filled line being output (with an attached hyphen),
-and the other portion will be added to the next line to be filled.
+@xref{Manipulating Hyphenation}.
-@c distribute these through the text
-@xref{Manipulating Hyphenation}
+@c ---------------------------------------------------------------------
@node Sentences, Tab Stops, Hyphenation, Text
@subsection Sentences
@cindex sentences
+Although it is often debated, some typesetting rules say there should be
+different amounts of space after various punctuation marks. For
+example, the @cite{Chicago typsetting manual} says that a period at the
+end of a sentence should have twice as much space following it as would
+a comma or a period as part of an abbreviation.
+
+@c XXX exact citation of Chicago manual
+
+@cindex sentence space
+@cindex space between sentences
+@cindex french-spacing
+@code{gtroff} does this by flagging certain characters (normally
+@samp{!}, @samp{?} and @samp{.}) as @dfn{end of sentence} characters.
+When @code{gtroff} encounters one of these characters at the end of a
+line it will append two @dfn{sentence spaces} in the formatted output.
+(This justifies one of the conventions mentioned in @ref{Input
+Conventions}.)
+
+@cindex transparent characters
+@cindex character, transparent
+@glindex dg
+@glindex rq
+@cindex "
+@cindex '
+@cindex )
+@cindex ]
+@cindex *
+In addition, the following characters resp.@: glyphs are treated
+transparently while handling end of sentence characters: @samp{"},
+@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{dg}, and @code{rq}.
+
+See the @code{cflags} request in @ref{Using Symbols}, for more details.
-Although it is often debated,
-some typesetting rules say there should be different amounts of space
-after various puctuation marks.
-For example, a period at the end of a sentence
-should have twice as much space following it
-as would a comma or a period as part of an abbreviation.
-
-@cindex sentence spaces
-@cindex spaces between sentences
-Troff does this by flagging certain characters (normally
-@samp{!}, @samp{?} and @samp{.})
-as @dfn{end of sentence} characters.
-When troff encounters one of these characters at the end of a line it
-will append two @dfn{sentence spaces} in the formatted output.
-(thus, one of the conventions mentioned in @ref{Input Conventions}).
-
-@c also describe how characters like ) are treated here -jjc
-@c gotta do some research on this -trent
-
+@findex \&
+To prevent the insertion of extra space after an end of sentence
+character (at the end of a line), append @code{\&}.
+@c ---------------------------------------------------------------------
@node Tab Stops, Implicit Line Breaks, Sentences, Text
@subsection Tab Stops
@cindex tab stops
@cindex stops, tabulator
-
-
-Groff translates tabs in the input into movements to the next tab
-stop. These tab stops are initially located every half inch across
-the page.
-Using this you can make simple tables. However, this can often be
-deceptive as the appearance (and width) of your text on a terminal and
-the results from groff can vary greatly.
+@cindex tab character
+@cindex character, tabulator
+
+@cindex @acronym{EBCDIC} encoding
+@code{gtroff} translates @dfn{tabulator characters}, also called
+@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} resp.@:
+@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
+tabulator stop. These tab stops are initially located every half inch
+across the page. Using this, simple tables can easily be made.
+However, it can often be deceptive as the appearance (and width) of the
+text on a terminal and the results from @code{gtroff} can vary greatly.
Also, a possible sticking point is that lines beginning with tab
characters will still be filled, again producing unexpected results.
For example, the following input
-@example
- 1 2 3
- 4 5
-@end example
+@multitable {12345678} {12345678} {12345678} {12345678}
+@item
+@tab 1 @tab 2 @tab 3
+@item
+@tab @tab 4 @tab 5
+@end multitable
@noindent
will produce
-@example
- 1 2 3 4 5
-@end example
-
-@c Tab stops are with respect to the input line. -jjc
-@c did that last section address that?? -trent
-
+@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
+@item
+@tab 1 @tab 2 @tab 3 @tab @tab 4 @tab 5
+@end multitable
+@xref{Tabs and Fields}.
-@c distribute these through the text
-@xref{Tabs and Fields}
+@c ---------------------------------------------------------------------
@node Implicit Line Breaks, , Tab Stops, Text
@subsection Implicit Line Breaks
@cindex implicit line breaks
@cindex implicit breaks of lines
@cindex line, implicit breaks
-@cindex break
@cindex break, implicit
@cindex line break
-An important concept in troff is the @dfn{break}. When a @dfn{break}
-occurs, troff will output the partially filled line (unadjusted),
-and resume collecting and filling text on the next output line.
+An important concept in @code{gtroff} is the @dfn{break}. When a break
+occurs, @code{gtroff} will output the partially filled line
+(unjustified), and resume collecting and filling text on the next output
+line.
@cindex blank line
@cindex empty line
@cindex line, blank
-There are several ways to cause a break in troff.
-A blank line will not only cause a break, but it will also cause a
-one line vertical space (effectively a blank line) to be output.
+There are several ways to cause a break in @code{gtroff}. A blank line
+will not only cause a break, but it will also cause a one line vertical
+space (effectively a blank line) to be output.
-A line which begins with a space will cause a break and the space
-will be output at the beginning of the next line.
-Note that this space isn't adjusted, even in fill mode.
+@cindex fill mode
+@cindex mode, fill
+A line which begins with a space will cause a break and the space will
+be output at the beginning of the next line. Note that this space isn't
+adjusted, even in fill mode.
-The end of file will also cause a break (otherwise the last line of
-your document may vanish!)
+The end of file will also cause a break -- otherwise the last line of
+the document may vanish!
-Certain @dfn{requests} also cause breaks, implicitly or explicity.
-This will be discussed later.
+Certain requests also cause breaks, implicitly or explicitly. This will
+be discussed in @ref{Manipulating Filling and Adjusting}.
-@c distribute these through the text
-@xref{Manipulating Filling and Adjusting}
+
+@c =====================================================================
@node Input Conventions, Measurements, Text, Programming Tutorial
@section Input Conventions
@cindex input conventions
@cindex conventions for input
+Since @code{gtroff} does filling automatically, it is traditional in
+@code{groff} not to try and type things in as nicely formatted
+paragraphs. These are some conventions commonly used when typing
+@code{gtroff} text:
-Since groff does filling automatically, it is traditional in groff not
-to try and type things in as nicely formatted paragraphs. These are
-some conventions commonly used when typing groff text:
-
-@itemize @bullet{}
+@itemize @bullet
@item
-Break lines after punctuation, particularily at the ends of
-sentences, and in other logical places. Keep separate phrases on
-lines by themselves, as entire phrases are often added or deleted
-when editing.
+Break lines after punctuation, particularly at the end of a sentence,
+and in other logical places. Keep separate phrases on lines by
+themselves, as entire phrases are often added or deleted when editing.
+
@item
-Try to keep lines less than 40-60 characters,
-to allow space for inserting more text.
+Try to keep lines less than 40-60@w{ }characters, to allow space for
+inserting more text.
+
@item
-Do not try to do any formatting in a WYSIWYG manner (i.e. don't
-try and use spaces to get proper indentation).
+Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
+don't try and use spaces to get proper indentation).
@end itemize
+@c =====================================================================
+
@node Measurements, Expressions, Input Conventions, Programming Tutorial
@section Measurements
@cindex measurements
-
@cindex units of measurement
@cindex basic units
@cindex machine units
-Troff (like any other programs) requires numeric parameters to
-specify various measurements. Most numeric parameters
-@footnote{those that specify vertical or horizontal motion or a type
-size} may have a measurement unit attached.
-These units are specified as a single
-character which immediately follows the number or expression.
-Each of these units are understood, by troff, to be a multiple of its
+@cindex measurement units
+@cindex @code{u} unit
+@cindex unit, @code{u}
+@code{gtroff} (like any other programs) requires numeric parameters to
+specify various measurements. Most numeric parameters@footnote{those
+that specify vertical or horizontal motion or a type size} may have a
+@dfn{measurement unit} attached. These units are specified as a single
+character which immediately follows the number or expression. Each of
+these units are understood, by @code{gtroff}, to be a multiple of its
@dfn{basic unit}. So, whenever a different measurement unit is
-specified troff converts this into its basic units.
-This basic unit, represented by a @samp{u} is a
-device dependent measurement which is quite small, ranging from
-1/75th to 1/72000th of an inch.
+specified @code{gtroff} converts this into its @dfn{basic units}. This
+basic unit, represented by a @samp{u}, is a device dependent measurement
+which is quite small, ranging from 1/75th to 1/72000th of an inch. The
+values may be given as fractional numbers; however, fractional basic
+units are always rounded to integers.
-Some of the measurement units are compleatly independent of any of
-the current settings (e.g. type size) of groff.
+Some of the measurement units are completely independent of any of the
+current settings (e.g.@: type size) of @code{gtroff}.
-@table @samp
+@table @code
@item i
@cindex inch
+@cindex @code{i} unit
+@cindex unit, @code{i}
Inches. An antiquated measurement unit still in use in certain
-backwards countries.
+backwards countries. One inch is equal to@w{ }2.54@dmn{cm}.
+
@item c
@cindex centimeter
-Centimeters.
+@cindex @code{c} unit
+@cindex unit, @code{c}
+Centimeters. One centimeter is equal to@w{ }0.3937@dmn{in}.
+
@item p
@cindex points
+@cindex @code{p} unit
+@cindex unit, @code{p}
Points. This is a typesetter's measurement used for measure type size.
-It is 72 points to an inch.
+It is 72@w{ }points to an inch.
+
@item P
@cindex pica
-Pica. Another typesetting measurement. 6 Picas to an inch.
+@cindex @code{P} unit
+@cindex unit, @code{P}
+Pica. Another typesetting measurement. 6@w{ }Picas to an inch (and
+12@w{ }points to a pica).
+
@item s
-@item z
+@itemx z
+@cindex @code{s} unit
+@cindex unit, @code{s}
+@cindex @code{z} unit
+@cindex unit, @code{z}
+@xref{Fractional Type Sizes}, for a discussion of these units.
@end table
-The other measurements understood by troff are dependent on settings
-currently in effect in troff. These are very useful for specifying
-measurements which should look proper with any size of text.
+The other measurements understood by @code{gtroff} are dependent on
+settings currently in effect in @code{gtroff}. These are very useful
+for specifying measurements which should look proper with any size of
+text.
-@table @samp
+@table @code
@item m
-@cindex em
-Ems. This unit is equal to the current font size in points.
-So called because it is @emph{approximately} the width of the letter
-@samp{m} in the current font.
+@cindex em unit
+@cindex @code{m} unit
+@cindex unit, @code{m}
+Ems. This unit is equal to the current font size in points. So called
+because it is @emph{approximately} the width of the letter@w{ }@samp{m}
+in the current font.
+
@item n
-@cindex en
+@cindex en unit
+@cindex @code{n} unit
+@cindex unit, @code{n}
Ens. This is half of an em.
+
@item v
@cindex vertical space
@cindex space, vertical
+@cindex @code{v} unit
+@cindex unit, @code{v}
Vertical space. This is equivalent to the current line spacing.
@xref{Sizes}, for more information about this.
+
@item M
+@cindex @code{M} unit
+@cindex unit, @code{M}
100ths of an em.
@end table
-@c distribute these through the text
-@xref{Fractional Type Sizes}
-
@menu
* Default Units::
@end menu
+@c ---------------------------------------------------------------------
+
@node Default Units, , Measurements, Measurements
@subsection Default Units
@cindex default units
@cindex units, default
-
-Many requests take a default unit. While this can be helpful at
-times, it can cause strange errors in some expressions.
-For example, the line length request expects em's.
-Here are several attempts to get 3.5 inches and the results:
+Many requests take a default unit. While this can be helpful at times,
+it can cause strange errors in some expressions. For example, the line
+length request expects em units. Here are several attempts to get a
+line length of 3.5@w{ }inches and their results:
@example
3.5i @result{} 3.5i
7/2 @result{} 0i
7/2i @result{} 0i
-7i/2 @result{} .1i
+7i/2 @result{} 0.1i
7i/2u @result{} 3.5i
@end example
-As you can see, the safest way to specify measurements is to always
-attach a scaling indicator.
+@noindent
+Everything will be converted to basic units first. In the above example
+it is assumed that 1@dmn{i} equals@w{ }240@dmn{u}, and 1@dmn{m}
+equals@w{ }10@dmn{p} (thus 1@dmn{m} equals@w{ }33@dmn{u}). The value
+7i/2 will be first handled as 7i/2m, then converted to 1680u/66u which
+is 25@dmn{u}, and this is approximately 0.1@dmn{i}.
+
+@cindex measurements, specifying safely
+As a conclusion, the safest way to specify measurements is to always
+attach a scaling indicator. If you want to multiply or divide by a
+certain scalar value, use @samp{u} as the unit for that value.
+
+
+@c =====================================================================
@node Expressions, Identifiers, Measurements, Programming Tutorial
@section Expressions
@cindex expressions
+@code{gtroff} has most of operators common to other languages:
-Troff has most of operators common to other languages:
+@c XXX more details; examples
@itemize @bullet
@item
-Arithmetic: +, -, /, *, %
+@cindex arithmetic operators
+@cindex operators, arithmetic
+@opindex +
+@opindex -
+@opindex /
+@opindex *
+@opindex %
+Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
+(division), @samp{*} (multiplication), @samp{%} (modulo).
+
+@code{gtroff} only provides integer arithmetic. The internal type used
+for computing results is @samp{int}, which is usually a 32@dmn{bit}
+signed integer.
+
@item
-Comparison: <, >, >=, <=, =, == (the last two are the same)
+@cindex comparison operators
+@cindex operators, comparison
+@opindex <
+@opindex >
+@opindex >=
+@opindex <=
+@opindex =
+@opindex ==
+Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
+(less than or equal), @samp{>=} (greater than or equal), @samp{=}
+(equal), @samp{==} (the same as @samp{=}).
+
@item
-Logical: &, :
+@cindex logical operators
+@cindex operators, logical
+@opindex &
+@opindex :
+Logical: @samp{&} (logical and), @samp{:} (logical or).
+
@item
-Unary operators: -, +, ! (if/while only??)
+@cindex unary operators
+@cindex operators, unary
+@opindex -
+@opindex +
+@opindex !
+@findex if@r{, and the @samp{!} operator}
+@findex while@r{, and the @samp{!} operator}
+Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
+(just for completeness; does nothing in expressions), @samp{!} (logical
+not; this works only within @code{if} and @code{while} requests). See
+below for the use of unary operators in motion requests.
+
@item
-Maximum and minimum: >?, <?
+@cindex extremum operators
+@cindex operators, extremum
+@opindex >?
+@opindex <?
+Extrema: @samp{>?} (maximum), @samp{<?} (minimum). For example,
+@samp{5>?3} yields@w{ }@samp{5}.
+
+@c XXX add examples
+
@item
-Scaling: (@var{c};@var{e})
-Evaluate @var{e} using @var{c} as the default scaling indicator.
-If @var{c} is missing, ignore scaling indicators in the
-evaluation of @var{e}.
+@cindex scaling operator
+@cindex operator, scaling
+Scaling: @code{(@var{c};@var{e})}. Evaluate @var{e} using @var{c} as
+the default scaling indicator. If @var{c} is missing, ignore scaling
+indicators in the evaluation of @var{e}.
@end itemize
-Parenthesis may be used as in any other language.
-However, in groff they are necessary to ensure order of evaluation.
-Groff has no operator precedence,
-expressions are evaluated left to right.
-This means that @samp{3+5*4} is evaluated as if it were parenthesized
-like @samp{(3+5)*4}, not as @samp{3+(5*4)}, like you may expect.
+@cindex parentheses
+@cindex order of evaluation in expressions
+@cindex expression, order of evaluation
+@opindex (
+@opindex )
+Parentheses may be used as in any other language. However, in
+@code{gtroff} they are necessary to ensure order of evaluation.
+@code{gtroff} has no operator precedence; expressions are evaluated left
+to right. This means that @samp{3+5*4} is evaluated as if it were
+parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might be
+expected.
+
+@opindex +@r{, and page motion}
+@opindex -@r{, and page motion}
+@opindex |@r{, and page motion}
+@cindex motion operators
+@cindex operators, motion
+For many requests which cause a motion on the page, the unary operators
+work differently. The @samp{+} and @samp{-} operators then indicate a
+motion relative to the current position (down or up, respectively), and
+the @samp{|} operator indicates an absolute position on the page or
+input line.
+@c XXX xref
+@samp{+} and @samp{-} are also treated differently by the following
+requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
+@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
+@code{rt}, @code{ti}, @code{\R}, and @code{\s}. Here the plus and minus
+signs indicate increments resp.@: decrements.
+
+@c XXX add more xref
+@xref{Setting Registers}.
+
+@cindex space characters in expressions
+@cindex expressions and space characters
+Due to the way arguments are parsed, spaces are not allowed in
+expressions, unless the entire expression is surrounded by parentheses.
-For many requests which cause a motion on the page, the unary
-operators work differently.
-The @samp{+} and @samp{-} operators indicate a motion relative to the
-current position (down or up, respectively). The @samp{|} operator
-indicates an absolute position on the page or input line. (????)
-@code{+} and @code{-} are also treated differently by @code{nr} (?)
+@xref{Request Arguments}, and @ref{Conditionals and Loops}.
-Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parenthesis.
-@c distribute these through the text
-@xref{Request Arguments}
-@c distribute these through the text
-@xref{Conditionals and Loops}
+@c =====================================================================
@node Identifiers, Embedded Commands, Expressions, Programming Tutorial
@section Identifiers
@cindex identifiers
-Like any other language troff, has rules for properly formed
-identifiers.
-In troff an identifier can be made up of most any printable
-character.
-The only exception is characters which are interpreted by troff
-(backslash, square bracket and ?). So, for example, any of the following
-are valid.
+Like any other language, @code{gtroff} has rules for properly formed
+@dfn{identifiers}. In @code{gtroff}, an identifier can be made up of
+almost any printable character, with the exception of the following
+characters:
+
+@itemize @bullet
+@item
+@cindex whitespace characters
+@cindex newline character
+@cindex character, whitespace
+Whitespace characters (space, tabs, and newlines).
+
+@item
+@cindex character, backspace
+@cindex backspace character
+@cindex @acronym{EBCDIC} encoding of backspace
+Backspace (@acronym{ASCII}@w{ }@code{0x08} resp.@: @acronym{EBCDIC}@w{
+}@code{0x16}) and character code @code{0x01}.
+
+@item
+@cindex invalid input characters
+@cindex input characters, invalid
+@cindex characters, invalid input
+@cindex unicode
+The following input characters are invalid and will be ignored if
+@code{groff} runs on a machine based on @acronym{ASCII}, causing a
+warning message of type @samp{input} (see @ref{Debugging}, for more
+details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
+@code{0x80}-@code{0x9F}.
+
+And here are the invalid input characters if @code{groff} runs on an
+@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
+@code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
+@code{0x30}-@code{0x3F}.
+
+Currently, some of these reserved codepoints are used internally, thus
+making it non-trivial to extend @code{gtroff} to cover Unicode or other
+character sets resp.@: encodings which use characters of these ranges.
+
+Note that invalid characters will be removed before parsing; an
+identifier @code{foo}, followed by an invalid character, followed by
+@code{bar} will be treated as @code{foobar}.
+@end itemize
+
+For example, any of the following is valid.
@example
br
@@ -1862,59 +2832,83 @@ end-list
@@_
@end example
-You can test whether an identifier is valid in groff with the
-@code{\A} escape. It expands to 1 or 0 according whether its argument
-(given in quotes) is or is not acceptable as the name of a string,
-macro, diversion, number register, environment or font. It will return
-0 if no argument is given. This is useful if you want to lookup user
-input in some sort of associative table.
+@findex ]
+Note that identifiers longer than two characters with a closing bracket
+(@samp{]}) in its name can't be accessed with escape sequences which
+expect an identifier as a parameter. For example, @samp{\[foo]]} will
+access the glyph @samp{foo}, followed by @samp{]}, whereas
+@samp{\C'foo]'} really asks for glyph @samp{foo]}.
-Identifiers in groff can be any length, but, in some contexts,
-groff needs to told
-where identifiers end and text begins (and in different ways
-depending on their length)
+@c XXX xref
-@itemize @bullet{}
+@Deffn{Escape, \\A, ident}
+Whether an identifier @var{ident} is valid in @code{gtroff} can be
+tested with the @code{\A} escape. It expands to the character@w{ }1
+or@w{ }0 according to whether its argument (usually delimited by quotes)
+is or is not acceptable as the name of a string, macro, diversion,
+number register, environment, or font. It will return@w{ }0 if no
+argument is given. This is useful for looking up user input in some
+sort of associative table.
+
+@example
+\A'end-list'
+ @result{} 1
+@end example
+@end_Deffn
+
+@xref{Escapes}, for details on parameter delimiting characters.
+
+@c XXX add xrefs above
+
+Identifiers in @code{gtroff} can be any length, but, in some contexts,
+@code{gtroff} needs to be told where identifiers end and text begins
+(and in different ways depending on their length):
+
+@findex (
+@findex [
+@findex ]
+@itemize @bullet
@item
-Single character
+Single character.
+
@item
-Two characters
-Must be prefixed with @samp{(} in some situations.
+Two characters. Must be prefixed with @samp{(} in some situations.
+
@item
-Arbitrary length (groff only)
-Must be bracketed with @samp{[}, @samp{]} in some situations.
-Any length identifier can be put in brackets.
+Arbitrary length (@code{gtroff} only). Must be bracketed with @samp{[}
+and@w{ }@samp{]} in some situations. Any length identifier can be put
+in brackets.
@end itemize
+@cindex undefined identifiers
+@cindex indentifiers, undefined
Unlike many other programming languages, undefined identifiers are
silently ignored or expanded to nothing.
+@c XXX add info about -ww command line option.
+
+@xref{Interpolating Registers}, and @ref{Strings}.
-@c distribute these through the text
-@xref{Interpolating Registers}
-@c distribute these through the text
-@xref{Strings}
+
+@c =====================================================================
@node Embedded Commands, Registers, Identifiers, Programming Tutorial
@section Embedded Commands
@cindex embedded commands
@cindex commands, embedded
-
-With most documents you need more funtionality beyond filling,
-adjusting and implicit line breaking.
-In order to gain further functionality, groff allows commands to be
-embeded into your text, in two ways.
+Most documents need more functionality beyond filling, adjusting and
+implicit line breaking. In order to gain further functionality,
+@code{gtroff} allows commands to be embedded into the text, in two ways.
The first is a @dfn{request} which takes up an entire line, and does
-some large scale operation (e.g. break lines, start new pages).
-
-The other is an @dfn{escape} which can be embedded anywhere
-in your text, or even as an argument to a request. (Not always?)
-Escapes generally do more minor operations like sub- and super-
-scripts, print a symbol, &c.
-
+some large scale operation (e.g.@: break lines, start new pages).
+The other is an @dfn{escape} which can be embedded anywhere in the text,
+or even as an argument to a request.
+@c XXX (Not always?)
+Escapes generally do more minor operations like sub- and superscripts,
+print a symbol, etc.
@menu
* Requests::
@@ -1922,30 +2916,39 @@ scripts, print a symbol, &c.
* Escapes::
@end menu
+@c ---------------------------------------------------------------------
+
@node Requests, Macros, Embedded Commands, Embedded Commands
@subsection Requests
@cindex requests
-
@cindex control character
@cindex character, control
-A request line begins with a control character,
-which is either a single quote (@samp{'}) or a period (@samp{.}).
-These can be changed @pxref{Character Translations}, for details.
-After this there may be optional tabs or spaces followed by an
-identifier which is the name of the request.
-This may be followed by any number of space separated arguments.
+@cindex no-break control character
+@cindex character, no-break control
+@cindex control character, no-break
+@findex '
+@findex .
+A request line begins with a control character, which is either a single
+quote (@samp{'}, the @dfn{no-break control character}) or a period
+(@samp{.}, the normal @dfn{control character}). These can be changed;
+see @ref{Character Translations}, for details. After this there may be
+optional tabs or spaces followed by an identifier which is the name of
+the request. This may be followed by any number of space-separated
+arguments.
-@findex \&
-If you want to begin a line with a control character without it being
-interpreted, precede it with a @code{\&}. This represents a zero
-width space, which means it will not affect you output.
+@cindex zero width space character
+@cindex character, zero width space
+@cindex space character, zero width
+@findex \&@r{, escaping control characters}
+To begin a line with a control character without it being interpreted,
+precede it with @code{\&}. This represents a zero width space, which
+means it will not affect the output.
-In most cases you will use the period as a control character.
-Several requests will cause a break, using the single quote control
+In most cases the period is used as a control character. Several
+requests will cause a break implicitly; using the single quote control
character will prevent this.
-
@menu
* Request Arguments::
@end menu
@@ -1955,14 +2958,12 @@ character will prevent this.
@cindex request arguments
@cindex arguments to requests
+Arguments to requests (and macros) are processed much like the shell:
+The line is split into arguments according to spaces. An argument which
+is intended to contain spaces can either be enclosed in quotes (single
+or double), or have the spaces @dfn{escaped} with backslashes.
-Argument to requests (and macros) are processed much like the shell:
-The line is split into arguments according to spaces.
-An argument which is intended to contain spaces can either be enclosed
-in quotes (single or double), or have the spaces @dfn{escaped} with
-backslashes.
-
-So, for example:
+Here are a few examples:
@example
.uh The Mouse Problem
@@ -1970,55 +2971,68 @@ So, for example:
.uh The\ Mouse\ Problem
@end example
-The first line is the @code{.uh} macro being called with 3 arguments,
-@samp{The}, @samp{Mouse}, and @samp{Problem}.
-The latter two have the same effect or calling the @code{.uh} macro
-with one argument @samp{The Mouse Problem}.
+@findex \~
+@findex \@key{SP}
+@noindent
+The first line is the @code{uh} macro being called with 3 arguments,
+@samp{The}, @samp{Mouse}, and @samp{Problem}. The latter two have the
+same effect or calling the @code{uh} macro with one argument, @samp{The
+Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
+is ``classical'' in the sense that it can be found in most @code{troff}
+documents. Nevertheless, it is not optimal in all situations, since
+@w{@samp{\ }} inserts a fixed-width, non-breaking space character which
+can't stretch. @code{gtroff} provides a different command @code{\~} to
+insert a stretchable, non-breaking space.}
-Note, however, that the @code{.ds} request works differently.
+@findex ds
+Note, however, that the @code{ds} request works differently.
+@xref{Strings}, for more details.
-@c distribute these through the text
-@xref{Strings}
+@c ---------------------------------------------------------------------
@node Macros, Escapes, Requests, Embedded Commands
@subsection Macros
@cindex macros
+@code{gtroff} has a @dfn{macro} facility for defining a series of lines
+which can be invoked by name. They are called in the same manner as
+requests -- arguments also may be passed in the same manner.
-Troff has a @dfn{macro} facility for defining a series of lines which
-can be invoked by name.
-They are called in the same manner as requests
-and arguments may be passed in the same manner.
-
+@xref{Writing Macros}, and @ref{Request Arguments}.
-@c distribute these through the text
-@xref{Writing Macros}
-@c distribute these through the text
-@xref{Request Arguments}
+@c ---------------------------------------------------------------------
@node Escapes, , Macros, Embedded Commands
@subsection Escapes
@cindex escapes
+Escapes may occur anywhere in the input to @code{gtroff}. They usually
+begin with a backslash and are followed by a single character which
+indicates the function to be performed. The escape character can be
+changed; see @ref{Character Translations}.
-@findex \e
-@findex \\
-Escapes may occur anywhere in the input to groff.
-They begin with a backslash and are followed by a single character
-which indicates the function to be performed.
-If you want to have a backslash appear in your document, you should
-use the escape sequence @code{\e}. Merely escaping the backslash
-with another backslash will work in @emph{some} curcumstances.
-
-Many escapes have no parameters, those that do, do so in one of two
-ways. For escapes which require an identifier there must be a way for
-groff to tell where the identifier ends and the text begins.
-It assumes that the next single character is the identifier, but if
-that character is an open parenthesis, it takes the next two
-characters as the identifier; and if the next character is an open
-bracket, all characters until a close bracket are taken as the
-identifier. Note that in the second case there is no closing
-parenthesis. For example:
+@findex (
+@findex [
+@findex ]
+Escape sequences which require an identifier as a parameter accept three
+possible syntax forms.
+
+@itemize @bullet
+@item
+The next single character is the identifier.
+
+@item
+If this single character is an opening parenthesis, take the following
+two characters as the identifier. Note that there is no closing
+parenthesis after the identifier.
+
+@item
+If this single character is an opening bracket, take all characters
+until a closing bracket as the identifier.
+@end itemize
+
+@noindent
+Examples:
@example
\fB
@@ -2026,28 +3040,163 @@ parenthesis. For example:
\*[TeX]
@end example
-Other escapes may require several arguments and/or some special
-format. In these cases the @dfn{argument} is enclosed in single
-quotes (not required??) and the enclosing text is decoded according
-to what that escape expects.
+@findex '
+@cindex argument delimiting characters
+@cindex characters, argument delimiting
+@cindex delimiting characters for arguments
+Other escapes may require several arguments and/or some special format.
+In such cases the argument is traditionally enclosed in single quotes
+(and quotes are always used in this manual for the definitions of escape
+sequences). The enclosed text is then processed according to what that
+escape expects. Example:
@example
\l'1.5i\(bu'
@end example
+@findex \o
+@findex \b
+@findex \X
+Note that the quote character can be replaced with any other character
+which does not occur in the argument (even a newline or a space
+character) in the following escapes: @code{\o}, @code{\b}, and
+@code{\X}. This makes e.g.
+
+@example
+A caf
+\o
+e\'
+
+
+in Paris
+ @result{} A caf@'e in Paris
+@end example
+
+@noindent
+possible, but it is better not to use this feature to avoid confusion.
+
+@findex \%
+@findex \@key{SP}
+@findex \|
+@findex \^
+@findex \@{
+@findex \@}
+@findex \'
+@findex \`
+@findex \-
+@findex \_
+@findex \!
+@findex \?
+@findex \@@
+@findex \)
+@findex \/
+@findex \,
+@findex \&
+@findex \~
+@findex \0
+@findex \a
+@findex \c
+@findex \d
+@findex \e
+@findex \E
+@findex \p
+@findex \r
+@findex \t
+@findex \u
+The following escapes sequences (which are handled similarly to
+characters since they don't take a parameter) are also allowed as
+delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
+@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\?}, @code{\@@}, @code{\)}, @code{\/}, @code{\,}, @code{\&},
+@code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d}, @code{\e},
+@code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}. Again, don't
+use these if possible.
+
+@findex \A
+@findex \Z
+@findex \C
+@findex \w
+No newline characters as delimiters are allowed in the following
+escapes: @code{\A}, @code{\Z}, @code{\C}, and @code{\w}.
+
+@findex \D
+@findex \h
+@findex \H
+@findex \l
+@findex \L
+@findex \N
+@findex \R
+@findex \s
+@findex \S
+@findex \v
+@findex \x
+Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
+@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
+@code{\x} can't use the following characters as delimiters:
+
+@itemize @bullet
+@item
+@cindex numbers
+@cindex digits
+The digits @code{0}-@code{9}.
+
+@item
+@cindex operators
+@opindex +
+@opindex -
+@opindex /
+@opindex *
+@opindex %
+@opindex <
+@opindex >
+@opindex =
+@opindex &
+@opindex :
+@opindex (
+@opindex )
+@opindex .
+The (single-character) operators @samp{+-/*%<>=&:().}.
+
+@item
+@cindex space character
+@cindex character, space
+@cindex tab character
+@cindex character, tab
+@cindex newline character
+@cindex character, newline
+The space, tab, and newline characters.
+
+@item
+@findex \%
+@findex \@{
+@findex \@}
+@findex \'
+@findex \`
+@findex \-
+@findex \_
+@findex \!
+@findex \@@
+@findex \/
+@findex \c
+@findex \e
+@findex \p
+All escape sequences except @code{\%}, @code{\@{}, @code{\@}},
+@code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!}, @code{\@@},
+@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
+@end itemize
+
@findex \\
@findex \e
@findex \E
-If you want to have a backslash appear in your output, you can use several
-escapes: @code{\\}, @code{\e} or @code{\E}.
+To have a backslash (resp.@: the current escape character) appear in the
+output several escapes are defined: @code{\\}, @code{\e} or @code{\E}.
These are very similar, and only differ with respect to being used in
-macros or diversions (@xref{Copy-in Mode}, and @ref{Diversions}, for
-more information)
+macros or diversions. @xref{Copy-in Mode}, and @ref{Diversions}, for
+more information.
+@c XXX explanation of \E
-
-@c distribute these through the text
-@xref{Identifiers}
+@xref{Identifiers}, and @ref{Character Translations}.
@menu
* Comments::
@@ -2057,196 +3206,337 @@ more information)
@subsubsection Comments
@cindex comments
-
-@findex \"
Probably one of the most@footnote{Unfortunately, this is a lie. But
-hopefully future troff hackers will believe it :-)}
+hopefully future @code{gtroff} hackers will believe it @code{:-)}}
common forms of escapes is the comment.
-They begin with the @code{\"} escape and end at the end of the input
-line.
+
+@Deffn{Escape, \\"}
+Start a comment. Everything to the end of the input line is ignored.
This may sound simple, but it can be tricky to keep the comments from
-interfering with the apperarance of your final outupt.
+interfering with the appearance of the final output.
-If the escape is to the right of some text or a request, that portion
-of the line will be ignored, but the space leading up to it will be
-noticed by groff. This only affects the @code{.ds} request (any
-others?).
+@findex ds
+If the escape is to the right of some text or a request, that portion of
+the line will be ignored, but the space leading up to it will be noticed
+by @code{gtroff}. This only affects the @code{.ds} request.
+@c XXX (any others?)
+
+@cindex tabs before comments
+@cindex comments, lining up with tabs
+One possibly irritating idiosyncracy is that tabs must not be used to
+line up comments. Tabs are not treated as white space between the
+request and macro arguments.
+
+@cindex undefined request
+@cindex request, undefined
+A comment on a line by itself will be treated as a blank line, because
+after eliminating the comment, that is all that remains:
-One possibly irritating idiosyncracy is that you mustn't use tabs to
-line up your comments.
-Tabs are not treated as white space between request and macro
-arguments.
+@example
+Test
+\" comment
+Test
+@end example
-If you have a comment on a line by itself, it will be treated as a
-blank line, because after eliminating the comment, that is all that
-remains. So, it is common to start the line with @code{.\"} which
-will cause the line to be treated as an undefined request.
+@noindent
+will produce
+
+@example
+Test
+
+Test
+@end example
+As a consequence, it is common to start the line with @code{.\"} which
+will cause the line to be treated as an undefined request and thus
+ignored completely.
+
+@findex '
Another commenting scheme seen sometimes is three consecutive single
-quotes (@code{'''}) at the begining of a line. This works, but groff
-will give a warning about an undefined macro, which is harmless, but
-irritating.
+quotes (@code{'''}) at the beginning of a line. This works, but
+@code{gtroff} will give a warning about an undefined macro (namely
+@code{''}), which is harmless, but irritating.
+@end_Deffn
+
+@Deffn{Escape, \\#}
+To avoid all this, @code{gtroff} has a new comment mechanism using
+the @code{\#} escape. This escape works the same as @code{\"} except
+that the newline is also ignored:
+
+@example
+Test
+\# comment
+Test
+@end example
-@findex \#
-Now to avoid all this groff has a new comment mechanism using the
-@code{\#} escape. This escape works the same as @code{\"} except
-that the newline is also ignored.
+@noindent
+will produce
+
+@example
+Test Test
+@end example
+
+@noindent
+as expected.
+@end_Deffn
@findex ig
-For large blocks of text, the @code{ig} request may be useful.
-@c distribute these through the text
-@xref{Strings}
+For commenting away large blocks of text, the @code{ig} request may be
+useful.
+
+@c XXX definition of .ig
+
+@xref{Strings}.
+
+
+@c =====================================================================
@node Registers, Manipulating Filling and Adjusting, Embedded Commands, Programming Tutorial
@section Registers
@cindex registers
+Numeric variables in @code{gtroff} are called @dfn{registers}. There
+are a number of built-in registers, supplying anything from the date to
+details of formatting parameters.
-Registers are groff's numeric variables. groff has a number of
-builtin registers, supplying anything from the date to details of
-formatting parameters.
-
-@c distribute these through the text
-@xref{Identifiers}
+@xref{Identifiers}, for details on register identifiers.
@menu
* Setting Registers::
* Interpolating Registers::
* Auto-increment::
* Assigning Formats::
-* Builtin Registers::
+* Built-in Registers::
@end menu
+@c ---------------------------------------------------------------------
+
@node Setting Registers, Interpolating Registers, Registers, Registers
@subsection Setting Registers
@cindex setting registers
@cindex registers, setting
+Registers are defined resp.@: set via the @code{nr} request or the
+@code{\R} escape.
-@findex nr
-@findex \R
-Registers are defined/set via the @code{nr}
-request or the @code{\R} escape, for example, the following two lines
-are equivalent:
+@Deffn{Request, nr, ident value}
+@Deffnx{Escape, \\R, ident value}
+Set number register @var{ident} to @var{value}. If @var{ident} doesn't
+exist, it will be created.
+
+The argument to @code{\R} has to be enclosed in quotes usually.
+@xref{Escapes}, for details on parameter delimiting characters.
+@end_Deffn
+
+For example, the following two lines are equivalent:
@example
.nr a 1
\R'a 1'
@end example
-@findex rr
-The @code{rr} request will
-remove the register specified by the argument.
+Both @code{nr} and @code{\R} have two additional special forms to
+increment resp.@: decrement a register.
+
+@Deffn{Request, nr, ident +value}
+@Deffnx{Request, nr, ident -value}
+@Deffnx{Escape, \\R, ident +value}
+@Deffnx{Escape, \\R, ident -value}
+Increment (decrement) register @var{ident} by @var{value}.
+
+@example
+.nr a 1
+.nr a +1
+\na
+ @result{} 2
+@end example
+
+@cindex negating register values
+To assign the negated value of a register to another register, some care
+must be taken to get the desired result:
+
+@example
+.nr a 7
+.nr b 3
+.nr a -\nb
+\na
+ @result{} 4
+.nr a (-\nb)
+\na
+ @result{} -3
+@end example
+
+@noindent
+The surrounding parentheses prevent the interpretation of the minus sign
+as a decrementing operator. An alternative is to start the assignment
+with a @samp{0}:
+
+@example
+.nr a 7
+.nr b -3
+.nr a \nb
+\na
+ @result{} 4
+.nr a 0\nb
+\na
+ @result{} -3
+@end example
+@end_Deffn
+
+@Deffn{Request, rr, ident}
+Remove number register @var{ident}. If @var{ident} doesn't exist, the
+request is ignored.
+@end_Deffn
-@findex rnn
-The @code{rnn} request will rename a number register.
-The format is @samp{.rnn @var{x} @var{y}}, which will
-rename number register @var{x} to @var{y}.
+@Deffn{Request, rnn, ident1 ident2}
+Rename number register @var{ident1} to @var{ident2}. If either
+@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
+@end_Deffn
-@findex aln
-Aliases can be created for a number register. The format is
-@samp{.aln @var{xx} @var{yy}}, which will create an alias @var{xx} for
-number register object named @var{yy}. The new name and the old name
-will be exactly equivalent. If @var{yy} is undefined, a warning of
-type @samp{reg} will be generated, and the request will be ignored.
-@xref{Debugging}, for information about warnings.
+@Deffn{Request, aln, ident1 ident2}
+This request creates an alias @var{ident1} for a number register
+@var{ident2}. The new name and the old name will be exactly equivalent.
+If @var{ident1} is undefined, a warning of type @samp{reg} will be
+generated, and the request will be ignored. @xref{Debugging}, for
+information about warnings.
+@end_Deffn
+@c ---------------------------------------------------------------------
@node Interpolating Registers, Auto-increment, Setting Registers, Registers
@subsection Interpolating Registers
@cindex interpolating registers
@cindex registers, interpolating
+Numeric registers can be accessed via the @code{\n} escape.
-@findex \n
-Numeric registers are @dfn{interpolated} via the @code{\n} escape.
-@c the following is wrong. Should I say any more than the above??
-@c This means that the value of the number register in expanded in-place
-@c on the input line before any other actions, i.e. before requests and
-@c escapes are interpreted.
+@Deffn{Escape, \\n, ident}
+@c XXX is the following correct?
+Interpolate number register @var{ident}. This means that the value of
+the register is expanded in-place while @code{gtroff} is parsing the
+input line.
@example
+.nr a 5
.nr as \na+\na
\n(as
+ @result{} 10
@end example
+@end_Deffn
+@c ---------------------------------------------------------------------
@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
@subsection Auto-increment
@cindex auto-increment
@cindex increment, automatic
-Number registers can also be auto incremented/decremented. You can
-specify the increment/decrement factor with third argument to the
-@code{nr} request. The default value is 0. For example:
+Number registers can also be auto-incremented and auto-decremented. The
+increment resp.@: decrement factor can be specified with a third
+argument to the @code{nr} request or @code{\R} escape.
+
+@findex \R
+@Deffn{Request, nr, ident value incr}
+Set number register @var{ident} to @var{value}; the increment for
+auto-incrementing is set to @var{incr}. Note that the @code{\R} escape
+doesn't support this notation.
+@end_Deffn
+
+To activate auto-incrementing, the escape @code{\n} has a special syntax
+form.
+
+@Deffn{Escape, \\n, +ident}
+@Deffnx{Escape, \\n, -ident}
+Before interpolating, increment resp.@: decrement @var{ident} by the
+auto-increment value as specified with the @code{nr} request (or the
+@code{\R} escape). If no auto-increment value has been specified, both
+syntax forms are identical to @code{\n}.
+@end_Deffn
+
+For example,
@example
.nr a 0 1
.nr xx 0 5
+.nr foo 0 -2
\n+a, \n+a, \n+a, \n+a, \n+a
.br
-\n+(xx, \n+(xx, \n+(xx, \n+(xx, \n+(xx
+\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
+.br
+\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
@end example
-Produces:
+@noindent
+produces
@example
1, 2, 3, 4, 5
-5, 10, 15, 20, 25
+-5, -10, -15, -20, -25
+-2, -4, -6, -8, -10
@end example
-If you want to change the increment factor without changing the value
-of a register, the following can be used.
+@cindex increment value without changing the register
+To change the increment value without changing the value of a register,
+the following can be used:
@example
.nr a \na 10
@end example
+@c ---------------------------------------------------------------------
-@node Assigning Formats, Builtin Registers, Auto-increment, Registers
+@node Assigning Formats, Built-in Registers, Auto-increment, Registers
@subsection Assigning Formats
@cindex assigning formats
@cindex formats, assigning
+When a register is used in the text of an input file (as opposed to part
+of an expression), it is textually replaced (or interpolated) with a
+representation of that number. This output format can be changed to a
+variety of formats (numbers, Roman numerals, etc.). This is done using
+the @code{af} request.
-@findex af
-When a register is used in the text of an input file
-(as opposed to part of an expression)
-it is textually replaced (or interpolated) with a representation of
-that number.
-This output format can be changed to a variety of formats
-(numbers, roman numerals, etc)
-This is done using the @code{af} request.
-The first argument to @code{af} is the name of the number register to
-be changed,
-and the second argument is the output format.
-The following output formats are available:
+@Deffn{Request, af, ident format}
+Change the output format of a number register. The first argument
+@var{ident} is the name of the number register to be changed, and the
+second argument @var{format} is the output format. The following output
+formats are available:
-@table @samp
+@table @code
@item 1
-This is the default format, decimal numbers:
-1, 2, 3, @dots{}
-@item 001
-Decimal numbers with as many leading zeros as specified.
-So, @samp{001} would result in 001, 002, 003, @dots{}
+Decimal arabic numbers. This is the default format: 1, 2, 3,@w{
+}@enddots{}
+
+@item 0@dots{}0
+Decimal numbers with as many digits as specified. So, @samp{00} would
+result in printing numbers as 01, 02, 03,@w{ }@enddots{}
+
+In fact, any digit instead of zero will do; @code{gtroff} only counts
+how many digits are specified. As a consequence, @code{af}'s default
+format @samp{1} could be specified as @samp{0} also (and exactly this is
+returned by the @code{\g} escape, see below).
+
@item I
@cindex roman numerals
-@cindex numerals, roman
-Upper-case roman numerals:
-0, I, II, III, IV, @dots{}
+@cindex numerals, Roman
+Upper-case Roman numerals: 0, I, II, III, IV,@w{ }@enddots{}
+
@item i
-Lower-case roman numerals:
-0, i, ii, iii, iv, @dots{}
+Lower-case Roman numerals: 0, i, ii, iii, iv,@w{ }@enddots{}
+
@item A
-Upper-case letters:
-A, B, C, @dots{}, Z, AA, AB, @dots{}
+Upper-case letters: A, B, C, @dots{},@w{ }Z, AA, AB,@w{ }@enddots{}
+
@item a
-Lower-case letters:
-a, b, c, @dots{}, z, aa, ab, @dots{}
+Lower-case letters: a, b, c, @dots{},@w{ }z, aa, ab,@w{ }@enddots{}
@end table
-The following example will produce @samp{10, X, j, 010}.
+Omitting the number register format will cause a warning of type
+@samp{missing}. @xref{Debugging}, for more details. Specifying a
+nonexistent format causes an error.
+
+The following example will produce @samp{10, X, j, 010}:
@example
.nr a 10
@@ -2260,137 +3550,288 @@ The following example will produce @samp{10, X, j, 010}.
\na
@end example
-@findex \g
-The @code{\g} escape returns the current format of the specified
-register. For example, @samp{\ga} after the following example would
-produce @samp{001}.
-
-
-
-@node Builtin Registers, , Assigning Formats, Registers
-@subsection Builtin Registers
-@cindex builtin registers
-@cindex registers, builtin
-
-
-The following are some builtin registers, which are not listed
-elsewhere in this manual. Any registers which begin with a @samp{.}
-are read-only. A compleat listing of all builtin registers can be
-found in @ref{Register Index}.
+@cindex roman numerals, maximum and minimum
+@cindex maximum values of Roman numerals
+@cindex minimum values of Roman numerals
+The largest number representable for the @samp{i} and @samp{I} formats
+is 39999 (resp.@: -39999); @acronym{UNIX} @code{troff} uses @samp{z} and
+@samp{w} to represent 10000 and 5000 in Roman numerals, and so does
+@code{gtroff}. Currently, the correct glyphs of Roman numeral five
+thousand and Roman numeral ten thousand (Unicode code points
+@code{U+2182} and @code{U+2181}, respectively) are not available.
+
+If @var{ident} doesn't exist, it will be created.
+
+@cindex read-only register, changing format
+@cindex changing format, read-only register
+Changing the output format of a read-only register causes an error. It
+is necessary to first copy the register's value to a writeable register,
+then apply the @code{af} request to this other register.
+@end_Deffn
+
+@cindex format of register
+@cindex register, format
+@Deffn{Escape, \\g, ident}
+Return the current format of the specified register @var{ident}. For
+example, @samp{\ga} after the previous example would produce the string
+@samp{000}. If the register hasn't been defined yet, nothing is
+returned.
+@end_Deffn
+
+@c ---------------------------------------------------------------------
+
+@node Built-in Registers, , Assigning Formats, Registers
+@subsection Built-in Registers
+@cindex built-in registers
+@cindex registers, built-in
+
+The following lists some built-in registers which are not described
+elsewhere in this manual. Any register which begins with a @samp{.} is
+read-only. A complete listing of all built-in registers can be found in
+@ref{Register Index}.
@table @code
@item .H
+@cindex horizontal resolution register
+@cindex resolution, horizontal, register
@vindex .H
Horizontal resolution in basic units.
+
@item .V
+@cindex vertical resolution register
+@cindex resolution, vertical, register
@vindex .V
Vertical resolution in basic units.
+
@item dw
+@cindex day of the week register
+@cindex date, day of the week register
@vindex dw
Day of the week (1-7).
+
@item dy
+@cindex day of the month register
+@cindex date, day of the month register
@vindex dy
-Day of the year (1-31).
+Day of the month (1-31).
+
@item mo
+@cindex month of the year register
+@cindex date, month of the year register
@vindex mo
Current month (1-12).
+
+@item year
+@cindex date, year register
+@cindex year, current, register
+@vindex year
+The current year.
+
@item yr
@vindex yr
-Last two digits of the current year (see you in 7 years :-)
+The current year minus@w{ }1900. Unfortunately, the documentation of
+@acronym{UNIX} Version@w{ }7's @code{troff} had a year@w{ }2000 bug: It
+incorrectly claimed that @code{yr} contains the last two digits of the
+year. That claim has never been true of either traditional @code{troff}
+or GNU @code{troff}. Old @code{troff} input that looks like this:
+
+@example
+'\" The following line stopped working after 1999
+This document was formatted in 19\n(yr.
+@end example
+
+@noindent
+can be corrected as follows:
+
+@example
+This document was formatted in \n[year].
+@end example
+
+@noindent
+or, to be portable to older @code{troff} versions, as follows:
+
+@example
+.nr y4 1900+\n(yr
+This document was formatted in \n(y4.
+@end example
+
@item .c
@vindex .c
@itemx c.
@vindex c.
-The current @emph{input} line number.
+@cindex input line number register
+@cindex line number, input, register
+The current @emph{input} line number. Register @samp{.c} is read-only,
+whereas @samp{c.} (a @code{gtroff} extension) is writable also,
+affecting both @samp{.c} and @samp{c.}.
+
@item ln
@vindex ln
-The current @emph{output} line number.
+@findex nm
+@cindex output line number register
+@cindex line number, output, register
+The current @emph{output} line number after a call to the @code{nm}
+request to activate line numbering.
+
+@c XXX xref nm request
+
@item .x
@vindex .x
-The major version number. For example, if the version number is 1.03
-then @code{.x} will contain 1.
+@cindex major version number register
+@cindex version number, major, register
+The major version number. For example, if the version number is@w{
+}1.03 then @code{.x} will contain@w{ }@samp{1}.
+
@item .y
@vindex .y
-The minor version number. For example, if the version number is 1.03
-then @code{.y} will contain 03.
+@cindex minor version number register
+@cindex version number, minor, register
+The minor version number. For example, if the version number is@w{
+}1.03 then @code{.y} will contain@w{ }@samp{03}.
+
+@item .Y
+@vindex .Y
+@cindex revision number register
+The revision number of @code{groff}.
+
@item .g
@vindex .g
-Always 1.
-Macros should use this to determine whether they are running
-under GNU troff.
+@cindex @code{gtroff} identification register
+@cindex GNU-specific register
+Always@w{ }1. Macros should use this to determine whether they are
+running under GNU @code{troff}.
+
@item .A
@vindex .A
-If the current output device is ascii, this is set to 1,
-zero otherwise.
+@cindex @acronym{ASCII} approximation output register
+If the command line option @option{-a} is used to produce an
+@acronym{ASCII} approximation of the output, this is set to@w{ }1, zero
+otherwise. @xref{Groff Options}.
+
@item .P
@vindex .P
-This register indicates whether the current page is actualy being
-printed, i.e. if the @samp{-o} option is being used to only print
-selected pages.
-@xref{Options}, for more information.
+This register is set to@w{ }1 (and to@w{ }0 otherwise) if the current
+page is actually being printed, i.e., if the @option{-o} option is being
+used to only print selected pages. @xref{Groff Options}, for more
+information.
+
+@item .T
+@vindex .T
+If @code{gtroff} is called with the @option{-T} command line option, the
+number register @code{.T} is set to@w{ }1, and zero otherwise.
+@xref{Groff Options}.
+
+@maindex \*(.T
+@cindex output device register
+Additionally, @code{gtroff} predefines a single (read/write) string
+register @code{.T} which contains the current output device (for
+example, @samp{latin1} or @samp{ps}).
@end table
+
+@c =====================================================================
+
@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, Programming Tutorial
@section Manipulating Filling and Adjusting
@cindex manipulating filling and adjusting
@cindex filling and adjusting, manipulating
@cindex adjusting and filling, manipulating
+@cindex justifying text
+@cindex text, justifying
-
-@findex br
@cindex break
@cindex line break
-Several ways of causing @dfn{breaks} were given in
-@ref{Implicit Line Breaks}.
-The @code{br} request will likewise cause a break.
-Several other requests will also cause breaks, implicitly.
-They are
-@code{bp},
-@code{ce},
-@code{fi},
-@code{fl},
-@code{in},
-@code{nf},
-@code{sp} and
-@code{ti}.
-
-@findex nf
+@findex bp
+@findex ce
+@findex cf
@findex fi
+@findex fl
+@findex in
+@findex nf
+@findex rj
+@findex sp
+@findex ti
+@findex trf
+Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
+Breaks}. The @code{br} request will likewise cause a break. Several
+other requests will also cause breaks, but implicitly. These are
+@code{bp}, @code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in},
+@code{nf}, @code{rj}, @code{sp}, @code{ti}, and @code{trf}.
+
+@Deffn{Request, br, }
+Break the current line, i.e., the input collected so far will be emitted
+without adjustment.
+
+If the no-break control character is used, no break will happen:
+
+@example
+a
+'br
+b
+ @result{} a b
+@end example
+@end_Deffn
+
+Initially, @code{gtroff} will fill and adjust text to both margins.
+Filling can be disabled via the @code{nf} request and re-enabled with
+the @code{fi} request.
+
+@cindex fill mode
+@cindex mode, fill
@vindex .u
-Initially, groff will fill and ajust text to both margins.
-Filling can be disabled via the @code{nf} request
-and re-enabled with the @code{fi} request.
-These implicitly disable and re-enable adjusting.
-Both of these will cause break in text currently being filled.
-The number register @code{.u} is equal to 1 in fill mode and 0 in
-no-fill mode.
+@Deffn{Request, fi, }
+Activate fill mode (which is the default). This request implicitly
+enables adjusting; it will also cause a break in the text currently
+being filled. The number register @code{.u} is set to@w{ }1.
-@findex ad
-@findex na
-@vindex .j
-Adjusting can be disabled with the @code{ad} request and re-enabled
-with the @code{na} request.
-The @code{ad} request takes a single argument to indicate how to
-adjust text.
-The current adjustment mode is available in the number register
-@code{.j}.
+The fill mode status is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
-@table @samp
+@cindex no-fill mode
+@cindex mode, no-fill
+@Deffn{Request, nf, }
+Activate no-fill mode. Input lines are output as-is, retaining line
+breaks. The current line length will be ignored. This command
+implicitly disables adjusting; it also causes a break. The number
+register @code{.u} will be set to@w{ }0.
+
+The fill mode status is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
+@Deffn{Request, ad, [@var{mode}]}
+Set adjusting mode.
+
+Activation and deactivation of adjusting will be implicitly done with
+calls to the @code{fi} resp.@: @code{nf} requests.
+
+@var{mode} can have one of the following values:
+
+@table @code
@item l
@cindex ragged-right
Adjust text to the left margin. This produces what is traditionally
called ragged-right text.
+
@item r
-Adjust text to the right margin.
+@cindex ragged-left
+Adjust text to the right margin, producing ragged-left text.
+
@item c
-Center filled text.
+@cindex centered text
+@findex ce
+Center filled text. This is different to the @code{ce} request which
+only centers text without filling.
+
@item b
@itemx n
-Justify to both margins. This is groff's default.
+Justify to both margins. This is the default used by @code{gtroff}.
@end table
-With no argument to @code{ad}, troff will adjust lines the same way
-it was the last time it was filling. For example:
+With no argument, @code{gtroff} will adjust lines in the same way it did
+before adjusting has been deactivated (with a call to @code{na}, for
+example).
@example
text
@@ -2404,52 +3845,108 @@ text
text
@end example
-@findex \p
-The escape @code{\p} will cause a break and cause the remaining text
-to be adjusted.
-
-@findex ss
-The @code{ss} request allows you to change the minimum size of a
-space between filled words.
-This request takes it's units as one twelfth of the
-spacewidth parameter for the current font. Initially both the word
-space size and the sentence space size are 12.
-
-When two arguments are given to the @code{ss} request, the second argument
-gives the sentence space size. If the second argument is not given, the
-sentence space size will be the same as the word space size.
-The sentence space size
-is used in two circumstances: if the end of a sentence occurs at the end
-of a line in fill mode, then both an inter-word space and a sentence
-space will be added; if two spaces follow the end of a sentence in the
-middle of a line, then the second space will be a sentence space. Note
-that the behaviour of @sc{Unix} troff will be exactly that exhibited by GNU
-troff if a second argument is never given to the @code{ss} request. In GNU
-troff, as in @sc{Unix} troff, you should always follow a sentence with either
-a newline or two spaces.
+@vindex .j
+@cindex current adjustment mode register
+The current adjustment mode is available in the number register
+@code{.j}; it can be stored and subsequently used to set adjustment.
+
+The adjustment mode status is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
+@Deffn{Request, na, }
+Disable adjusting. This request won't change the current adjustment
+mode: A call to @code{ad} afterwards will use the previous adjustment
+setting.
+
+The adjustment mode status is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
+@Deffn{Escape, \\p, }
+Adjust the current line and cause a break.
+
+In most cases this will produce very ugly results, since @code{gtroff}
+doesn't have a sophisticated paragraph building algorithm (as @TeX{}
+does, for example); instead, @code{gtroff} fills and adjusts a paragraph
+line by line:
+
+@example
+ This is an uninteresting sentence.
+ This is an uninteresting sentence.\p
+ This is an uninteresting sentence.
+@end example
+
+is formatted as
+
+@example
+ This is an uninteresting sentence. This is an
+ uninteresting sentence.
+ This is an uninteresting sentence.
+@end example
+@end_Deffn
+
+@cindex word space size
+@cindex size of word space
+@cindex space between words
+@cindex sentence space size
+@cindex size of sentence space
+@cindex space between sentences
+@Deffn{Request, ss, word_space_size [@var{sentence_space_size}]}
+Change the minimum size of a space between filled words. It takes its
+units as one twelfth of the space width parameter for the current font.
+Initially both the @var{word_space_size} and @var{sentence_space_size}
+are@w{ }12.
+
+@cindex fill mode
+@cindex mode, fill
+If two arguments are given to the @code{ss} request, the second argument
+sets the sentence space size. If the second argument is not given,
+sentence space size will be set to @var{word_space_size}. The sentence
+space size is used in two circumstances: if the end of a sentence occurs
+at the end of a line in fill mode, then both an inter-word space and a
+sentence space will be added; if two spaces follow the end of a sentence
+in the middle of a line, then the second space will be a sentence space.
+Note that the behaviour of @acronym{UNIX} @code{troff} will be exactly
+that exhibited by GNU @code{troff} if a second argument is never given
+to the @code{ss} request. In GNU @code{troff}, as in @acronym{UNIX}
+@code{troff}, a sentence should always be followed by either a newline
+or two spaces.
@vindex .ss
@vindex .sss
-The number registers @code{.ss} and @code{.sss} are
-the values of the parameters set by the first and second
-arguments of the @code{ss} request.
+The number registers @code{.ss} and @code{.sss} hold the values of the
+parameters set by the first and second arguments of the @code{ss}
+request.
-@findex ce
-The @code{ce} request will center text.
-While the @samp{ad c} request will also center text, it has the side
-effect of filling the text. The @code{.ce} request will not fill the
-text it affects.
-This request causes a break.
+The word space and sentence space values are associated with the current
+environment (@pxref{Environments}).
+
+This request is ignored in nroff mode; it is also ignored if there is no
+parameter.
+@end_Deffn
-With no arguments, @code{ce} will fill the next line of text.
-The single argument @code{ce} takes is a number indicating the
-number of lines to be centered. With no argument centering is
-disabled.
+@cindex centering lines
+@cindex lines, centering
+@Deffn{Request, ce, [@var{nnn}]}
+Center text. While the @w{@samp{.ad c}} request will also center text,
+it has the side effect of filling the text. @code{ce} will not fill the
+text it affects. This request causes a break.
+
+With no arguments, @code{ce} will center the next line of text.
+@var{nnn} specifies the number of lines to be centered. If
+the argument is zero or negative, centering is disabled.
+
+@findex ll
+@findex in
+@findex ti
+The basic length for centering text is the line length (as set with the
+@code{ll} request) minus the indentation (as set with the @code{in}
+request). Temporary indentation is ignored.
-A common idiom is to turn on centering for a large number of lines,
-and then turn off centering when you are done with the centered text.
-This is useful for any request which takes a number of lines as an
-argument.
+A common idiom is to turn on centering for a large number of lines, and
+to turn off centering after text to be centered. This is useful for any
+request which takes a number of lines as an argument.
@example
.ce 1000
@@ -2462,362 +3959,831 @@ more interesting
@end example
@vindex .ce
-The @code{.ce} number register contains the number of lines remaining
-to be centered, as set by the @code{ce} request.
+The @code{.ce} number register contains the number of lines remaining to
+be centered, as set by the @code{ce} request.
+@end_Deffn
-
-@findex rj
+@cindex justifying text
+@cindex text, justifying
+@cindex right-justifying
@vindex .rj
-A similar request is @code{rj} request which will justify unfilled
-text to the right margin. Its arguments are identical to the
-@code{ce} request.
-The @code{.rj} number register is
-the number of lines to be right-justified as set by the @code{rj}
-request.
+@Deffn{Request, rj, [@var{nnn}]}
+Justify unfilled text to the right margin. Arguments are identical to
+the @code{ce} request. The @code{.rj} number register is the number of
+lines to be right-justified as set by the @code{rj} request. This
+request causes a line break.
+@end_Deffn
+@c =====================================================================
@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, Programming Tutorial
@section Manipulating Hyphenation
@cindex manipulating hyphenation
@cindex hyphenation, manipulating
+As discussed in @ref{Hyphenation}, @code{gtroff} will hyphenate words.
+There are a number of ways to influence hyphenation.
-As discussed in @ref{Hyphenation}, groff will hyphenate words.
-There are a number of ways to modify the how hyphenation is done.
+@Deffn{Request, hy, [@var{mode}]}
+Enable hyphenation. The request has an optional numeric argument,
+@var{mode}, to restrict hyphenation if necessary:
-@findex nh
-@findex hy
-@vindex .hy
-This hyphenation can be turned off with the @code{nh} request, and
-turned back on with the @code{hy} request. However, troff's
-hyphenation facilities are far more flexible than this. The @code{hy}
-request can be used to tell troff to restrict hypenation to certain
-cases. The request takes a single numeric argument.
-The current hyphenation restrictions can be found in the number
-register @code{.hy}
-
-@table @samp
+@table @code
@item 1
-The default argument, which
-indicates to hyphenate without restrictions.
+The default argument if @var{mode} is omitted. Hyphenate without
+restrictions. This is also the start-up value of @code{gtroff}.
+
@item 2
Do not hyphenate the last word on a page or column.
+
@item 4
Do not hyphenate the last two characters of a word.
+
@item 8
Do not hyphenate the first two characters of a word.
@end table
-@findex hlm
+Values in the previous table are additive. For example, the value@w{
+}12 causes @code{gtroff} to neither hyphenate the last two nor the first
+two characters of a word.
+
+@vindex .hy
+@cindex hyphenation restrictions register
+The current hyphenation restrictions can be found in the number register
+@samp{.hy}.
+
+The hyphenation mode is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
+@Deffn{Request, nh, }
+Disable hyphenation (i.e., set the hyphenation mode to zero). Note that
+the hyphenation mode of the last call to @code{hy} is not remembered.
+
+The hyphenation mode is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
@vindex .hlc
@vindex .hlm
-The @code{hlm} request will
-set the maximum number of consecutive hyphenated lines to the value
-given as the first argument.
-If this number is
-negative, there is no maximum. The default value is -1.
-This value is
-associated with the current environment. Only lines output from an
+@findex \%
+@cindex explicit hyphens
+@cindex hyphen, explicit
+@cindex consecutive hyphenated lines
+@cindex lines, consecutive hyphenated
+@cindex hyphenated lines, consecutive
+@Deffn{Request, hlm, [@var{nnn}]}
+Set the maximum number of consecutive hyphenated lines to @var{nnn}. If
+this number is negative, there is no maximum. The default value is@w{
+}-1 if @var{nnn} is omitted. This value is associated with the current
+environment (@pxref{Environments}). Only lines output from a given
environment count towards the maximum associated with that environment.
Hyphens resulting from @code{\%} are counted; explicit hyphens are not.
-The current setting of this is available in the @code{.hlm} request.
-Also the number of immediately preceding consecutive hyphenated lines
-are available in the number register @code{.hlc}.
-@findex hw
-The @code{hw} request allows you to specify how a specific word is
-to be hyphenated. It takes only one argument which is the word with
-hyphens at the hyphenation points. For example:
-@samp{.hw in-sa-lub-rious}.
-@c In old versions of troff there was a
-@c limited amount of space to store such information, fortunately,
-@c with groff, this is no longer a restriction.
+The current setting of @code{hlm} is available in the @code{.hlm}
+register. Also the number of immediately preceding consecutive
+hyphenated lines are available in the number register @samp{.hlc}.
+@end_Deffn
-@findex \%
-@cindex hyphenation character
-@cindex character, hyphenation
-You can also tell troff how to hyphenate words on the fly with the
-use of the @code{\%} escape, also known as the @dfn{hyphenation
-character}. Preceding a word with this character will prevent it
-from being hyphenated, putting it in a word will indicate to troff
-that the word may be hyphenated at that point. Note that this
-mechanism will only affect one word, if you want to change the
-hyphenation of a word for the entire document, use the @code{hw}
-request.
+@Deffn{Request, hw, word1 word2 @dots{}}
+Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated. The
+words must be given with hyphens at the hyphenation points. For
+example:
-@findex hc
-The @code{hc} request allows you to change the hyphenation character.
-The character specified as an argument will then work the same as the
-@code{\%} escape, and, thus, no longer appear in the output. Without
-an argument it will return the hyphenation character to @code{\%}.
+@example
+.hw in-sa-lub-rious
+@end example
-@findex hpf
-To further customize hyphenation the @code{hpf} request will read in
-a file of hyphenation patterns.
-This file will be searched for in the
-same way that @file{tmac.@var{name}} is searched for when the
-@samp{-m@var{name}} option is specified.
-
-It should have the same format as the argument to the
-\patterns primitive in @TeX{}; the letters appearing in this file are
-interpreted as hyphenation codes.
-A @samp{%} character in the patterns file
-introduces a comment that continues to the end of the line.
+@noindent
+Besides the space character, any character whose hyphenation code value
+is zero can be used to separate the arguments of @code{hw} (see the
+documentation for the @code{hcode} request below for more information).
+In addition, this request can be used more than once.
+
+Hyphenation exceptions specified with the @code{hw} request are
+associated with the current hyphenation language; it will cause an error
+if there is no current hyphenation language.
+
+This request is ignored if there is no parameter.
+
+In old versions of @code{troff} there was a limited amount of space to
+store such information; fortunately, with @code{gtroff}, this is no
+longer a restriction.
+@end_Deffn
+
+@cindex hyphenation character
+@cindex character, hyphenation
+@cindex disabling hyphenation
+@cindex hyphenation, disabling
+@Deffn{Escape, \\%, }
+To tell @code{gtroff} how to hyphenate words on the fly, the @code{\%}
+escape, also known as the @dfn{hyphenation character}, can be used.
+Preceding a word with this character will prevent it from being
+hyphenated, putting it in a word will indicate to @code{gtroff} that the
+word may be hyphenated at that point. Note that this mechanism will
+only affect that one occurrence of the word; to change the hyphenation
+of a word for the entire document, use the @code{hw} request.
+@end_Deffn
+
+@Deffn{Request, hc, [@var{char}]}
+Change the hyphenation character to @var{char}. This character will
+then work the same as the @code{\%} escape, and thus, no longer appear
+in the output. Without an argument, @code{hc} will reset the
+hyphenation character to be @code{\%} (the default) only.
+
+The hyphenation character is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
+@cindex hyphenation patterns
+@cindex patterns for hyphenation
+@Deffn{Request, hpf, pattern_file}
+Read in a file of hyphenation patterns. This file will be searched for
+in the same way as @file{tmac.@var{name}} is searched for if the
+@option{-m@var{name}} option is specified.
+
+It should have the same format as the argument to the @code{\patterns}
+primitive in @TeX{} (without using @TeX{}'s macro expansion); the
+letters appearing in this file are interpreted as hyphenation codes. A
+@samp{%} character in the patterns file introduces a comment that
+continues to the end of the line.
+
+If no @code{hpf} request is specified (either in the document or in a
+macro package), @code{gtroff} won't hyphenate at all.
@findex hla
-@findex hpf
@pindex troffrc
-The set of
-hyphenation patterns is associated with the current language set by the
-@code{hla} request. The @code{hpf} request is usually invoked by the
-@file{troffrc} file.
+@pindex troffrc-end
+@pindex hyphen.us
+The set of hyphenation patterns is associated with the current language
+set by the @code{hla} request. The @code{hpf} request is usually
+invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
+@file{troffrc} loads hyphenation patterns for American English (in file
+@file{hyphen.us}).
+
+@code{hpf} will cause an error if there is no current hyphenation
+language.
+@end_Deffn
+
+@cindex hyphenation code
+@cindex code, hyphenation
+@Deffn{Request, hcode, c1 code1 c2 code2 @dots{}}
+Sets the hyphenation code of character @var{c1} to @var{code1}, that of
+@var{c2} to @var{code2}, etc. A hyphenation code must be a single input
+character (not a special character) other than a digit or a space.
+Initially each lower-case letter (@samp{a}-@samp{z}) has its hyphenation
+set to itself, and each upper-case letter (@samp{A}-@samp{Z}) has a
+hyphenation code which is the lower-case version of itself.
+
+This request will be ignored if it has no parameter.
+@end_Deffn
+
+@cindex hyphenation margin
+@cindex margin for hyphenation
+@findex ad
+@Deffn{Request, hym, [@var{length}]}
+Set the (right) hyphenation margin to @var{length}. If the current
+adjustment mode is not@w{ }@samp{b}, the line will not be hyphenated if
+it is shorter than @var{length}. Without argument, the hyphenation
+margin will be reset to its default value, which is@w{ }0. The default
+scaling indicator for this request is@w{ }@code{m}. The hyphenation
+margin is associated with the current environment
+(@pxref{Environments}).
+
+A negative argument will reset the hyphenation margin to zero, emitting
+a warning of type @samp{range}.
-@findex hcode
-@code{.hcode @var{c1 code1 c2 code2...}}
-Set the hyphenation code of character @var{c1} to code1 and that of
-@var{c2} to @var{code2}.
-A hyphenation code must be a single input character (not a
-special character) other than a digit or a space. Initially each
-lower-case letter has a hyphenation code, which is itself, and each
-upper-case letter has a hyphenation code which is the lower case
-version of itself.
-
-@findex hym
@vindex .hym
-The @code{hym} request will set the hyphenation margin to the value
-given as the first argument: when the current adjustment mode is not
-@samp{b}, the line will not be hyphenated if the line is no more than
-that amount short.
-The default hyphenation margin is 0. The default scaling
-indicator for this request is m. The hyphenation margin is associated
-with the current environment. The current hyphenation margin is
-available in the @code{.hym} register.
-
-@findex hys
+@cindex current hyphenation margin register
+The current hyphenation margin is available in the @code{.hym} register.
+@end_Deffn
+
+@cindex hyphenation space
+@findex ad
+@Deffn{Request, hys, [@var{hyphenation_space}]}
+Set the hyphenation space to @var{hyphenation_space}. If the current
+adjustment mode is@w{ }@samp{b}, don't hyphenate the line if it
+can be justified by adding no more than @var{hyphenation_space} extra
+space to each word space. Without argument, the hyphenation space is
+set to its default value, which is@w{ }0. The default scaling indicator
+for this request is@w{ }@code{m}. The hyphenation space is associated
+with the current environment (@pxref{Environments}).
+
+A negative argument will reset the hyphenation space to zero, emitting a
+warning of type @samp{range}.
+
@vindex .hys
-The @code{hys} request set the hyphenation space to the value given as
-the first argument: when the current adjustment mode is b, don't
-hyphenate the line if the line can be justified by adding no more than
-that amount of extra space to each word space. The default
-hyphenation space is 0. The default scaling indicator for this
-request is m. The hyphenation space is associated with the current
-environment. The current hyphenation space is available in the
-@code{.hys} register.
+@cindex current hyphenation space register
+The current hyphenation space is available in the @code{.hys} register.
+@end_Deffn
-@findex shc
-The @code{shc} request will set the soft hyphen character to the
-argument given as an argument. If the argument is omitted, the soft
-hyphen character will be set to the default @code{\(hy}. The soft
-hyphen character is the character which will be inserted when a word
-is hyphenated at a line break. If the soft hyphen character does not
-exist in the font of the character immediately preceding a potential
+@cindex soft hyphen character
+@cindex character, soft hyphen
+@glindex hy
+@findex char
+@findex tr
+@Deffn{Request, shc, [@var{char}]}
+Set the soft hyphen character to @var{char}. If the argument is
+omitted, the soft hyphen character will be set to the default character
+@code{\(hy} (this is the start-up value of @code{gtroff} also). The
+soft hyphen character is the character which will be inserted when a
+word is hyphenated at a line break. If the soft hyphen character does
+not exist in the font of the character immediately preceding a potential
break point, then the line will not be broken at that point. Neither
definitions (specified with the @code{char} request) nor translations
-(specified with the @code{tr} request) are considered when finding the soft
-hyphen character.
+(specified with the @code{tr} request) are considered when finding the
+soft hyphen character.
+@end_Deffn
-@findex hla
-@vindex .hla
+@findex hpf
+@findex hw
@pindex troffrc
-The @code{hla} request will set the current hyphenation language to
-that given by the first argument. Hyphenation exceptions specified
-with the @code{hw} request and hyphenation patterns specified with the
-@code{hpf} request are both associated with the current hyphenation
-language. The @code{hla} request is usually invoked by the
-@file{troffrc} file. The current hyphenation language is available
-in the number register @code{.hla}.
+@pindex troffrc-end
+@Deffn{Request, hla, language}
+Set the current hyphenation language to the string @var{language}.
+Hyphenation exceptions specified with the @code{hw} request and
+hyphenation patterns specified with the @code{hpf} request are both
+associated with the current hyphenation language. The @code{hla}
+request is usually invoked by the @file{troffrc} or the
+@file{troffrc-end} files; @file{troffrc} sets the default language to
+@samp{us}.
+
+@vindex .hla
+@cindex current hyphenation language register
+The current hyphenation language is available as a string in the
+read-only number register @samp{.hla}.
+
+@example
+.ds curr_language \n[.hla]
+\*[curr_language]
+ @result{} us
+@end example
+@end_Deffn
+@c =====================================================================
@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, Programming Tutorial
@section Manipulating Spacing
@cindex manipulating spacing
@cindex spacing, manipulating
+@Deffn{Request, sp, [@var{distance}]}
+Space downwards @var{distance}. With no argument it will advance 1@w{
+}line. A negative argument will cause @code{gtroff} to move up the page
+the specified distance. If the argument is preceded by a @samp{|}
+@code{gtroff} will move that distance from the top of the page. This
+request causes a line break. The default scaling indicator is@w{
+}@code{v}.
+@end_Deffn
+
+@cindex double-spacing
+@Deffn{Request, ls, [@var{nnn}]}
+Output @w{@var{nnn}-1} blank lines after each line of text. With no
+argument @code{gtroff} will use the previous value before the last
+@code{ls} call.
-@findex sp
-The @code{sp} request will cause troff to space downwards the
-distance specified as the first argument. With no argument it will
-advance 1 line.
-A negative argument will cause troff to move up the page the
-specified distance.
-If the argument is preceded by a @samp{|} troff will move that
-distance from the top of the page.
+@example
+.ls 2 \" This causes double-spaced output
+.ls 3 \" This causes triple-spaced output
+.ls \" Again double spaced
+@end example
+
+The line spacing is associated with the current environment
+(@pxref{Environments}).
-@findex ls
@vindex .L
-Often you may want your output to be double or triple spaced.
-The @code{ls} request will cause troff to output @var{n}-1 blank
-lines after each line of text, where @var{n} is the argument given to
-the @code{ls} request. With no argument troff will go back to single
-spacing. The number register @code{.L} contains the current line
-spacing setting.
+@cindex current line spacing register
+The number register @code{.L} contains the current line spacing setting.
+@end_Deffn
+
+@Deffn{Escape, \\x, spacing}
+Sometimes, extra vertical spacing is only needed occasionally, e.g.@: to
+allow space for a tall construct (like an equation). The @code{\x}
+escape will do this. The escape is given a numerical argument, usually
+enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
+is@w{ }@code{v}. If this number is positive extra vertical space will
+be inserted below the current line. A negative number will add space
+above. If this escape is used multiple times on the same line, the
+maximum of the values is used.
+
+@xref{Escapes}, for details on parameter delimiting characters.
-@findex \x
@vindex .a
-Sometimes, extra vertical spacing is only needed occasionaly,
-i.e. to allow space for a tall construct (like an equation).
-The @code{\x} escape will do this.
-The escape is given a numerical argument (like @samp{\x'3p'}).
-If this number is positive extra vertical space will be inserted
-below the current line. A negative number will add space above.
-If this escape is used multiple times on the same line, the maximum
-values are used.
-The @code{.a} number register contains the most recent
-extra vertical @strong{emph} line space.
+@cindex extra vertical line space register
+The @code{.a} number register contains the most recent (nonnegative)
+extra vertical line space.
+@c XXX
+@ignore
@example
... example of inline equation ...
@end example
+@end ignore
+@end_Deffn
-@findex ns
-@findex rs
+@findex sp
@cindex no-space mode
@cindex mode, no-space
-Spacing (via either @code{sp} or via blank lines) can be disabled
-with the @code{ns} request. This will enable @dfn{no-space mode}.
-This mode will end when actual text is output or the @code{rs}
-request is encountered. No-space mode will also prevent requests to
-advance to the next page unless they are accompanied by a page number
-(@pxref{Page Control}, for more information.)
+@cindex blank lines, disabling
+@cindex lines, blank, disabling
+@Deffn{Request, ns, }
+Enable @dfn{no-space mode}. In this mode, spacing (either via @code{sp}
+or via blank lines) is disabled. The @code{bp} request to advance to
+the next page is also disabled, except if it is accompanied by a page
+number (see @ref{Page Control}, for more information). This mode will
+end when actual text is output or the @code{rs} request is encountered.
+
+This request is useful for macros which want to avoid that subsequent
+macros inadvertently insert some vertical space before the text starts
+(for example, to set up the first paragraph after a section header). It
+is associated with the current diversion level.
+
+@c XXX xref
+@end_Deffn
+@Deffn{Request, rs, }
+Disable no-space mode. This request is associated with the current
+diversion level.
+
+@c XXX xref
+@end_Deffn
+
+
+@c =====================================================================
@node Tabs and Fields, Character Translations, Manipulating Spacing, Programming Tutorial
@section Tabs and Fields
@cindex tabs and fields
@cindex fields and tabs
+@cindex @acronym{EBCDIC} encoding of a tab
+A tab character (@acronym{ASCII} char@w{ }9, @acronym{EBCDIC} char@w{
+}5) causes a horizontal movement to the next tab stop (much
+like it did on a typewriter).
-@findex \t
-Tab stops are much like those on a typewriter: a tab character (or the
-@code{\t} escape) on input will cause horizontal motion to the next
-tab stop.
+@Deffn{Escape, \\t, }
+This escape is a non-interpreted tab character. In copy mode
+(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
+@end_Deffn
+
+@Deffn{Request, ta, [@var{n1} @var{n2} @dots{} @var{nn} @t{T} @var{r1} @var{r2} @dots{} @var{rn}]}
+Change tab stop positions. This request takes a series of tab
+specifiers as arguments (optionally divided into two groups with the
+letter @samp{T}) which indicate where each tab stop is to be (overriding
+any previous settings).
-@findex ta
-Tab stops can be changed with the @code{ta} request.
-This request takes a series of numbers as arguments which indicate
-where each tab stop is to be (overriding any previous settings).
-These can be specified absolutely,
-i.e. as the distance from the left margin.
-For example, the following wil set tab stops every one inch.
+Tab stops can be specified absolutely, i.e., as the distance from the
+left margin. For example, the following will set 6@w{ }tab stops every
+one inch.
@example
.ta 1i 2i 3i 4i 5i 6i
@end example
Tab stops can also be specified relatively (using a leading @samp{+})
-which means that the specified tab stop will be set that distance
-from the previous tab stop. For example the following is equivalent
-to the previous example.
+which means that the specified tab stop will be set that distance from
+the previous tab stop. For example, the following is equivalent to the
+previous example.
@example
.ta 1i +1i +1i +1i +1i +1i
@end example
-After the specified tab stops repeat values may be set for tabs beyond
-the last one specified. This is most commonly used to specify tabs
-set at equal intervals. The compleat syntax for setting tabs is
-@code{ta @var{n1} @var{n2} @dots{} @var{nn} T @var{r1} @var{r2}
-@dots{} @var{rn}} This will set tabs at positions @var{n1}, @var{n2},
-@dots{}, @var{nn} and then set tabs at @var{nn}+@var{r1},
-@var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn} and then at
-@var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2}, @dots{},
-@var{nn}+@var{rn}+@var{rn}, and so on. For example the following is,
-yet again, the same as the previous examples.
+@code{gtroff} supports an extended syntax to specify repeat values after
+the @samp{T} mark (these values are always taken as relative) -- this is
+the usual way to specify tabs set at equal intervals. The following is,
+yet again, the same as the previous examples. It does even more since
+it defines an infinite number of tab stops separated by one inch.
@example
.ta T 1i
@end example
-The material in each tab column may be justified to the right or left
-or centered in the column. This is specified by appending an
-@samp{R}, @samp{L} or @samp{C} to the number specifying that tab stop.
-The default justification is @samp{L}.
+Now we are ready to interpret the full syntax given at the beginning:
+Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
+tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
+and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
+@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
+
+Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
+20c 23c 28c 30c @dots{}}.
+
+The material in each tab column (i.e., the column between two tab stops)
+may be justified to the right or left or centered in the column. This
+is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
+specifier. The default justification is @samp{L}. Example:
@example
.ta 1i 2iC 2iR
@end example
+Some notes:
+
+@itemize @bullet
+@item
+The default unit of the @code{ta} request is @samp{m}.
+
+@item
+A tab stop is converted into a non-breakable horizontal movement which
+can be neither stretched nor squeezed. For example,
+
+@example
+.ds foo a\tb\tc
+.ta T 5i
+\*[foo]
+@end example
+
+@noindent
+creates a single line which is a bit longer than 10@w{ }inches (a string
+is used to show exactly where the tab characters are). Now consider the
+following:
+
+@example
+.ds bar a\tb b\tc
+.ta T 5i
+\*[bar]
+@end example
+
+@noindent
+@code{gtroff} first converts the tab stops of the line into unbreakable
+horizontal movements, then splits the line after the second @samp{b}
+(assuming a sufficiently short line length). Usually, this isn't what
+the user wants.
+
+@item
+Superfluous tabs (i.e., tab characters which do not correspond to a tab
+stop) are ignored except the first one which delimits the characters
+belonging to the last tab stop for right-justifying resp.@: centering.
+Consider the following example
+
+@example
+.ds Z foo\tbar\tfoo
+.ds ZZ foo\tbar\tfoobar
+.ds ZZZ foo\tbar\tfoo\tbar
+.ta 2i 4iR
+\*[Z]
+.br
+\*[ZZ]
+.br
+\*[ZZZ]
+.br
+@end example
+
+@noindent
+which produces the following output:
+
+@example
+foo bar foo
+foo bar foobar
+foo bar foobar
+@end example
+
+@noindent
+The first line right-justifies the second `foo' relative to the tab
+stop. The second line right-justifies `foobar'. The third line finally
+right-justifies only `foo' because of the additional tab character which
+marks the end of the string belonging to the last defined tab stop.
+
+@item
+Tab stops are associated with the current environment
+(@pxref{Environments}).
+
+@item
+Calling @code{ta} without an argument will unset all tab stops.
+
+@item
+@cindex tab stops, in nroff mode
+The start-up value of @code{gtroff} is @w{@samp{T 0.5i}}. This value is
+used even in nroff mode (contrary to @acronym{UNIX} @code{nroff} which
+has tab stops preset every 0.8@dmn{i}).
+@end itemize
+
@vindex .tabs
-The number register @code{.tabs} contains
-a string representation of the current tab settings suitable for use as
-an argument to the @code{ta} request.
+@cindex current tab settings register
+The number register @code{.tabs} contains a string representation of the
+current tab settings suitable for use as an argument to the @code{ta}
+request.
-@findex tc
-Normally troff will fill the space to the next tab stop with spaces.
-In some cases you may wish to change this. The @code{tc} request
-will do this. With no argument troff will revert to using spaces.
+@example
+.ds tab-string \n[.tabs]
+\*[tab-string]
+ @result{} T120u
+@end example
+@end_Deffn
+
+@cindex tab repitition character
+@cindex character, tab repitition
+@Deffn{Request, tc, [@var{fill-char}]}
+Normally @code{gtroff} will fill the space to the next tab stop with
+space. This can be changed with the @code{tc} request. With no
+argument @code{gtroff} will revert to using space, which is the default.
+The value of this @dfn{tab repitition} character is associated with the
+current environment (@pxref{Environments}).
+@end_Deffn
-@subsection Leaders
-@cindex leaders
+@menu
+* Leaders::
+* Fields::
+@end menu
-@findex lc
-Sometimes you may wish to use the @code{tc} request to fill a tab
-stop with a given character, but also, you want to use normal tab
-stops on the rest of the line. For this groff provides an alternate
-tab mechanism, called @dfn{leaders} which will do just that.
-They are used exclusively to produce a repeated run of characters to
-the next tab stop.
+@c ---------------------------------------------------------------------
-You can declare what character will be repeated with the @code{lc}
-request. If you do not give it an argument, the leaders will act the
-same as tabs.
+@node Leaders, Fields, Tabs and Fields, Tabs and Fields
+@subsection Leaders
+@cindex leaders
-@findex \a
-The difference is that a leader is invoked by using the @code{\a}
-escape.
+Sometimes it may may be desirable to use the @code{tc} request to fill a
+particular tab stop with a given character (for example dots in a table
+of contents), but also normal tab stops on the rest of the line. For
+this @code{gtroff} provides an alternate tab mechanism, called
+@dfn{leaders} which will do just that.
+
+@cindex leader character
+A leader character (character code@w{ }1) behaves similarly to a tab
+character: It moves to the next tab stop. The only difference is that
+for this movement, the fill character defaults to a period character and
+not to space.
+
+@Deffn{Escape, \\a, }
+This escape is a non-interpreted leader character. In copy mode
+(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
+character.
+@end_Deffn
+
+@cindex leader repitition character
+@cindex character, leader repitition
+@Deffn{Request, lc, [@var{fill-char}]}
+The character that will be repeated can be declared with the @code{lc}
+request. Without an argument, leaders will act the same as tabs (i.e.,
+using space for filling). @code{gtroff}'s start-up value is @samp{.}.
+The value of this @dfn{leader repitition} character is associated with
+the current environment (@pxref{Environments}).
+@end_Deffn
@cindex table of contents
@cindex contents, table of
-So for a table of contents you may want to have tab stops defined so
+For a table of contents, to name an example, tab stops may be defined so
that the section number is one tab stop, the title is the second with
-the remaining space being filled with a line of dots and then the
-page number slightly separated from the dots.
+the remaining space being filled with a line of dots, and then the page
+number slightly separated from the dots.
@example
+.ds entry 1.1\tFoo\a\t12
.lc .
-.ta .5iR 5i +.25i
-1.1\tFoo\a\t12
+.ta 1i 5i +.25i
+\*[entry]
@end example
+@noindent
+This produces
+
+@example
+1.1 Foo.......................................... 12
+@end example
+
+@c ---------------------------------------------------------------------
+
+@node Fields, , Leaders, Tabs and Fields
@subsection Fields
@cindex fields
-@findex fc
-Fields are a more general way of laying out tabular data.
-@code{fc}
+@cindex field delimiting character
+@cindex delimiting character for fields
+@cindex character, field delimiting
+@cindex field padding character
+@cindex padding character for fields
+@cindex character, field padding
+@dfn{Fields} are a more general way of laying out tabular data. A field
+is defined as the data between a pair of @dfn{delimiting characters}.
+It contains substrings which are separated by @dfn{padding characters}.
+The width of a field is the distance on the @emph{input} line from the
+position where the field starts to the next tab stop. A padding
+character inserts stretchable space similar to @TeX{}'s @code{\hss}
+command (thus it can even be negative) to make the sum of all substring
+lengths plus the stretchable space equal to the field width. If more
+than one padding character is inserted, the available space is evenly
+distributed among them.
+
+@Deffn{Request, fc, [@var{delim-char} [@var{padding-char}]]}
+Define a delimiting and a padding character for fields. If the latter
+is missing, the padding character defaults to a space character. If
+there is no argument at all, the field mechanism is disabled (which is
+the default). Note that contrary to e.g.@: the tab repitition
+character, delimiting and padding characters are not associated to the
+current environment (@pxref{Environments}).
+
+Example:
+
+@example
+.fc # ^
+.ta T 3i
+#foo^bar^smurf#
+.br
+#foo^^bar^smurf#
+@end example
+
+@noindent
+and here the result:
+
+@example
+foo bar smurf
+foo bar smurf
+@end example
+@end_Deffn
+
+
+@c =====================================================================
-@node Character Translations, Line Layout, Tabs and Fields, Programming Tutorial
+@node Character Translations, Troff and Nroff Mode, Tabs and Fields, Programming Tutorial
@section Character Translations
@cindex character translations
@cindex translations of characters
-
-@findex cc
-@findex c2
+@findex .
+@findex '
+@cindex control character
+@cindex character, control
+@cindex no-break control character
+@cindex character, no-break control
+@cindex control character, no-break
The control character (@samp{.}) and the no-break control character
(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
respectively.
-The single argument is the new character to be used, with no argument
-the normal control character is restored.
-@findex ec
-@findex eo
-The @code{eo} request will compleatly disable the escape mechanism.
-The @code{ec} request can be used to change the escape character from
-the default @samp{\} to what is specified as an argument.
+@Deffn{Request, cc, [@var{c}]}
+Set the control character to @var{c}. With no argument the default
+control character @samp{.} is restored. The value of the control
+character is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
-@findex tr
-The @code{tr} request will translate characters.
+@Deffn{Request, c2, [@var{c}]}
+Set the no-break control character to @var{c}. With no argument the
+default control character @samp{'} is restored. The value of the
+no-break control character is associated with the current environment
+(@pxref{Environments}).
+@end_Deffn
+
+@findex \
+@Deffn{Request, eo, }
+Disable the escape mechanism completely. After executing this request,
+the backslash character @samp{\} no longer starts an escape sequence.
+
+This request can be very helpful in writing macros since it is not
+necessary then to double the escape character. Here an example:
+
+@example
+.\" This is a simplified version of the
+.\" .BR request from the man macro package
+.eo
+.de BR
+. ds result \&
+. while (\n[.$] >= 2) \@{\
+. as result \fB\$1\fR\$2
+. shift 2
+. \@}
+. if \n[.$] .as result \fB\$1
+\*[result]
+. ft R
+..
+.ec
+@end example
+@end_Deffn
+
+@cindex escape character
+@cindex character, escape
+@Deffn{Request, ec, [@var{c}]}
+Set the escape character to @var{c}. With no argument the default
+escape character @samp{\} is restored. It can be also used to re-enable
+the escape mechanism after an @code{eo} request.
+
+Note that changing the escape character globally will likely break macro
+packages since @code{gtroff} has no mechanism (like @TeX{}) to `intern'
+macros, i.e., to convert a macro definition into an internal form which
+is independent of its representation. If a macro is called, it will be
+executed literally.
+@end_Deffn
+
+@Deffn{Escape, \\e, }
+This escape sequence prints the current escape character (which is the
+backslash character @samp{\} by default).
+@end_Deffn
+
+A @dfn{translation} is a mapping of an input character to an output
+character. The default mappings are given in the font definition files
+for the specific output device (@pxref{Font Files}); all mappings (both
+with @code{tr} and in the font definition files) occur at output time,
+i.e., the input character gets assigned the metric information of the
+mapped output character.
+
+@Deffn{Request, tr, @var{a}@var{b}@var{c}@var{d}@dots{}}
+Translate character @var{a} to @var{b}, character @var{c} to @var{d},
+etc. If there is an odd number of arguments, the last one will be
+translated to the space character.
+
+Some notes:
+
+@itemize @bullet
+@item
+@findex \(
+@findex \[
+@findex \'
+@findex \`
+@findex \-
+@findex \_
+@findex \C
+@findex \N
+@findex char
+@cindex special character
+@cindex character, special
+@cindex numbered character
+@cindex character, numbered
+Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
+@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
+characters defined with the @code{char} request, and numbered characters
+(@code{\N'@var{xxx}'}) can be translated also.
+
+@item
+@findex \e
+The @code{\e} escape can be translated also.
+
+@item
+@findex \%
+Characters can be mapped onto the @code{\%} escape (but @code{\%} can't
+be mapped onto another character).
+
+@item
+@cindex backspace character
+@cindex character, backspace
+@cindex leader character
+@cindex character, leader
+@cindex newline character
+@cindex character, newline
+@cindex tab character
+@cindex character, tab
+@findex \a
+@findex \t
+The following characters can't be translated: space (with one exception,
+see below), backspace, newline, leader (and @code{\a}), tab (and
+@code{\t}).
+
+@item
+@findex shc
+Translations are not considered for finding the soft hyphen character
+set with the @code{shc} request.
+
+@item
+@findex \&
+The character pair @samp{@var{c}\&} (this is an arbitrary character@w{
+}@var{c} followed by the zero width space character) will map this
+character to nothing.
+
+@example
+.tr a\&
+foo bar
+ @result{} foo br
+@end example
+
+@noindent
+It is even possible to map the space character to nothing:
+
+@example
+.tr aa \&
+foo bar
+ @result{} foobar
+@end example
+
+@noindent
+As shown in the example, the space character can't be the first
+character pair as an argument of @code{tr}. Additionally, it is not
+possible to map the space character to any other character; requests
+like @w{@samp{.tr aa x}} will undo @w{@samp{.tr aa \&}} instead.
+
+If justification is active, lines will be justified inspite of the
+`empty' space character (but there is no minimal distance, i.e.@: the
+space character, between words).
+
+@item
+After an output character has been constructed (this happens at the
+moment immediately before the character is appended to an output
+character list, either by direct output, in a macro, diversion, or
+string), it is no longer affected by @code{tr}.
+
+@c XXX xref
+
+@item
+Without an argument, the @code{tr} request is ignored.
+@end itemize
+@end_Deffn
+
+@findex \!@r{, and @code{trnt}}
+@Deffn{Request, trnt, @var{a}@var{b}@var{c}@var{d}@dots{}}
+@code{trnt} is the same as the @code{tr} request except that the
+translations do not apply to text that is transparently throughput into
+a diversion with @code{\!}. @xref{Diversions}, for more information.
-@findex trnt
-@findex \!
-@code{trnt}
-This is the same as the @code{tr} request except that the
-translations do not
-apply to text that is transparently throughput into a diversion with
-@code{\!}. @xref{Diversions}, for more information.
For example,
@example
@@ -2828,153 +4794,340 @@ For example,
.x
@end example
-will print @samp{b}; if @code{trnt} is used instead of @code{tr} it
-will print @samp{a}.
+@noindent
+will print @samp{b}; if @code{trnt} is used instead of @code{tr} it will
+print @samp{a}.
+@end_Deffn
+
+
+@c =====================================================================
+
+@node Troff and Nroff Mode, Line Layout, Character Translations, Programming Tutorial
+@section Troff and Nroff Mode
+@cindex troff mode
+@cindex mode, troff
+@cindex nroff mode
+@cindex mode, nroff
+
+Originally, @code{nroff} and @code{troff} were two separate programs,
+the former for tty output, the latter for everything else. With GNU
+@code{troff}, both programs are merged into one executable.
+Usually, a macro package can be used with both @code{nroff} and
+@code{troff}. Nevertheless, it is sometimes necessary to make a
+distinction between the two programs (resp.@: modes), and @code{gtroff}
+provides two built-in conditions @samp{n} and @samp{t} for the
+@code{if}, @code{ie}, and @code{while} requests to decide whether
+@code{gtroff} shall behave like @code{nroff} or like @code{troff}.
-@node Line Layout, Page Layout, Character Translations, Programming Tutorial
+@pindex troffrc
+@pindex troffrc-end
+@Deffn{Request, troff, }
+Make the @samp{t} built-in condition true (and the @samp{n} built-in
+condition false) for @code{if}, @code{ie}, and @code{while} conditional
+requests. This is the default if @code{gtroff} (@emph{not}
+@code{groff}) is started with the @option{-R} switch to avoid loading of
+the start-up files @file{troffrc} and @file{troffrc-end}. Without
+@option{-R}, @code{gtroff} stays in troff mode if the output device is
+not a tty (e.g.@: `ps').
+@end_Deffn
+
+@pindex tmac.tty
+@Deffn{Request, nroff, }
+Make the @samp{n} built-in condition true (and the @samp{t} built-in
+condition false) for @code{if}, @code{ie}, and @code{while} conditional
+requests. This is the default if @code{gtroff} uses a tty output
+device; the code for switching to nroff mode is in the file
+@file{tmac.tty} which will be loaded by the start-up file
+@code{troffrc}.
+@end_Deffn
+
+@xref{Conditionals and Loops}, for more details on built-in conditions.
+
+
+@c =====================================================================
+
+@node Line Layout, Page Layout, Troff and Nroff Mode, Programming Tutorial
@section Line Layout
@cindex line layout
@cindex layout, line
-
@cindex dimensions, line
@cindex line dimensions
-The following drawing shows the dimensions which troff uses for
+The following drawing shows the dimensions which @code{gtroff} uses for
placing a line of output onto the page. They are labeled with the
-request which manipulates that dimension.
+request which manipulates each dimension.
@example
@group
- | -->| in |<-- |
- -->| po |<-----------ll------------>|
+ -->| in |<--
+ |<-----------ll------------>|
+----+----+----------------------+----+
| : : : |
+----+----+----------------------+----+
+ -->| po |<--
+ |<--------paper width---------------->|
@end group
@end example
+@noindent
These dimensions are:
@ftable @code
@item po
-@vindex .o
-@dfn{Page offset}--This is the leftmost postition of text on the final
-output. This can be adjusted with the @code{po} request, and the
-current setting can be found in the builtin number register @code{.o}
-Note, that this request does not cause a break, so changing the page
-offset in the middle of text being filled may not do what you expect.
+@cindex left margin
+@cindex margin, left
+@cindex page offset
+@cindex offset, page
+@dfn{Page offset} -- this is the leftmost position of text on the final
+output, defining the @dfn{left margin}.
+
@item in
-@vindex .i
-@dfn{Indentation}--This is the distance from the left margin where text
-will be printed. This can be adjusted with the @code{in} request, and
-the current setting can be found in the builtin number register.
-@code{.i}
-This request causes a break.
+@cindex indentation
+@cindex line indentation
+@dfn{Indentation} -- this is the distance from the left margin where
+text will be printed.
-@findex ti
-@findex .in
-There is also the request @code{ti} which will cause one output line
-to be indented, after which the indentation returns to 0.
-This request causes a break.
-The number register @code{.in} is the indent that applies to the
-current output line.
@item ll
-@findex .l
-@findex .ll
-@dfn{Line length}--This is the distance from the left margin to right
-margin. This can be adjusted with the @code{.ll} request, and the
-current setting can be found in the builtin number register @code{.l}
-Note, as the figure implies, line length is not affected by the current
-indentation.
-The number register @code{.ll} is
-the line length that applies to the current output line.
+@cindex line length
+@cindex length of line
+@dfn{Line length} -- this is the distance from the left margin to right
+margin.
@end ftable
+@c XXX improve example
+
@example
.in +.5i
.ll -.5i
A bunch of really boring text which should
be indented from both margins.
-replace me with a better (and more) example!
+Replace me with a better (and more) example!
.in -.5i
.ll +.5i
@end example
+@cindex troff mode
+@cindex mode, troff
+@cindex nroff mode
+@cindex mode, nroff
+@Deffn{Request, po, [@var{offset}]}
+@Deffnx{Request, po, +offset}
+@Deffnx{Request, po, -offset}
+Set horizontal page offset to @var{offset} (resp.@: increment or
+decrement the current value by @var{offset}). Note that this request
+does not cause a break, so changing the page offset in the middle of
+text being filled may not yield the expected result. The initial value
+is 1@dmn{i} if in troff mode, and 0 if in nroff mode (@pxref{Troff and
+Nroff Mode}); the default scaling indicator is@w{ }@code{m} (and not@w{
+}@code{v} as incorrectly documented in the original @acronym{UNIX} troff
+manual).
+
+@vindex .o
+The current page offset can be found in the built-in number register
+@samp{.o}.
+
+If @code{po} is called without an argument, the page offset is reset to
+the previous value before the last call to @code{po}.
+
+@example
+.po 3i
+\n[.o]
+ @result{} 720
+.po -1i
+\n[.o]
+ @result{} 480
+.po
+\n[.o]
+ @result{} 720
+@end example
+@end_Deffn
+
+@Deffn{Request, in, [@var{indent}]}
+@Deffnx{Request, in, +indent}
+@Deffnx{Request, in, -indent}
+Set indentation to @var{indent} (resp.@: increment or decrement the
+current value by @var{indent}). This request causes a break.
+Initially, there is no indentation.
+
+If @code{in} is called without an argument, the indentation is reset to
+the previous value before the last call to @code{in}. The default
+scaling indicator is@w{ }@code{m}.
+
+The indentation is associated with the current environment.
+
+If a negative indentation value is specified (which is not allowed),
+@code{gtroff} emits a warning of type @samp{range} and sets the
+indentation to zero.
+
+The effect of @code{in} is delayed until a partially collected line (if
+it exists) is output.
+
+@vindex .i
+The current indentation (as set by @code{in}) can be found in the
+built-in number register @samp{.i}.
+@end_Deffn
+
+@Deffn{Request, ti, offset}
+@Deffnx{Request, ti, +offset}
+@Deffnx{Request, ti, -offset}
+Temporarily indent the next output line by @var{offset}. If an
+increment or decrement value is specified, adjust the temporary
+indentation relative to the value set by the @code{in} request.
+
+This request causes a break; its value is associated with the current
+environment. The default scaling indicator is@w{ }@code{m}. A call of
+@code{ti} without an argument is ignored.
+
+If the total indentation value is negative (which is not allowed),
+@code{gtroff} emits a warning of type @samp{range} and sets the
+temporary indentation to zero. `Total indentation' is either
+@var{offset} if specified as an absolute value, or the temporary plus
+normal indentation, if @var{offset} is given as a relative value.
+
+The effect of @code{ti} is delayed until a partially collected line (if
+it exists) is output.
+
+@vindex .in
+The number register @code{.in} is the indentation that applies to the
+current output line.
+
+The difference between @code{.i} and @code{.in} is that the latter takes
+into account whether a partially collected line still uses the old
+indentation value resp.@: a temporary indentation value is active.
+@end_Deffn
+
+@Deffn{Request, ll, [@var{length}]}
+@Deffnx{Request, ll, +length}
+@Deffnx{Request, ll, -length}
+Set the line length to @var{length} (resp.@: increment or decrement the
+current value by @var{length}). Initially, the line length is set to
+6.5@dmn{i}. The effect of @code{ll} is delayed until a partially
+collected line (if it exists) is output. The default scaling indicator
+is@w{ }@code{m}.
+
+If @code{ll} is called without an argument, the line length is reset to
+the previous value before the last call to @code{ll}. If a negative
+line length is specified (which is not allowed), @code{gtroff} emits a
+warning of type @samp{range} and sets the line length to zero.
+
+The line length is associated with the current environment.
+
+@vindex .l
+@vindex .ll
+@cindex current line length register
+The current line length (as set by @code{ll}) can be found in the
+built-in number register @code{.l}. The number register @code{.ll} is
+the line length that applies to the current output line.
+
+Similar to @code{.i} and @code{.in}, the difference between @code{.l}
+and @code{.ll} is that the latter takes into account whether a partially
+collected line still uses the old line length value.
+@end_Deffn
+
+
+@c =====================================================================
@node Page Layout, Page Control, Line Layout, Programming Tutorial
@section Page Layout
@cindex page layout
@cindex layout, page
+@code{gtroff} provides some very primitive operations for controlling
+page layout.
-Troff provides some very primitive operations for controlling page
-layout.
+@cindex page length
+@cindex length of page
+@Deffn{Request, pl, [@var{length}]}
+@Deffnx{Request, pl, +length}
+@Deffnx{Request, pl, -length}
+Set the @dfn{page length} to @var{length} (resp.@: increment or
+decrement the current value by @var{length}). This is the length of the
+physical output page. The default scaling indicator is@w{ }@code{v}.
-@findex pl
@vindex .p
-Troff lets you specify the @dfn{page length} via the @code{pl} request.
-This is the length of the physical output page.
-The current setting can
-be found in the builtin number register @code{.p}. Note that this only
-specifies the size of the page, not the not the top and bottom margins.
-Those are not done by groff directly, @xref{Traps}, for further
-information on how to do this.
+@cindex current page length register
+The current setting can be found in the built-in number register
+@samp{.p}.
+
+@cindex top margin
+@cindex margin, top
+@cindex bottom margin
+@cindex margin, bottom
+Note that this only specifies the size of the page, not the top and
+bottom margins. Those are not set by groff directly. @xref{Traps}, for
+further information on how to do this.
+
+Negative @code{pl} values are possible also, but not very useful: No
+trap is sprung, and each line is output on a single page (thus
+suppressing all vertical spacing).
+@end_Deffn
@cindex headers
@cindex footers
@cindex titles
-Troff provides several operations which help in setting up top and
-bottom titles (or headers and footers)
+@code{gtroff} provides several operations which help in setting up top
+and bottom titles (or headers and footers).
+@cindex title line
+@cindex three-part title
@findex tl
-The @code{tl} request will print a @dfn{title line}, which consists
-of three parts: a left justified portion, a centered portion and a
-right justified portion. The argument to @code{tl} is specified as
-@code{'@var{left}'@var{center}'@var{right}'}
-The @samp{%} character is replaced with the current page number.
-
+@vindex %
+The @code{tl} request will print a @dfn{title line}, which consists of
+three parts: a left justified portion, a centered portion and a right
+justified portion. The argument to @code{tl} is specified as
+@code{'@var{left}'@var{center}'@var{right}'}. The @samp{%} character is
+replaced with the current page number. This character can be changed
+with the @code{pc} request (see below).
+
+@cindex length of title line
+@cindex title line, length
@findex lt
@vindex .lt
-The title line is printed using its own line length, which is
-specified with the @code{lt} request. The current setting of this is
-available in the @code{.lt} number register.
+@cindex current title line length register
+The title line is printed using its own line length, which is specified
+with the @code{lt} request. The current setting of this is available in
+the @code{.lt} number register.
+@cindex page number
+@cindex number, page
@findex pn
The @code{pn} request will change the page number of the @emph{next}
page. The only argument is the page number.
@vindex %
@vindex .pn
-The current page number is stored in the number register @code{%}.
-The number register @code{.pn} contains the
-number of the next page:
-either the value set by a @code{pn} request, or
-the number of the current page plus 1.
-
+@cindex current page number register
+The current page number is stored in the number register @code{%}. The
+number register @code{.pn} contains the number of the next page: either
+the value set by a @code{pn} request, or the number of the current page
+plus@w{ }1.
+
+@cindex changing the page number character
+@cindex page number character, changing
@findex pc
-The @code{pc} request will change the page number character (used by
-the @code{tl} request) to a different character. With no argument,
-this mechanism is disabled.
+The @code{pc} request will change the page number character (used by the
+@code{tl} request) to a different character. With no argument, this
+mechanism is disabled.
+
+@xref{Traps}.
-@c distribute these through the text
-@xref{Traps}
+@c =====================================================================
@node Page Control, Fonts, Page Layout, Programming Tutorial
@section Page Control
@cindex page control
@cindex control, page
-
@findex bp
-To stop processing the current page, and move to the next page, you
-can invoke the @code{bp} request. This request will also cause a
-break. This request can also take an argument of what the next page
-should be numbered.
-The only difference
-between @code{bp} and @code{pn} is that @code{pn} does not cause a
-break or actually eject a page.
+@findex pn
+@cindex new page
+To stop processing the current page, and move to the next page, invoke
+the @code{bp} request. This request will also cause a break. It can
+also take an argument of what the next page should be numbered. The
+only difference between @code{bp} and @code{pn} is that @code{pn} does
+not cause a break or actually eject a page.
@example
.de newpage
@@ -2987,17 +5140,16 @@ break or actually eject a page.
@cindex orphan
@findex ne
-Often you may want to make sure that you have a certain amount of
-space before a new page occurs. This is most useful to make sure
-that there is not a single @dfn{orphan} line left at the bottom of a
-page. The @code{ne} request will ensure that there is a certain
-distance, specified by the first argument, before the next page is
-triggered (@pxref{Traps}, for further information).
-The default unit for @code{ne} is v's and the default argument
-is 1v.
+It is often necessary to force a certain amount of space before a new
+page occurs. This is most useful to make sure that there is not a
+single @dfn{orphan} line left at the bottom of a page. The @code{ne}
+request will ensure that there is a certain distance, specified by the
+first argument, before the next page is triggered (see @ref{Traps}, for
+further information). The default unit for @code{ne} is @code{v} and
+the default argument is@w{ }1@dmn{v}.
-For example, to make sure that no fewer than 2 lines get orphaned,
-you can do the following before each paragraph.
+For example, to make sure that no fewer than 2@w{ }lines get orphaned,
+do the following before each paragraph:
@example
.ne 2
@@ -3007,35 +5159,36 @@ text
@findex sv
@findex os
-The @code{sv} is similar to the @code{ne} request, it reserves the
-specified amount of vertical space. If the desired amount of space
-exists before the next trap (bottom page boundary), the space will be
-output immediately. If there is not enough space, it is stored for
-later output via the @code{os} request.
-The default argument is 1v and the default units are v's.
+@findex ne
+@code{sv} is similar to the @code{ne} request; it reserves the specified
+amount of vertical space. If the desired amount of space exists before
+the next trap (bottom page boundary), the space will be output
+immediately. If there is not enough space, it is stored for later
+output via the @code{os} request. The default argument is@w{ }1@dmn{v}
+and the default unit is @code{v}.
+
+@c =====================================================================
@node Fonts, Sizes, Page Control, Programming Tutorial
@section Fonts
@cindex fonts
-
@findex ft
@findex \f
-Groff gives you the ability to switch fonts at any point in your
-text. There are two ways to do this, via the @code{ft} request and
-the @code{\f} escape.
+@code{gtroff} has the ability to switch fonts at any point in the text.
+There are two ways to do this, via the @code{ft} request and the
+@code{\f} escape.
-Fonts are generaly specified as uppercase strings, which are usually
-1 to 4 characters representing an abreviation of acronym of the font
+Fonts are generally specified as upper-case strings, which are usually
+1@w{ }to 4 characters representing an abbreviation or acronym of the font
name.
-The basic set of fonts are R, I, B, and BI. These are Times Roman,
-Italic, Bold, and Bold Italic. There is also at least one symbol
-font which contains various special symbols (greek, mathematics).
-These latter fonts cannot be used directly, but should be used via an
-escape.
-
+The basic set of fonts are @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
+These are Times Roman, Italic, Bold, and Bold Italic. There is also at
+least one symbol font which contains various special symbols (Greek,
+mathematics). Such symbols fonts cannot be used directly, but should be
+used via an escape.
@menu
* Changing Fonts::
@@ -3046,16 +5199,19 @@ escape.
* Ligatures and Kerning::
@end menu
+@c ---------------------------------------------------------------------
+
@node Changing Fonts, Font Families, Fonts, Fonts
@subsection Changing Fonts
@cindex changing fonts
@cindex fonts, changing
-
@findex ft
-You can change fonts with both the @code{ft} request.
-With no arguments it
-will switch to the previous font (also known as P).
+@cindex previous font
+@cindex font, previous
+Font changes can be done either with the @code{ft} request or the
+@code{\f} request. With no arguments, it will switch to the previous
+font (also known as @samp{P}).
@example
eggs, bacon,
@@ -3066,78 +5222,102 @@ and sausage.
@end example
@findex \f
-The @code{\f} escape is useful for changing fonts in the middle of words
+The @code{\f} escape is useful for changing fonts in the middle of
+words:
@example
eggs, bacon, \fBspam\fP and sausage.
@end example
-Both of the above examples will produce the same output.
+@noindent
+Both of the above examples will produce the same output. Note the usage
+of @samp{P} to indicate the previous font -- using @code{\f} it is not
+possible to omit this parameter.
-Sometimes when putting letters of different fonts, you need more or
-less space at such boundaries. There are two escapes to help with
-this.
+Sometimes, when putting letters of different fonts, more or less space at
+such boundaries are needed. There are two escapes to help with this.
@findex \/
-The @code{\/} escape
-increases the width of the preceding character so that the spacing
-between that character and the following character will be correct if
-the following character is a roman character. For example, if an italic
-f is immediately followed by a roman right parenthesis, then in many
-fonts the top right portion of the f will overlap the top left of the
-right parenthesis.
-It is a good idea to use this escape sequence
-whenever an italic character is immediately followed by a roman
-character without any intervening space.
-
-@c producing @i{f}), which is ugly. Inserting \/ produces f) and avoids this problem.
+@cindex italic correction
+@cindex correction, italic
+The @code{\/} escape increases the width of the preceding character so
+that the spacing between that character and the following character will
+be correct if the following character is a Roman character. For
+example, if an italic@w{ }f is immediately followed by a Roman right
+parenthesis, then in many fonts the top right portion of the f will
+overlap the top left of the right parenthesis. It is a good idea to use
+this escape sequence whenever an italic character is immediately
+followed by a Roman character without any intervening space. This small
+amount of space is also called @dfn{italic correction}.
+
+@c XXX example
+@c producing @i{f}), which is ugly. Inserting \/ produces f) and avoids
+@c this problem.
@findex \,
-The @code{\,} escape
-modifies the spacing of the following character so that the spacing
-between that character and the preceding character will correct if the
-preceding character is a roman character.
-It is a good idea
-to use this escape sequence whenever a roman character is immediately
-followed by an italic character without any intervening space.
-
-@c For example, inserting \, between the parenthesis and the f changes (f to (f.
+@cindex left italic correction
+@cindex correction, left italic
+The @code{\,} escape modifies the spacing of the following character so
+that the spacing between that character and the preceding character will
+be correct if the preceding character is a Roman character. It is a
+good idea to use this escape sequence whenever a Roman character is
+immediately followed by an italic character without any intervening
+space. In analogy to above, this space could be called @dfn{left italic
+correction}, but this term isn't used widely.
+
+@c XXX example
+@c For example, inserting \, between the parenthesis and the f changes
+@c (f to (f.
@findex ftr
-The @code{ftr} request will translate fonts, it is called as
-@samp{.ftr @var{F G}}, which
-Translate font @var{F} to @var{G}.
-Whenever a font named @var{F} is referred to in @code{\f}
-escape sequence,
-or in the @code{ft}, @var{ul}, @var{bd}, @var{cs}, @var{tkf},
-@var{special}, @var{fspecial}, @var{fp},
-or @var{sty} requests, font @var{G} will be used. If @var{G} is
-missing, or equal to @var{F} then font @var{F} will not be translated.
+@findex ft
+@findex ul
+@findex bd
+@findex \f
+@findex cs
+@findex tkf
+@findex special
+@findex fspecial
+@findex fp
+@findex code
+The @code{ftr} request will translate fonts; its syntax is
+
+@example
+.ftr @var{F} @var{G}
+@end example
+@noindent
+which translates font@w{ }@var{F} to font@w{ }@var{G}. Whenever a font
+named @var{F} is referred to in a @code{\f} escape sequence, or in the
+@code{ft}, @code{ul}, @code{bd}, @code{cs}, @code{tkf}, @code{special},
+@code{fspecial}, @code{fp}, or @code{code} requests, font@w{ }@var{G}
+will be used. If @var{G} is missing, or equal to @var{F} then font@w{
+}@var{F} will not be translated.
+
+@c ---------------------------------------------------------------------
@node Font Families, Font Positions, Changing Fonts, Fonts
@subsection Font Families
@cindex font families
@cindex families, font
-
-Due to the variety of fonts available, groff has added the concept of
-font families. Each of these families has four styles (R, I, B and BI),
+Due to the variety of fonts available, @code{gtroff} has added the
+concept of font families. Each of these families has four styles
+(@samp{R}, @samp{I}, @samp{B} and @samp{BI}).
The fonts are specified as the concatenation of the font family and
-style. Specifying a font without the family part will cause groff to
-use that style of the current family.
-By default, groff uses the Times family.
+style. Specifying a font without the family part will cause
+@code{gtroff} to use that style of the current family. By default,
+@code{gtroff} uses the Times family.
-This way, you can just use the basic four fonts and select a
+This way, it is possible to use the basic four fonts and to select a
different font family on the command line.
@findex fam
@vindex .fam
-You can also switch font families with the @code{fam} request
-The current font family is available in the number register
-@code{.fam}.
-This is a string-valued register.
+Font families can be switched with the @code{fam} request. The current
+font family is available in the number register @code{.fam}. This is a
+string-valued register.
@example
spam,
@@ -3153,23 +5333,22 @@ baked beans,
and spam.
@end example
-
+@c ---------------------------------------------------------------------
@node Font Positions, Using Symbols, Font Families, Fonts
@subsection Font Positions
@cindex font positions
@cindex positions, font
-
-For the sake of old phototypesetters and compatability with old
-versions of troff, groff has the concept of font
-@dfn{positions}, on which various fonts are mounted.
-The last one or two are reserved for the symbol font(s).
+For the sake of old phototypesetters and compatability with old versions
+of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
+on which various fonts are mounted. The last one or two are reserved
+for the symbol font(s).
@findex fp
-New fonts can be mounted with the @code{fp} request.
-These numeric positions can then be referred to with font changing commands.
-When groff starts it is using font number one.
+New fonts can be mounted with the @code{fp} request. These numeric
+positions can then be referred to with font changing commands. When
+@code{gtroff} starts it is using font number one.
@example
.fp 1 H
@@ -3184,12 +5363,15 @@ say no more!
.ft
@end example
-(note that after these font changes have taken place the original
-font is restored.)
+@noindent
+Note that after these font changes have taken place, the original font
+is restored.
@vindex .f
-The current font in use, as a font position.
-This can be useful to remember the current font, for later recall.
+@cindex current font position register
+The current font in use, as a font position, is available in number
+register @code{.f}. This can be useful to remember the current font,
+for later recall.
@example
.nr save-font \n(.f
@@ -3198,6 +5380,7 @@ This can be useful to remember the current font, for later recall.
@end example
@vindex .fp
+@cindex next free font position register
The number of the next free font position is available in the number
register @code{.fp}. This is useful when mounting a new font, like so:
@@ -3205,249 +5388,342 @@ register @code{.fp}. This is useful when mounting a new font, like so:
.fp \n[.fp] NEATOFONT
@end example
-@pindex DESC
+@pindex DESC@r{, and font mounting}
Fonts not listed in the @file{DESC} file are automatically mounted on
-the next available font position when they are referenced.
-If a font is to be
-mountfed explicitly with the @code{fp} request on an unused font position, it
-should be mounted on the first unused font position, which can be found
-in the @code{.fp} register; although troff does not enforce this strictly,
-it will not allow a font to be mounted at a position whose number is
-much greater than that of any currently used position.
-
-The @code{fp} request has an optional third argument.
-This argument gives the
-external name of the font, which is used for finding the font
-description file. The second argument gives the internal name of the
-font which is used to refer to the font in troff after it has been
-mounted. If there is no third argument then the internal name will be
-used as the external name. This feature allows you to use fonts with
-long names in compatibility mode.
+the next available font position when they are referenced. If a font is
+to be mounted explicitly with the @code{fp} request on an unused font
+position, it should be mounted on the first unused font position, which
+can be found in the @code{.fp} register. Although @code{gtroff} does
+not enforce this strictly, it will not allow a font to be mounted at a
+position whose number is much greater than that of any currently used
+position.
+@findex fp
+The @code{fp} request has an optional third argument. This argument
+gives the external name of the font, which is used for finding the font
+description file. The second argument gives the internal name of the
+font which is used to refer to the font in @code{gtroff} after it has
+been mounted. If there is no third argument then the internal name will
+be used as the external name. This feature make it possible to use
+fonts with long names in compatibility mode.
+@c ---------------------------------------------------------------------
@node Using Symbols, Artificial Fonts, Font Positions, Fonts
@subsection Using Symbols
@cindex using symbols
@cindex symbols, using
-
@findex \(
@findex \[
-Symbols can be inserted by using a special escape sequence.
-This escape is simply the escape character (a backslash) followed by
-an identifier. The symbol identifiers have to be two or more
-characters, since single characters conflict with all the other
-escapes. The identifier can be either preceded by a parenthesis if
-it is two character, or surrounded by square brackets.
-So, the symbol for pi can be produced either by @code{\(*p} or
-@code{\[*p]}.
+Symbols can be inserted by using a special escape sequence. This escape
+is simply the escape character (usually a backslash) followed by an
+identifier. The symbol identifiers have to be two or more characters,
+since single characters conflict with all the other escapes. The
+identifier can be either preceded by a parenthesis if it is two
+characters long, or surrounded by square brackets. So, the symbol for
+the mathematical Greek letter `pi' can be produced either by @code{\(*p}
+or @code{\[*p]}.
@example
area = \(*p\fIr\fP\u2\d
@end example
@findex \C
-The escape @code{\C'@var{xxx}'} will typeset character named
+The escape @code{\C'@var{xxx}'} will typeset the character named
@var{xxx}. Normally it is more convenient to use @code{\[@var{xxx}]}.
But @code{\C} has the advantage that it is compatible with recent
-versions of ditroff and is available in compatibility mode.
+versions of @code{ditroff} and is available in compatibility mode.
@findex \N
-The escape @code{\N'@var{n}'} will typeset the character with code
-@var{n} in the current font. @var{n} can be any integer. Most devices only
-have characters with codes between 0 and 255. If the current font
-does not contain a character with that code, special fonts will not be
-searched. The @code{\N} escape sequence can be conveniently used on
-conjunction with the @code{char} request:
+@findex char
+The escape @code{\N'@var{n}'} will typeset the character with code@w{
+}@var{n} in the current font. @var{n} can be any integer. Most devices
+only have characters with codes between 0 and@w{ }255. If the current
+font does not contain a character with that code, special fonts will
+@emph{not} be searched. The @code{\N} escape sequence can be
+conveniently used on conjunction with the @code{char} request:
@example
.char \[phone] \f(ZD\N'37'
@end example
+@noindent
+@pindex DESC
+@cindex unnamed characters
+@cindex characters, unnamed
The code of each character is given in the fourth column in the font
description file after the charset command. It is possible to include
unnamed characters in the font description file by using a name of
@samp{---}; the @code{\N} escape sequence is the only way to use these.
+@c XXX should be `glyph', not `character'
+
@findex cflags
-Each character has certain properties associated with it.
-These properties can be modified with the @code{cflags} request.
-The first argument is the the sum of the desired flags and the
-remaining arguments are the characters to have those properties.
+@cindex character properties
+@cindex properties of characters
+Each character has certain properties associated with it. These
+properties can be modified with the @code{cflags} request. The first
+argument is the the sum of the desired flags and the remaining arguments
+are the characters to have those properties.
+
@table @code
@item 1
+@cindex end of sentence characters
+@cindex characters, end of sentence
the character ends sentences (initially characters @samp{.?!} have this
-property);
+property)
+
@item 2
+@cindex hyphenating characters
+@cindex characters, hyphenation
lines can be broken before the character (initially no characters have
-this property);
+this property)
+
@item 4
-lines can be broken after the character (initially characters
-@samp{-\(hy\(em} have this property);
+@glindex hy
+@glindex em
+lines can be broken after the character (initially the characters
+@samp{-\(hy\(em} have this property)
+
@item 8
-the character overlaps horizontally (initially characters
-@samp{\(ul\(rn\(ru} have this property);
+@cindex overlapping characters
+@cindex characters, overlapping
+@glindex ul
+@glindex rn
+@glindex ru
+the character overlaps horizontally (initially the characters
+@samp{\(ul\(rn\(ru} have this property)
+
@item 16
+@glindex br
the character overlaps vertically (initially character @samp{\(br} has
-this property);
+this property)
+
@item 32
+@cindex transparent characters
+@cindex character, transparent
+@cindex '
+@cindex "
+@cindex ]
+@cindex )
+@cindex *
+@glindex dg
+@glindex rq
an end of sentence character followed by any number of characters with
this property will be treated as the end of a sentence if followed by a
-newline or two spaces; in other words the character is transparent for
-the purposes of end of sentence recognition; this is the same as having
-a zero space factor in @TeX{} (initially characters
+newline or two spaces; in other words the character is @dfn{transparent}
+for the purposes of end of sentence recognition -- this is the same as
+having a zero space factor in @TeX{} (initially characters
@samp{"')]*\(dg\(rq} have this property).
@end table
@findex char
-You can create new characters with the @code{char} request. It is
-called as @samp{.char @var{c} @var{string}} Define character @var{c}
-to be @var{string}. Every time character @var{c} needs to be printed,
-@var{string} will be processed in a temporary environment and the
-result will be wrapped up into a single object. Compatibility mode
-will be turned off and the escape character will be set to \ while
-@var{string} is being processed. Any emboldening, constant spacing or
-track kerning will be applied to this object rather than to individual
-characters in @var{string}. A character defined by this request can
-be used just like a normal character provided by the output device.
-In particular other characters can be translated to it with the
-@code{tr} request; it can be made the leader character by the
-@code{lc} request; repeated patterns can be drawn with the character
-using the @code{\l} and @code{\L} escape sequences; words containing
-the character can be hyphenated correctly, if the @code{hcode} request
-is used to give the character a hyphenation code. There is a special
-anti-recursion feature: use of character within the character's
-definition will be handled like normal characters not defined with
-@code{char}.
+@cindex defining characters
+@cindex characters, defining
+@cindex creating new characters
+New characters can be created with the @code{char} request. It is
+called as
+
+@example
+.char @var{c} @var{string}
+@end example
+
+@findex tr
+@findex lc
+@findex \l
+@findex \L
+@findex hcode
+@noindent
+This defines character@w{ }@var{c} to be @var{string}. Every time
+character@w{ }@var{c} needs to be printed, @var{string} will be
+processed in a temporary environment and the result will be wrapped up
+into a single object. Compatibility mode will be turned off and the
+escape character will be set to @samp{\} while @var{string} is being
+processed. Any emboldening, constant spacing or track kerning will be
+applied to this object rather than to individual characters in
+@var{string}. A character defined by this request can be used just like
+a normal character provided by the output device. In particular other
+characters can be translated to it with the @code{tr} request; it can be
+made the leader character by the @code{lc} request; repeated patterns
+can be drawn with the character using the @code{\l} and @code{\L} escape
+sequences; words containing the character can be hyphenated correctly,
+if the @code{hcode} request is used to give the character a hyphenation
+code. There is a special anti-recursion feature: use of character
+within the character's definition will be handled like normal characters
+not defined with @code{char}.
@findex rchar
-A character definition can be removed with the @code{rchar} request. Its
-arguments are the characters to be removed. This undoes the effect of
-a @code{char} request.
+@cindex removing character definition
+@cindex character, removing definition
+A character definition can be removed with the @code{rchar} request.
+Its arguments are the characters to be removed. This undoes the effect
+of a @code{char} request.
+
+@xref{Special Characters}.
-@c distribute these through the text
-@xref{Special Characters}
+@c ---------------------------------------------------------------------
@node Artificial Fonts, Ligatures and Kerning, Using Symbols, Fonts
@subsection Artificial Fonts
@cindex artificial fonts
@cindex fonts, artificial
-
-There are a number of requests for artificially creating fonts.
-These are largely vestigal remains from the days when output devices
-did not have a wide variety of fonts, and when nroff and troff were
-separate programs.
-These are no longer necessary in GNU Troff.
+There are a number of requests for artificially creating fonts. These
+are largely vestigial remains from the days when output devices did not
+have a wide variety of fonts, and when @code{nroff} and @code{troff}
+were separate programs. These are no longer necessary in GNU
+@code{troff}.
@findex ul
-The @code{ul} request will print subsequent lines in italics on a
-device capable of it, or underline the text on an ascii output device.
-The single argument is the number of lines to be ``underlined,''
-with no argument, the next line will be underlined.
+@cindex underlining
+The @code{ul} request will print subsequent lines in italics on a device
+capable of it, or underline the text on a character output device. The
+single argument is the number of lines to be ``underlined,'' with no
+argument, the next line will be underlined.
@findex cu
+@cindex continuous underlining
+@cindex underlining, continuous
The @code{cu} request is similar to @code{ul} ...
+@c XXX more info
+
@findex uf
-The @code{uf} request will set the underline font used by @code{ul}
-and @code{cu}.
+@cindex underline font
+@cindex font for underlining
+The @code{uf} request will set the underline font used by @code{ul} and
+@code{cu}.
@findex bd
-The @code{bd} request artificially creates a bold font by printing
-each character twice, slightly offset.
-The first argument specifies the font to embolden, and the second is
-the number of basic units, minus one, by which the two characters
-will be offset. If the second argument is missing, emboldening will
-be turned off.
+@cindex imitating bold face
+@cindex bold face, imitating
+The @code{bd} request artificially creates a bold font by printing each
+character twice, slightly offset. The first argument specifies the font
+to embolden, and the second is the number of basic units, minus one, by
+which the two characters will be offset. If the second argument is
+missing, emboldening will be turned off.
+@c ---------------------------------------------------------------------
@node Ligatures and Kerning, , Artificial Fonts, Fonts
@subsection Ligatures and Kerning
@cindex ligatures and kerning
@cindex kerning and ligatures
+@c XXX What are ligatures?
+
+@c XXX more info
@findex lg
@vindex .lg
-@code{lg}
-@code{.lg}
-The current ligature mode.
+@cindex ligatures enabled register
+The ligature mechanism can be switched on or off with the @code{lg}
+request; if the parameter is non-zero or missing, ligatures are enabled,
+otherwise disabled. Default is on. The current ligature mode can be
+found in the number register @code{.lg} (set to@w{ }1 if ligatures are
+enabled, 0@w{ }otherwise).
+
+@c XXX What is kerning?
-What is kerning??
+@c XXX more info
+@cindex zero width space character
+@cindex character, zero width space
+@cindex space character, zero width
If the font description file contains pairwise kerning information,
characters from that font will be kerned. Kerning between two
-characters can be inhibited by placing a @code{\&} between them.
+characters can be inhibited by placing @code{\&} between them.
@findex kern
@vindex .kern
-@code{kern}
-If n is non-zero or missing, enable pairwise kerning, otherwise disable
-it.
-@code{.kern}
-1 if pairwise kerning is enabled, 0 otherwise.
+@cindex kerning enabled register
+Kerning can be activated with the @code{kern} request. If the parameter
+is non-zero or missing, enable pairwise kerning, otherwise disable it.
+The number register @code{.kern} is set to@w{ }1 if pairwise kerning is
+enabled, 0@w{ }otherwise.
@findex tkf
-.tkf f s1 n1 s2 n2
-Enable track kerning for font f. When the current font is f the width
-of every character will be increased by an amount between n1 and n2;
-when the current point size is less than or equal to s1 the width will
-be increased by n1; when it is greater than or equal to s2 the width
-will be increased by n2; when the point size is greater than or equal to
-s1 and less than or equal to s2 the increase in width is a linear
+@cindex track kerning
+@cindex kerning, track
+
+@c XXX What is track kerning?
+
+@c XXX more info
+
+Track kerning must be used with great care since it is usually
+considered bad typography if the reader notices the effect. The syntax
+of the @code{tkf} request is like this:
+
+@example
+.tkf @var{f} @var{s1} @var{n1} @var{s2} @var{n2}
+@end example
+
+@noindent
+Enable track kerning for font@w{ }@var{f}. If the current font is@w{
+}@var{f} the width of every character will be increased by an amount
+between @var{n1} and @var{n2}; if the current point size is less than or
+equal to @var{s1} the width will be increased by @var{n1}; if it is
+greater than or equal to @var{s2} the width will be increased by
+@var{n2}; if the point size is greater than or equal to @var{s1} and
+less than or equal to @var{s2} the increase in width is a linear
function of the point size.
+@c =====================================================================
+
@node Sizes, Strings, Fonts, Programming Tutorial
@section Sizes
@cindex sizes
-
@cindex baseline
-Groff uses two dimensions with each line of text, type size and
-vertical spacing. The type size is the height from the text
-@dfn{baseline} to the top of the tallest character (decenders may drop
-below this baseline). Vertical spacing is the amount of space groff
-allows for a line of text, normally, this is about 20% larger than the
-current type size. Ratios smaller than this can result in
-hard-to-read text, larger that this, it will spread your text out more
-vertically (useful for term papers). By default, troff uses 10 point
-type on 12 point spacing.
+@cindex type size
+@cindex size of type
+@cindex vertical spacing
+@cindex spacing, vertical
+@code{gtroff} uses two dimensions with each line of text, type size and
+vertical spacing. The @dfn{type size} is the height from the text
+@dfn{baseline} to the top of the tallest character (descenders may drop
+below this baseline). @dfn{Vertical spacing} is the amount of space
+@code{gtroff} allows for a line of text; normally, this is about 20%@w{
+}larger than the current type size. Ratios smaller than this can result
+in hard-to-read text; larger that this, it will spread the text out more
+vertically (useful for term papers). By default, @code{gtroff} uses
+10@w{ }point type on 12@w{ }point spacing.
@cindex leading
The difference between type size and vertical spacing is known, by
typesetters, as @dfn{leading}.
-
@menu
* Changing Type Sizes::
* Fractional Type Sizes::
@end menu
+@c ---------------------------------------------------------------------
+
@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
@subsection Changing Type Sizes
@cindex changing type sizes
@cindex type sizes, changing
-
@findex ps
@findex vs
@findex \s
@vindex .s
@vindex .v
-Using the @code{ps} request and the @code{\s} escape you can change
-the type size. The @code{vs} request will change the vertical
-spacing. The default unit for the @code{ps} and @code{vs} requests are
-points.
-The number registers @code{.s} and @code{.v} contain the current
-type size and vertical spacing.
-
-These requests take parameters in units of points. You can specify
-sizes as an absolute size, or as a relative change from the current
-size. The size 0 means go back to the previous size. With no
-argument it will revert to the previous size.
+@cindex current type size register
+@cindex current vertical spacing register
+Using the @code{ps} request and the @code{\s} escape the type size can
+be changed. The @code{vs} request will change the vertical spacing.
+The default unit for the @code{ps} and @code{vs} requests are points.
+The number registers @code{.s} and @code{.v} contain the current type
+size and vertical spacing.
+
+These requests take parameters in units of points. It is possible to
+specify sizes as an absolute size, or as a relative change from the
+current size. The size@w{ }0 means go back to the previous size. With
+no argument it will also revert to the previous size.
@example
snap, snap,
@@ -3458,140 +5734,183 @@ wink, wink, \s+2nudge, nudge,\s+8 say no more!
.ps 10
@end example
-The @code{\s} escape may be called in a variety of ways.
-Much like other escapes there must be a way to determine where the
-argument ends and the text begins.
-Any of the following forms are valid:
-@code{\s@var{n}},
-@code{\s+@var{n}},
-@code{\s-@var{n}},
-@code{\s(@var{nn}},
-@code{\s+(@var{nn}},
-@code{\s-(@var{nn}},
-@code{\s[+@var{nnn}]},
-@code{\s[-@var{nnn}]},
-@code{\s+[@var{nnn}]},
-@code{\s-[@var{nnn}]}.
+The @code{\s} escape may be called in a variety of ways. Much like
+other escapes there must be a way to determine where the argument ends
+and the text begins. Any of the following forms are valid:
+
+@table @code
+@item \s@var{n}
+Set the point size to @var{n}@w{ }points. @var{n}@w{ }must be either 0
+or in the range 4 to@w{ }39.
+
+@item \s+@var{n}
+@itemx \s-@var{n}
+Increase resp.@: decrease the point size by @var{n}@w{ }points.
+@var{n}@w{ }must be exactly one digit.
+
+@item \s(@var{nn}
+Set the point size to @var{nn}@w{ }points. @var{nn} must be exactly two
+digits.
+
+@item \s+(@var{nn}
+@itemx \s-(@var{nn}
+@itemx \s(+@var{nn}
+@itemx \s(-@var{nn}
+Increase resp.@: decrease the point size by @var{nn}@w{ }points.
+@var{nn} must be exactly two digits.
+@end table
+
+@xref{Fractional Type Sizes}, for yet another syntactical form of using
+the @code{\s} escape.
Some devices may only have certain permissible sizes, in which case
-groff will round to the nearest permissible size.
+@code{gtroff} will round to the nearest permissible size.
+@c XXX example
+
+@ignore
@example
... .sz macro example?? ...
@end example
+@end ignore
+
+@c ---------------------------------------------------------------------
@node Fractional Type Sizes, , Changing Type Sizes, Sizes
@subsection Fractional Type Sizes
@cindex fractional type sizes
@cindex type sizes, fractional
-
+@cindex @code{s} unit
+@cindex unit, @code{s}
+@cindex @code{z} unit
+@cindex unit, @code{z}
+@findex ps
+@findex cs
+@findex tkf
+@findex \H
+@findex \s
A @dfn{scaled point} is equal to 1/@var{sizescale} points, where
-@var{sizescale} is specified in the @file{DESC} file (1 by default.)
+@var{sizescale} is specified in the @file{DESC} file (1@w{ }by default.)
There is a new scale indicator @samp{z} which has the effect of
multiplying by @var{sizescale}. Requests and escape sequences in
-troff interpret arguments that represent a pointsize as being in units
-of scaled points, but they evaluate each such argument using a default
-scale indicator of @samp{z}. Arguments treated in this way are the
-argument to the @code{ps} request, the third argument to the @code{cs}
-request, the second and fourth arguments to the @code{tkf} request,
-the argument to the @code{\H} escape sequence, and those variants of
-the @code{\s} escape sequence that take a numeric expression as their
-argument.
-
-For example, suppose @var{sizescale} is 1000; then a scaled point will be
-equivalent to a millipoint; the request @samp{.ps 10.25} is equivalent to
-@samp{.ps 10.25z} and so sets the pointsize to 10250 scaled points, which is
-equal to 10.25 points.
-
-The number register @code{\n(.s} returns the pointsize in points as
-decimal fraction. There is also a new number register @code{\n[.ps]}
-that returns the pointsize in scaled points.
-
-It would make no sense to use the @samp{z} scale indicator in a
-numeric expression whose default scale indicator was neither @samp{u}
-nor @samp{z}, and so troff disallows this. Similarily it would make
+@code{gtroff} interpret arguments that represent a point size as being
+in units of scaled points, but they evaluate each such argument using a
+default scale indicator of @samp{z}. Arguments treated in this way are
+the argument to the @code{ps} request, the third argument to the
+@code{cs} request, the second and fourth arguments to the @code{tkf}
+request, the argument to the @code{\H} escape sequence, and those
+variants of the @code{\s} escape sequence that take a numeric expression
+as their argument (see below).
+
+For example, suppose @var{sizescale} is@w{ }1000; then a scaled point
+will be equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
+equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
+10250@w{ }scaled points, which is equal to 10.25@w{ }points.
+
+It would make no sense to use the @samp{z} scale indicator in a numeric
+expression whose default scale indicator was neither @samp{u} nor
+@samp{z}, and so @code{gtroff} disallows this. Similarly it would make
no sense to use a scaling indicator other than @samp{z} or @samp{u} in a
numeric expression whose default scale indicator was @samp{z}, and so
-troff disallows this as well.
+@code{gtroff} disallows this as well.
There is also new scale indicator @samp{s} which multiplies by the
-number of units in a scaled point. So, for example, @samp{\n[.ps]s}
-is equal to 1m. Be sure not to confuse the @samp{s} and @samp{z}
+number of units in a scaled point. So, for example, @samp{\n[.ps]s} is
+equal to @samp{1m}. Be sure not to confuse the @samp{s} and @samp{z}
scale indicators.
-@code{\s'+@var{n}'}
-@code{\s'-@var{n}'}
-@code{\s+'@var{n}'}
-@code{\s-'@var{n}'}
-Set the point size to @var{n} scaled points; @var{n} is a numeric
-expression with a default scale indicator of @samp{z}.
+@vindex .s
+@vindex .ps
+The number register @code{.s} returns the point size in points as decimal
+fraction. There is also a new number register @code{.ps} that returns
+the point size in scaled points.
+
+@vindex .psr
+@vindex .sr
+@cindex last-requested point size register
+The last-requested point size in scaled points is contained in the
+@code{.psr} number register. The last requested point size in points as
+a decimal fraction can be found in @code{.sr}. This is a string-valued
+register.
-@code{\n[.ps]}
-The current pointsize in scaled points.
+@table @code
+@item \s[@var{n}]
+@itemx \s'@var{n}'
+Set the point size to @var{n} scaled points; @var{n}@w{ }is a numeric
+expression with a default scale indicator of @samp{z}.
-@code{\n[.psr]}
-The last-requested pointsize in scaled points.
+@item \s[+@var{n}]
+@itemx \s[-@var{n}]
+@itemx \s+[@var{n}]
+@itemx \s-[@var{n}]
+@itemx \s'+@var{n}'
+@itemx \s'-@var{n}'
+@itemx \s+'@var{n}'
+@itemx \s-'@var{n}'
+Increase or resp.@: decrease the point size by @var{n} scaled points;
+@var{n} is a numeric expression with a default scale indicator of
+@samp{z}.
+@end table
-@code{\n[.sr]}
-The last requested pointsize in points as a decimal fraction. This is a
-string-valued register.
+@xref{Font Files}.
-@c distribute these through the text
-@xref{Font Files}
+@c =====================================================================
@node Strings, Conditionals and Loops, Sizes, Programming Tutorial
@section Strings
@cindex strings
-
@findex ds
-Groff has string variables, which are entirely for user convenience
-(i.e. there are no builtin strings) They are defined via the
-@code{ds} request.
+@code{gtroff} has string variables, which are entirely for user
+convenience (i.e.@: there are no built-in strings). They are defined
+via the @code{ds} request.
@example
.ds UX \s-1UNIX\s0\u\s-3tm\s0\d
@end example
@findex \*
-The are interpolated, or expanded in-place, via the @code{\*} escape:
+@cindex string interpolation
+@cindex string expansion
+@cindex interpolation of strings
+@cindex expansion of strings
+They are interpolated, or expanded in-place, via the @code{\*} escape:
@example
The \*(UX Operating System
@end example
-Will produce:
-
-@example
-The UNIXtm Operating System
-@end example
-
-If the string named by the @code{\*} does not exist, the escape will
-be replaced by nothing.
+If the string named by the @code{\*} does not exist, the escape will be
+replaced by nothing.
@cindex comments, with @code{ds}
-NOTE: Unlike other requests the third argument takes up the entire
-line including trailing spaces. This means that comments on a line
-with such a request can introduce unwanted space into a string.
+@strong{Caution:} Unlike other requests, the second argument to the
+@code{ds} request takes up the entire line including trailing spaces.
+This means that comments on a line with such a request can introduce
+unwanted space into a string.
@example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" trademark of you-know-who
+.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
@end example
-Instead you should either put the comment on another line or
-have the comment escape adjacent with the end of the string.
+@noindent
+Instead the comment should be put on another line or have the comment
+escape adjacent with the end of the string.
@example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" trademark of you-know-who
+.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
@end example
-If you need leading space you can start the string with a double
-quote. No trailing quote is needed, in fact any trailing quote is
-included in your string.
+@cindex trailing quotes
+@cindex quotes, trailing
+@cindex leading spaces with @code{ds}
+@cindex spaces with @code{ds}
+To produce leading space the string can be started with a double quote.
+No trailing quote is needed; in fact, any trailing quote is included in
+your string.
-@cindex canibalism
@example
.ds sign " Yours in a white wine sauce,
@end example
@@ -3599,18 +5918,22 @@ included in your string.
@findex as
@cindex appending to strings
@cindex strings, appending
-You can also append onto a string with the @code{as} request.
-It works the same as the @code{ds} request except that it appends the
-second argument onto the string named by the first argument.
+The @code{as} request will append a string to another string. It works
+similar to the @code{ds} request except that it appends the second
+argument onto the string named by the first argument.
@example
.as sign " with shallots, onions and garlic,
@end example
-@findex \@key{ret}
-Strings are not limited to a sigle line of text. A string can span
-several lines by escaping the newlines with a backslash. The
-resulting string will be stored @emph{without} the newlines.
+@findex \@key{RET}
+@cindex multi-line strings
+@cindex strings, multi-line
+@cindex newline character in strings, escaping
+@cindex escaping newline characters in strings
+Strings are not limited to a single line of text. A string can span
+several lines by escaping the newlines with a backslash. The resulting
+string will be stored @emph{without} the newlines.
@example
.ds foo lots and lots \
@@ -3618,94 +5941,150 @@ of text are on these \
next several lines
@end example
+@findex substring
+@cindex substrings
+Rudimentary string manipulation routines are given with the
+@code{substring} and @code{length} requests. The former has the
+following syntax:
+
+@example
+.substring @var{xx} @var{n1} [@var{n2}]
+@end example
+
+@noindent
+It replaces the string in register@w{ }@var{xx} with the substring
+defined by the indices @var{n1} and@w{ }@var{n2}. The first character
+in the string has index one. If @var{n2} is omitted, it is taken to be
+equal to the string's length. If the index value @var{n1} or @var{n2}
+is negative or zero, it will be counted from the end of the string,
+going backwards: The last character has index@w{ }0, the character
+before the last character has index@w{ }-1, etc.
+
+@findex length
+@cindex length of a string
+@cindex string, length of
+Here the syntax of the @code{length} request:
+
+@example
+.length @var{xx} @var{string}
+@end example
+
+@noindent
+It computes the length of @var{string} and returns it in the number
+register@w{ }@var{xx} (which is not necessarily defined before).
+
+@ignore
@findex rn
@code{rn}
+@c XXX
+
@findex rm
@code{rm}
+@c XXX
+
@findex als
@code{als}
+@c XXX
+
@findex chop
@code{chop}
-@c distribute these through the text
-@xref{Identifiers}
-@c distribute these through the text
-@xref{Comments}
+@c XXX
+@end ignore
+
+
+@xref{Identifiers}, and @ref{Comments}.
+
+
+@c =====================================================================
@node Conditionals and Loops, Writing Macros, Strings, Programming Tutorial
@section Conditionals and Loops
@cindex conditionals and loops
@cindex loops and conditionals
-
-@findex if
-@findex while
+@findex if@r{, operators to use with it}
+@findex while@r{, operators to use with it}
In @code{if} and @code{while} requests, there are several more operators
available:
@table @code
@item e
@itemx o
-True if the current page is even or odd numbered (respectively)
+True if the current page is even or odd numbered (respectively).
+
@item n
-@itemx t
-True if the document is being processed by
-nroff (or an ascii device) or troff.
+@findex nroff
+True if the document is being processed in nroff mode.
+
+@item t
+@findex troff
+True if the document is being processed in troff mode.
+
@item '@var{xxx}'@var{yyy}'
-True if the string @var{xxx} is equal to the string @var{yyy}.
-Other characters can be used in place of the single quotes.
-(Which?)
-The strings are `formatted' before being compared. (?)
+True if the string @var{xxx} is equal to the string @var{yyy}. Other
+characters can be used in place of the single quotes.
+@c XXX (Which?)
+The strings are ``formatted'' before being compared.
+@c XXX (?)
+
@item r@var{xxx}
True if there is a number register named @var{xxx}.
+
@item d@var{xxx}
True if there is a string, macro, diversion, or request named @var{xxx}.
+
@item c@var{ch}
-True if there is a character @var{ch} available; @var{ch} is
-either an ASCII character or a special character @code{\(@var{ch}} or
-@code{\[@var{ch}]}; the condition will also be true if @var{ch} has been
-defined by the @code{char} request.
+@findex char
+True if there is a character @var{ch} available; @var{ch} is either an
+@acronym{ASCII} character or a special character (@code{\(@var{ch}} or
+@code{\[@var{ch}]}); the condition will also be true if @var{ch} has
+been defined by the @code{char} request.
@end table
-
@menu
* if-else::
* while::
@end menu
+@c ---------------------------------------------------------------------
+
@node if-else, while, Conditionals and Loops, Conditionals and Loops
@subsection if-else
@cindex if-else
-
-Troff has if-then-else constructs like other languages, although
+@code{gtroff} has if-then-else constructs like other languages, although
the formatting can be painful.
@findex if
-The @code{if} request is troff's if statement, it is called as
-@samp{.if @var{expr} @var{anything}}, where @var{expr} is the
-expression to be evaluated,
-and @var{anything} (the remainder of the line)
-which will be executed if
-the @var{expr} evaluates to non-zero (true).
-@var{anything} will be interpreted as though it was on a line by
-itself.
-@xref{Expressions}, for more info.
+The @code{if} request has the following syntax:
+
+@example
+.if @var{expr} @var{anything}
+@end example
+
+@noindent
+where @var{expr} is the expression to be evaluated; @var{anything} (the
+remainder of the line) will be executed if @var{expr} evaluates to
+non-zero (true). @var{anything} will be interpreted as though it was on
+a line by itself. @xref{Expressions}, for more info.
Here are some examples:
@example
.if t .ls 2 \" double spacing in troff
-.if 0 .ab how'd this happen??
+.if 0 .ab how'd this happen?
@end example
@findex ie
@findex el
-An if-then-else is written using two requests @code{ie} and @code{el}
-the first request is the if part and the latter is the else part.
+An if-then-else is written using two requests @code{ie} and @code{el}.
+The first request is the `if' part and the latter is the `else' part.
+
+@c XXX example
@example
.ie
@@ -3714,10 +6093,10 @@ the first request is the if part and the latter is the else part.
@findex \@{
@findex \@}
-In many cases you will want more than one request to be executed as a
-result of any of these requests, this can be done using the \@{ and
-\@} escapes.
-The following example shows the possible ways to use these escapes.
+In many cases more than one request is to be executed as a result of any
+of these requests. This can be done using the @code{\@{} and @code{\@}}
+escapes. The following example shows the possible ways to use these
+escapes (note the position of the opening and closing braces).
@example
.ie t \@{\
@@ -3731,21 +6110,20 @@ The following example shows the possible ways to use these escapes.
.ds qq "
@end example
+@xref{Expressions}.
-@c distribute these through the text
-@xref{Expressions}
+@c ---------------------------------------------------------------------
@node while, , if-else, Conditionals and Loops
@subsection while
@cindex while
-
@findex while
-Groff provides a looping construct using the @code{while} request,
-which is used much like the @code{if} (and related) requests.
-The first argument is an expression which will be evaluated.
-The @code{while} request will interpret the remainder of the line
-until the expression evaluates to 0 or false.
+@code{gtroff} provides a looping construct using the @code{while}
+request, which is used much like the @code{if} (and related) requests.
+The first argument is an expression which will be evaluated. The
+@code{while} request will interpret the remainder of the line until the
+expression evaluates to 0 or false.
@example
.nr a 0 1
@@ -3753,41 +6131,49 @@ until the expression evaluates to 0 or false.
\&\n+a
@end example
+@noindent
The preceding example produces:
@example
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
@end example
-@findex break
-@findex continue
-The @code{break} request will
-@dfn{break} out of a while loop.
-Be sure not to confuse this with the @code{.br} request.
-The @code{continue} request will
-finish the current iteration of a while loop.
+@cindex zero width space character
+@cindex character, zero width space
+@cindex space character, zero width
+@findex \&
+@noindent
+Note the usage of the @code{\&} escape to avoid a control character at
+the beginning of a line.
-@c distribute these through the text
-@xref{Expressions}
+@findex break@r{, in a @code{while} loop}
+@findex continue@r{, in a @code{while} loop}
+The @code{break} request will @dfn{break} out of a while loop. Be sure
+not to confuse this with the @code{br} request (causing a line break).
+The @code{continue} request will finish the current iteration of a while
+loop, immediately restarting the next iteration.
+
+@xref{Expressions}.
+
+
+@c =====================================================================
@node Writing Macros, Page Motions, Conditionals and Loops, Programming Tutorial
@section Writing Macros
@cindex writing macros
@cindex macros, writing
-
@findex de
-A macro is a collection of text and embedded commands which can be
+A @dfn{macro} is a collection of text and embedded commands which can be
invoked multiple times. Macros are used for defining common operations.
-Macros are defined using the @code{de} request. This request takes
-a name for the macro as the first argument. Subsequent lines are
-copied into an internal buffer until the line @code{..} is
-encountered. The optional second argument to @code{de} can change
-this ending token.
+Macros are defined using the @code{de} request. This request takes a
+name for the macro as the first argument. Subsequent lines are copied
+into an internal buffer until the line @code{..} is encountered. The
+optional second argument to @code{de} can change this ending token.
-For example, suppose at the beginning of each paragraph, you want
-cause a break, move down a partial line and indent the first line.
-Such a macro could be defined as follows:
+Here a small example macro called @samp{P} which will cause a break and
+the insertion of some vertical space. It could be used to separate
+paragraphs.
@example
.de P
@@ -3797,10 +6183,12 @@ Such a macro could be defined as follows:
@end example
@findex am
-The @code{am} request works similarily to @code{de} except it appends
-onto the macro named by the first argument. So, if we decide we want
-our previously @code{P} macro to actually do indented instead of
-block paragraphs we can add the necessary code to our existing macro.
+@cindex appending, to a macro
+The @code{am} request works similarly to @code{de} except it appends
+onto the macro named by the first argument. So, to make the previously
+defined @samp{P} macro actually do indented instead of block paragraphs,
+is is possible to add the necessary code to the existing macro like
+this:
@example
.am P
@@ -3813,45 +6201,40 @@ block paragraphs we can add the necessary code to our existing macro.
@cindex macro aliases
Macros can be aliased with the @code{als} request.
-@findex rn
-@code{rn}
-
-@findex rm
-@code{rm}
-
-@findex chop
-@code{chop}
-
+@c XXX example
@menu
* Copy-in Mode::
* Parameters::
@end menu
+@c ---------------------------------------------------------------------
+
@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
@subsection Copy-in Mode
@cindex copy-in mode
@cindex mode, copy-in
-
-@findex \n
-@findex \$
-@findex \*
-@findex \\
-@findex \@key{RET}
-When troff reads in the test for a macro or diversion it copies the
-text (including request lines) into an internal buffer, except for
-escapes. Escapes will be converted into an internal form, except for
-@code{\n}, @code{\$}, @code{\*}, @code{\\} and @code{\@key{RET}} which
-are evaluated and inserted into the text where the escape was located.
-This is known as @dfn{copy-in} mode.
+@findex \n@r{, when reading test for a macro}
+@findex \$@r{, when reading test for a macro}
+@findex \*@r{, when reading test for a macro}
+@findex \\@r{, when reading test for a macro}
+@findex \@key{RET}@r{, when reading test for a macro}
+When @code{gtroff} reads in the text for a macro or diversion it copies
+the text (including request lines, but excluding escapes) into an
+internal buffer. Escapes will be converted into an internal form,
+except for @code{\n}, @code{\$}, @code{\*}, @code{\\} and
+@code{\@key{RET}} which are evaluated and inserted into the text where
+the escape was located. This is known as @dfn{copy-in} mode or
+@dfn{copy} mode.
What this means is that you can specify when these escapes are to be
-evaluated (copy-in time or time of use) by insulating the escapes
-with an extra backslash.
+evaluated (either at copy-in time or at the time of use) by insulating
+the escapes with an extra backslash. Compare this to the @code{\def}
+and @code{\edef} commands in @TeX{}.
-For example, the following will result in the numbers 20 and 10 being
-printed.
+For example, the following will result in the numbers 20 and@c{ }10
+being printed:
@example
.nr x 20
@@ -3863,13 +6246,12 @@ printed.
.y
@end example
-
+@c ---------------------------------------------------------------------
@node Parameters, , Copy-in Mode, Writing Macros
@subsection Parameters
@cindex parameters
-
@findex \$
@vindex .$
The arguments to a macro can be examined using a variety of escapes.
@@ -3877,38 +6259,37 @@ The number of arguments is available in the @code{.$} number register.
Any individual argument can be retrieved with one of the following
escapes:
-The escapes @code{\$@var{n}}, @code{\$(@var{nn}}
-and @code{\$[@var{nnn}]}
-will result in the @var{n}th, @var{nn}th or @var{nnn}th
-argument. Macros can have a unlimited number of arguments.
-Note that due to copy-in mode, you will want to have two backslashes
-on these in actual use, since you do not want them interpolated until
-the macro is actually invoked.
+@cindex copy-in mode, and macro arguments
+The escapes @code{\$@var{n}}, @code{\$(@var{nn}} and
+@code{\$[@var{nnn}]} will result in the @var{n}th, @var{nn}th or
+@var{nnn}th argument. As usual, the first form only accepts a single
+number (larger than zero), the second only a two-digit number (larger or
+equal to@w{ }10), and the third any positive integer value (larger than
+zero). Macros can have an unlimited number of arguments. Note that due
+to copy-in mode, two backslashes should be used on these in actual use
+to prevent interpolation until the macro is actually invoked.
@findex shift
-The request @code{shift} will shift the arguments 1 position, or as
-many positions as specified by the first argument.
-After executing this request, argument
-@var{i} will become argument @var{i}-@var{n}; arguments 1 to @var{n}
-will no longer be available.
-Shifting by negative amounts is currently undefined.
+The request @code{shift} will shift the arguments 1@w{ }position, or as
+many positions as specified by its argument. After executing this
+request, argument@w{ }@var{i} will become argument @var{i}-@var{n};
+arguments 1 to@w{ }@var{n} will no longer be available. Shifting by
+negative amounts is currently undefined.
@findex \$*
@findex \$@@
-In some cases you will want to just use all of the arguments at once.
-For example if you pass the arguments along to another macro.
-The @code{\$*} escape is
-the concatenation of all the arguments separated by spaces.
-A similar escape is @code{\$@@},
-which is
-the concatenation of all the arguments with each surrounded
-by double quotes, and separated by spaces.
+In some cases it is convenient to use all of the arguments at once (for
+example, to pass the arguments along to another macro). The @code{\$*}
+escape is the concatenation of all the arguments separated by spaces. A
+similar escape is @code{\$@@}, which is the concatenation of all the
+arguments with each surrounded by double quotes, and separated by
+spaces.
@findex \$0
-@findex als
-The @code{\$0} escape is
-the name by which the current macro was invoked. The @code{als}
-request can make a macro have more than one name.
+@findex als@r{, use with @code{\$0}}
+The @code{\$0} escape is the name by which the current macro was
+invoked. The @code{als} request can make a macro have more than one
+name.
@example
.de vl
@@ -3920,185 +6301,241 @@ request can make a macro have more than one name.
This would be called as
@example
-.vl $Id: groff.texinfo,v 1.5 1999/12/09 09:42:29 wlemb Exp $
+.vl $Id: groff.texinfo,v 1.40 2000/06/18 10:13:51 wlemb Exp $
@end example
+@xref{Request Arguments}.
+
-@c distribute these through the text
-@xref{Request Arguments}
+@c =====================================================================
-@node Page Motions, Drawing Functions, Writing Macros, Programming Tutorial
+@node Page Motions, Drawing Requests, Writing Macros, Programming Tutorial
@section Page Motions
@cindex page motions
@cindex motions, page
-
-@findex sp
+@findex sp@r{, as vertical page motion}
Motions up and down the page can be done with the @code{sp} request.
-However, this causes a break so that the actual effect is to move to
-the left margin and then to the specified location.
+However, this causes a break so that the actual effect is to move to the
+left margin and then to the specified location.
@findex mk
@findex rt
The request @code{mk} can be used to mark a location on a page, for
-movement to later. This request takes a register name as an
-argument in which to store the current page location, with no
-argument it will store the location in an internal register.
-The results of this can be used later by the @code{rt} or the
-@code{sp} request. The @code{rt} request will return
-@strong{upwards} to the location given in the register name given as
-an argument, with no argument it will return to the location marked
-with the @code{mk} request
-
+movement to later. This request takes a register name as an argument in
+which to store the current page location. With no argument it will
+store the location in an internal register. The results of this can be
+used later by the @code{rt} or the @code{sp} request. The @code{rt}
+request will return @emph{upwards} to the location given in the register
+name given as an argument, with no argument it will return to the
+location marked with the @code{mk} request
+
+@c XXX example
+@ignore
@example
... dual column example ...
@end example
+@end ignore
-There are escapes which will give you much finer control of movements
-about the page.
+The following escapes give fine control of movements about the page.
@findex \v
-The @code{\v'@var{e}'} will let you do arbitrary vertical motion from
-the current location on the page. The argument @var{e} specifies the
-distance to move, positive is downwards and negative upwards. The
+@cindex vertical motion
+@cindex motion, vertical
+The @code{\v'@var{e}'} enables arbitrary vertical motion from the
+current location on the page. The argument@w{ }@var{e} specifies the
+distance to move; positive is downwards and negative upwards. The
default unit for this escape is vertical spaces, @code{v}'s. Beware,
-however, that troff will leave text processing to continue wherever
-the motion ends, so if you don't want to interfere with text
-processing, make sure your motions are balanced.
+however, that @code{gtroff} will leave text processing to continue
+wherever the motion ends, so to avoid interference with text processing,
+motions should be balanced.
There are some special case escapes for vertical motion.
@ftable @code
@item \r
-move upwards 1v.
+move upwards@w{ }1@dmn{v}.
+
@item \u
-move upwards .5v.
+move upwards@w{ }.5@dmn{v}.
+
@item \d
-move down .5v.
+move down@w{ }.5@dmn{v}.
@end ftable
@findex \h
-Horizontal motions can be done via the @code{\h'@var{e}'} escape.
-The expression @var{e} indicates how far to move: positive is
-rightwards and negative leftwards.
+@cindex inserting horizontal space
+@cindex horizontal space
+@cindex space, horizontal
+Horizontal motions can be done via the @code{\h'@var{e}'} escape. The
+expression@w{ }@var{e} indicates how far to move: positive is rightwards
+and negative leftwards.
There are a number of special case escapes for horizontal motion:
@ftable @code
@item \@key{SP}
-An unbreakable and unpadable (i.e. not expanded during filling) space.
-(Note: it is a backslash followed by a space.)
+an unbreakable and unpaddable (i.e.@: not expanded during filling)
+space. (Note: This is a backslash followed by a space.)
+
@item \~
-This produces an unbreakable space that stretches like a normal
-interword space when a line is adjusted.
+an unbreakable space that stretches like a normal inter-word space when
+a line is adjusted.
+
@item \|
a 1/6th em space.
+
@item \^
a 1/12th em space.
+
@item \0
a space the size of a digit.
+
@item \&
+@cindex zero width space character
+@cindex character, zero width space
+@cindex space character, zero width
A zero width space.
+
@item \)
-Like @code{\&} except that it behaves like a character declared with
-the @code{cflags} request to be transparent for the purposes of end
-of sentence recognition.
+Like @code{\&} except that it behaves like a character declared with the
+@code{cflags} request to be transparent for the purposes of end of
+sentence recognition.
@end ftable
+@c XXX example
+
+@ignore
@example
... tex logo example ...
@end example
+@end ignore
@findex \w
@cindex width escape
@cindex escape, width
-Often you will want to do horizontal movement based on the width of
-some arbitrary text (e.g. given as an argument to a macro).
-For that, there is the escape @code{\w'@var{text}'} which will
-interpolate to the width of the given @var{text} in basic units.
+A frequent need is to do horizontal movement based on the width of some
+arbitrary text (e.g.@: given as an argument to a macro). For that,
+there is the escape @code{\w'@var{text}'} which will interpolate to the
+width of the given @var{text} in basic units.
+@c XXX example
+
+@ignore
@example
... strlen example ...
@end example
+@end ignore
-Font changes may occur in @var{text} and not affect current settings.
+Font changes may occur in @var{text} which don't affect current
+settings.
-Also after use, @code{\w} sets several registers:
+After use, @code{\w} sets several registers:
@table @code
@item st
-@vindex st
@itemx sb
+@vindex st
@vindex sb
The highest and lowest point, respectively, in @var{text}.
+
@item rst
-@vindex rst
@itemx rsb
+@vindex rst
@vindex rsb
Like the @code{st} and @code{sb} registers, but takes account of the
heights and depths of characters.
+
@item ct
@vindex ct
-is set according to what kinds of characters occur in @var{text}.
+is set according to what kinds of characters occur in @var{text}:
+
@table @asis
@item 0
-all short characters, no decenders or tall characters.
+only short characters, no descenders or tall characters.
+
@item 1
-decender
+descender.
+
@item 2
-tall character
+tall character.
+
@item 3
-both a decender and a tall character
+both a descender and a tall character.
@end table
+
@item ssc
@vindex ssc
-The amount of horizontal space (possibly negative) that should be
-added to the last character before a subscript.
+The amount of horizontal space (possibly negative) that should be added
+to the last character before a subscript.
+
@item skw
@vindex skw
How far to right of the center of the last character in the @code{\w}
-argument, the center of an accent from a roman font should be
-placed over that character.
+argument, the center of an accent from a Roman font should be placed
+over that character.
@end table
@findex \k
@vindex .k
@code{\k}
+
@code{.k}
-@node Drawing Functions, Traps, Page Motions, Programming Tutorial
-@section Drawing Functions
-@cindex drawing functions
-@cindex functions for drawing
+@c XXX documentation
+
+@c =====================================================================
-Groff provides a number of ways to draw lines, and other figures on
-the page. Used in combination with the page motion commands
-(@pxref{Page Motions}, for more info) you can draw a wide variety of
-figures. However, for complex drawings these operations can be quite
-cumbersome, and it may be wise to use the pic preprocessor.
-@xref{gpic}, for more information.
+@node Drawing Requests, Traps, Page Motions, Programming Tutorial
+@section Drawing Requests
+@cindex drawing requests
+@cindex requests for drawing
+
+@code{gtroff} provides a number of ways to draw lines and other figures
+on the page. Used in combination with the page motion commands (see
+@ref{Page Motions}, for more info), a wide variety of figures can be
+drawn. However, for complex drawings these operations can be quite
+cumbersome, and it may be wise to use graphic preprocessors like
+@code{gpic} or @code{ggrn}. @xref{gpic}, and @ref{ggrn}, for more
+information.
All drawing is done via escapes.
@findex \l
-The @code{\l} will draw a line rightwards from the current location.
-The full syntax for this escape is @samp{\l'@var{l}@var{c}'}, where
-@var{l} is the length of the line to be drawn, starting at the
-current location, positive numbers will draw to the right, and
-negative will draw towards the left. This can also be specified
-absolutely (i.e. with a leading |) which will draw back to the
-begining of the line.
+@cindex drawing horizontal lines
+@cindex horizontal line, drawing
+@cindex line, horizontal, drawing
+The @code{\l} escape will draw a line rightwards from the current
+location. The full syntax for this escape is like this:
+
+@example
+\l'@var{l}@var{c}'
+@end example
+@noindent
+where @var{l} is the length of the line to be drawn, starting at the
+current location; positive numbers will draw to the right, and negative
+will draw towards the left. This can also be specified absolutely
+(i.e.@: with a leading @samp{|}) which will draw back to the beginning
+of the line.
+
+@cindex underscore character
+@cindex character, underscore
+@cindex line drawing character
+@cindex character for line drawing
The optional second parameter @var{c} is a character to draw the line
-with. If this second argument is not specified, troff will use the
-underscore character.
+with. If this second argument is not specified, @code{gtroff} will use
+the underscore character.
-If you need to separate the two arguments (to prevent troff from
-interpreting a drawing character as a scaling indicator), you can
-separate them with @code{\&}.
+@cindex zero width space character
+@cindex character, zero width space
+@cindex space character, zero width
+@findex \&
+To separate the two arguments (to prevent @code{gtroff} from
+interpreting a drawing character as a scaling indicator) use @code{\&}.
-And now, for a useful example:
+Here a small useful example:
@example
.de box
@@ -4106,114 +6543,155 @@ And now, for a useful example:
..
@end example
-Note that this works by outputing a box rule (a vertical line), then
-the text given as an argument and then another box rule.
-Then the line drawing escapes both draw from the current location to
-the beginning of the @emph{input} line.
+@noindent
+@opindex |
+Note that this works by outputting a box rule (a vertical line), then
+the text given as an argument and then another box rule. Then the line
+drawing escapes both draw from the current location to the beginning of
+the @emph{input} line.
@findex \L
-Vertical lines are drawn using the @code{\L} escape. It's parameters
-are specified the same as the @code{\l} escape. If the length is
-positive, the movement will be downwards, and upwards for negative.
-The default character is the box rule character.
-As with the vertical motion escapes, text processing will blindly
-continue where the line ends.
+@cindex drawing vertical lines
+@cindex vertical line drawing
+@cindex line, vertical, drawing
+@cindex line drawing character
+@cindex character for line drawing
+@cindex box rule character
+@cindex character, box rule
+Vertical lines are drawn using the @code{\L} escape. Its parameters are
+specified similar to the @code{\l} escape. If the length is positive,
+the movement will be downwards, and upwards for negative values. The
+default character is the box rule character. As with the vertical
+motion escapes, text processing will blindly continue where the line
+ends.
+
+@c XXX example
+@ignore
@example
...box macro...
@end example
+@end ignore
@findex \D
-More flexible drawing functions are available via the @code{\D}
-escape. While the previous escapes will work on an ascii device,
-these escapes will not.
+More flexible drawing functions are available via the @code{\D} escape.
+While the previous escapes will work on a character device, these
+escapes will not.
@table @code
-@item \D'l @var{x} @var{y}'
-Draw a line from the current location to the relative point specified
-by @var{x}, @var{y}.
+@item \D'l @var{dx} @var{dy}'
+Draw a line from the current location to the relative point specified by
+(@var{dx},@var{dy}).
+@c XXX example
+
+@ignore
@example
...revised box macro...
@end example
+@end ignore
@item \D'c @var{d}'
-Draw a circle with a diameter of @var{d} with the leftmost point at
-the current position.
+@cindex circle drawing
+@cindex drawing a circle
+Draw a circle with a diameter of @var{d} with the leftmost point at the
+current position.
+
@item \D'C @var{d}'
Draw a solid circle with the same parameters as an outlined circle.
+
@item \D'e @var{dx} @var{dy}'
+@cindex drawing an ellipse
+@cindex ellipse drawing
Draw an ellipse with a horizontal diameter of @var{dx} and a vertical
diameter of @var{dy} with the leftmost point at the current position.
+
@item \D'E @var{dx} @var{dy}'
-Draw a solid elipse with the same parameters as an outlined elipse.
+Draw a solid ellipse with the same parameters as an outlined ellipse.
+
@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
+@cindex arc drawing
+@cindex drawing an arc
Draw an arc clockwise from the current location through the two
-specified locations.
+specified locations (@var{dx1},@var{dy1}) and (@var{dx2},@var{dy2}).
+
@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
-Draw a spline from the current location to
-@var{dx1}, @var{dy1} and then to @var{dx2}, @var{dy2}, and so on.
+@cindex drawing a spline
+@cindex spline drawing
+Draw a spline from the current location to (@var{dx1},@var{dy1}) and
+then to (@var{dx2},@var{dy2}), and so on.
+
@item \D'f @var{n}'
-Set the shade of gray to be used for filling solid objects to @var{n};
-@var{n} must be an integer between 0 and 1000, where 0 corresponds
-solid white and 1000 to solid black, and values in between correspond
-to intermediate shades of gray. This applies only to solid circles,
-solid ellipses and solid polygons. By default, a level of 1000 will
-be used.
-@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
-Draw a polygon from the current location to @var{dx1}, @var{dy1}
-and then to @var{dx2}, @var{dy2} and so on. When the specified data
-points are exhausted, a line is drawn back to the starting point.
+@cindex gray shading
+@cindex shading
+@cindex shades for filling objects
+Set the shade of gray to be used for filling solid objects to@w{
+}@var{n}; @var{n}@w{ }must be an integer between 0 and@w{ }1000, where 0
+corresponds solid white and 1000 to solid black, and values in between
+correspond to intermediate shades of gray. This applies only to solid
+circles, solid ellipses and solid polygons. By default, a level of@w{
+}1000 will be used.
+
+@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
+@cindex drawing a polygon
+@cindex polygon drawing
+Draw a polygon from the current location to (@var{dx1},@var{dy1}) and
+then to (@var{dx2},@var{dy2}) and so on. When the specified data points
+are exhausted, a line is drawn back to the starting point.
+
+@c XXX example
+@ignore
@example
... box example (yes, again)...
@end example
+@end ignore
-@itemx \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
+@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
Draw a solid polygon with the same parameters as an outlined polygon.
+@c XXX example
+
+@ignore
@example
... shaded box example ...
@end example
+@end ignore
@item \D't @var{n}'
-Set the current line thickness to @var{n} machine units.
-A value of zero selects the smallest available line thickness.
-
+@cindex line thickness
+@cindex thickness of lines
+Set the current line thickness to @var{n} machine units. A value of
+zero selects the smallest available line thickness. A negative value
+makes the line thickness proportional to the current point size (this is
+the default behaviour of @code{ditroff}).
@end table
-Current position
-
@findex \b
@cindex pile, character
@cindex character pile
The @code{\b} escape will @dfn{pile} a sequence of characters
-vertically, and center it vertically on the current line.
-This can be used to build large brackets and braces.
+vertically, and center it vertically on the current line. This can be
+used to build large brackets and braces.
@example
\b'\(lt\(bv\(lk\(bv\(lb'
@end example
+@xref{Drawing Functions}.
+@c =====================================================================
-@node Traps, Diversions, Drawing Functions, Programming Tutorial
+@node Traps, Diversions, Drawing Requests, Programming Tutorial
@section Traps
@cindex traps
-
-Traps are locations, which, when reached, will call a specified macro.
-These traps can occur at a given location on the page, at a given
-location in the current diversion, after a certain number of input
+@dfn{Traps} are locations, which, when reached, will call a specified
+macro. These traps can occur at a given location on the page, at a
+given location in the current diversion, after a certain number of input
lines or at the end of input.
-@findex ch
-Any of these traps can be changed after they have been set with the
-@code{ch} request. The first arguemnt is the name of the trap or
-macro, and the second is the new value for that trap.
-
-
@menu
* Page Location Traps::
* Diversion Traps::
@@ -4221,105 +6699,124 @@ macro, and the second is the new value for that trap.
* End-of-input Traps::
@end menu
+@c ---------------------------------------------------------------------
+
@node Page Location Traps, Diversion Traps, Traps, Traps
@subsection Page Location Traps
@cindex page location traps
@cindex traps, page location
+@c XXX definition of wh request
-Page location traps are frequently used for page headers and
-footers. The following is a simple example of this.
+@cindex page headers
+@cindex page footers
+@cindex headers
+@cindex footers
+Page location traps are frequently used for page headers and footers.
+The following is a simple example of this.
@example
-.de hd \" Page header
+.de hd \" Page header
'sp .5i
.tl 'Title''date'
'sp .3i
..
-.de fo \" Page footer
+.de fo \" Page footer
'sp 1v
.tl ''%''
'bp
..
-.wh 0 hd \" top of the page
-.wh -1i fo \" one inch from bottom
+.wh 0 hd \" trap at top of the page
+.wh -1i fo \" trap one inch from bottom
@end example
@vindex .t
+@cindex distance to next trap
+@cindex trap, distance
The number register @code{.t} is the distance to the next trap.
@findex ch
+@cindex changing trap location
+@cindex trap, changing location
The location of a trap can be changed later on with the @code{ch}
-request.
-The first argument is the name of the macro to be invoked at the trap
-and the second argument is the new location for the trap.
-This is useful when you are building up footnotes in a diversion, and
-you need to allow more space at the bottom of the page for them.
+request. The first argument is the name of the macro to be invoked at
+the trap, and the second argument is the new location for the trap.
+This is useful for building up footnotes in a diversion to allow more
+space at the bottom of the page for them.
+
+@c XXX
+@ignore
@example
... (simplified) footnote example ...
@end example
+@end ignore
@findex vpt
@findex wh
-@findex dt
@vindex .vpt
-The @code{vpt} request will enable vertical position traps if the argment is
-non-zero, disable them otherwise. Vertical position traps are traps
-set by the @code{wh} or @code{dt} requests. Traps set by the
+@cindex vertical position trap enable register
+The @code{vpt} request will enable vertical position traps if the
+argument is non-zero, disable them otherwise. Vertical position traps
+are traps set by the @code{wh} or @code{dt} requests. Traps set by the
@code{it} request are not vertical position traps. The parameter that
controls whether vertical position traps are enabled is global.
Initially vertical position traps are enabled. The current setting of
this is available in the number register @code{.vpt}.
@vindex .trunc
-@findex ne
-The number register @code{.trunc} contains
-the amount of vertical space truncated by the most recently
-sprung vertical position trap, or, if the trap was sprung by a
-@code{ne} request, minus the amount of vertical motion produced by
-the @code{ne} request. In other words, at the point a trap is
-sprung, it represents the difference of what the vertical position
-would have been but for the trap, and what the vertical position
-actually is.
+@findex ne@r{, and the @code{.trunc} register}
+The number register @code{.trunc} contains the amount of vertical space
+truncated by the most recently sprung vertical position trap, or, if the
+trap was sprung by a @code{ne} request, minus the amount of vertical
+motion produced by the @code{ne} request. In other words, at the point
+a trap is sprung, it represents the difference of what the vertical
+position would have been but for the trap, and what the vertical
+position actually is.
@vindex .ne
-The number register @code{.ne} contains
-the amount of space that was needed in the last @code{ne} request that caused
-a trap to be sprung. Useful in conjunction with the @code{.trunc}
-register. @xref{Page Control}, for more information.
-
+The number register @code{.ne} contains the amount of space that was
+needed in the last @code{ne} request that caused a trap to be sprung.
+Useful in conjunction with the @code{.trunc} register. @xref{Page
+Control}, for more information.
+@c ---------------------------------------------------------------------
@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
@subsection Diversion Traps
@cindex diversion traps
@cindex traps, diversion
-
@findex dt
-@vindex .t
+@vindex .t@r{, and diversions}
Traps can also be set @emph{within} a diversion using the @code{dt}
-request. Like @code{wh} the first argument is the location of the
-trap and the second argument is the name of the macro to be invoked.
-The number register @code{.t} will still work within diversions.
+request. Like @code{wh} the first argument is the location of the trap
+and the second argument is the name of the macro to be invoked. The
+number register @code{.t} will still work within diversions.
@xref{Diversions}, for more information.
+@c ---------------------------------------------------------------------
+
@node Input Line Traps, End-of-input Traps, Diversion Traps, Traps
@subsection Input Line Traps
@cindex input line traps
@cindex traps, input line
-
@findex it
The @code{it} request will set an input line trap. The format for
-calling this is @samp{.it @var{n} @var{name}}, where @var{n} is the
-number of lines of input which may be read before @dfn{springing} the
-trap, @var{name} is the macro to be invoked. Request lines are not
-counted as input lines.
+calling this is
+
+@example
+.it @var{n} @var{name}
+@end example
+
+@noindent
+where @var{n} is the number of lines of input which may be read before
+@dfn{springing} the trap, @var{name} is the macro to be invoked.
+Request lines are not counted as input lines.
For example, one possible use is to have a macro which will print the
-next @var{n} lines in a bold font.
+next @var{n}@w{ }lines in a bold font.
@example
.de B
@@ -4331,20 +6828,21 @@ next @var{n} lines in a bold font.
..
@end example
+@c ---------------------------------------------------------------------
+
@node End-of-input Traps, , Input Line Traps, Traps
@subsection End-of-input Traps
@cindex end-of-input traps
@cindex traps, end-of-input
-
@findex em
-The @code{em} request will set a trap at the end of input.
-The macro specified as an arguement will be executed after the last
-line of the input file has been processed.
+The @code{em} request will set a trap at the end of input. The macro
+specified as an argument will be executed after the last line of the
+input file has been processed.
-For example, if your document had to have a section at the bottom of
-the last page for someone to approve you document, you could set it
-up with @code{em}.
+For example, if the document had to have a section at the bottom of the
+last page for someone to approve it, the @code{em} request could be
+used.
@example
.de approval
@@ -4361,41 +6859,52 @@ Date:\t\t\a
@end example
+@c =====================================================================
+
@node Diversions, Environments, Traps, Programming Tutorial
@section Diversions
@cindex diversions
-
-In Troff you can divert text into a named storage area, due to the
-similarity to defining macros it is sometimes said to be stored in a
-macro. This is used for saving text for output at a later time,
-which is useful for keeping blocks of text on the same page,
-footnotes, tables of contents and indexes.
+In @code{gtroff} it is possible to @dfn{divert} text into a named
+storage area. Due to the similarity to defining macros it is sometimes
+said to be stored in a macro. This is used for saving text for output
+at a later time, which is useful for keeping blocks of text on the same
+page, footnotes, tables of contents and indices.
@findex di
@findex da
-Diversion is initiated by the @code{di} request, like the @code{de}
-request it takes an argument of a macro name to divert subsequent
-text to into. The @code{da} macro will append to an existing diversion.
+A diversion is initiated by the @code{di} request. Like the @code{de}
+request, it takes an argument of a macro name to divert subsequent text
+into. The @code{da} macro will append to an existing diversion.
+
+@code{di} (resp.@: @code{da}) without an argument ends the diversion.
+
+@c XXX example
+@ignore
@example
... end-note example ...
@end example
+@end ignore
@vindex .z
@vindex .d
@vindex nl
@vindex .h
-Diversions may be nested.
-The number register @code{.z} contains the name of the current diversion.
-The number register @code{.d} contains the current vertical place in
-the diversion. If not in a diversion it is the same as the register
-@code{nl}.
+@cindex nested diversions
+@cindex diversion, nested
+Diversions may be nested. The number register @code{.z} contains the
+name of the current diversion. The number register @code{.d} contains
+the current vertical place in the diversion. If not in a diversion it
+is the same as the register @code{nl}.
+
+@c XXX more info
+
@code{.h}
@vindex dn
@vindex dl
-After compleating a diversion, the builtin number registers @code{dn}
+After completing a diversion, the built-in number registers @code{dn}
and @code{dl} contain the vertical and horizontal size of the diversion.
@example
@@ -4423,25 +6932,31 @@ and @code{dl} contain the vertical and horizontal size of the diversion.
@end example
@findex \!
-Requests, macros and escapes are interpreted when read into a
-diversion.
-There are two ways to prevent this, either way will take the given
-text and @dfn{transparently} embed it into the diversion.
-The first method is to prefix the line with @code{\!}. This will
-cause the entire line to be transparently inserted into the diversion.
-This is useful for macros you do not want invoked until the diverted
-text is actually output.
+@cindex transparent output
+@cindex output, transparent
+Requests, macros and escapes are interpreted when read into a diversion.
+There are two ways to prevent this; either way will take the given text
+and @dfn{transparently} embed it into the diversion. The first method
+is to prefix the line with @code{\!}. This will cause the entire line
+to be transparently inserted into the diversion. This is useful for
+macros which shouldn't be invoked until the diverted text is actually
+output.
-@c anything is read in copy mode. (what about \! ??)
+@c XXX anything is read in copy mode. (what about \! ??)
@findex \?
The other way is to surround the text by the @code{\?} escape, i.e.
-@samp{\?@var{anything}\?}.
-@var{anything} may not contain
-newlines; use @code{\!} if you want to embed newlines in a diversion. The
-escape sequence @code{\?} is also recognised in copy mode and turned into a
-single internal code; it is this code that terminates anything. Thus
-the followin example will print 4.
+
+@example
+\?@var{anything}\?
+@end example
+
+@noindent
+@var{anything} may not contain newlines; use @code{\!} to embed
+newlines in a diversion. The escape sequence @code{\?} is also
+recognized in copy mode and turned into a single internal code; it is
+this code that terminates anything. Thus the following example will
+print@w{ }4.
@example
.nr x 1
@@ -4461,89 +6976,97 @@ the followin example will print 4.
.f
@end example
-@findex rn
-@code{rn}
-
-@findex rm
-@code{rm}
-
-@findex als
-@code{als}
-
-@findex chop
-@code{chop}
-
@findex asciify
-@code{asciify}
-This request only exists in order to make it possible to make certain
-gross hacks work with GNU troff. It @dfn{unformats} the diversion
-specified as an argument in
-such a way that ASCII characters that were formatted and diverted
-will be treated like ordinary input characters when the diversion is
-reread. For example, the following will set register @code{n} to 1.
-
-@example
-.tr @@.
-.di x
-@@nr\ n\ 1
+@cindex unformatting diversions
+@cindex diversion, unformatting
+The @code{asciify} request only exists in order to make certain gross
+hacks work with GNU @code{troff}. It @dfn{unformats} the diversion
+specified as an argument in such a way that @acronym{ASCII} characters
+that were formatted and diverted will be treated like ordinary input
+characters when the diversion is reread. For example, the following
+will set register @code{n} to@w{ }1.
+
+@example
+.tr @@.
+.di x
+@@nr\ n\ 1
.br
.di
-.tr @@@@
-.asciify x
+.tr @@@@
+.asciify x
.x
@end example
+@xref{Copy-in Mode}.
-@c distribute these through the text
-@xref{Copy-in Mode}
+
+@c =====================================================================
@node Environments, I/O, Diversions, Programming Tutorial
@section Environments
@cindex environments
+It happens frequently that some text should be printed in a certain
+format regardless of what may be in effect at the time, for example, in
+a trap invoked macro to print headers and footers. To solve this
+@code{gtroff} has @dfn{environments} in which text is processed. An
+environment contains most of the parameters that control text
+processing. It is possible to switch amongst these environments; by
+default @code{gtroff} processes text in environment@w{ }0. The
+following is the information kept in an environment.
-Often you will need to print some text in a certain format regardless
-of what may be in effect at the time, for example, in a trap invoked
-macro to print headers and footers.
-To solve this groff has @dfn{environments} in which text is processed.
-An environment contains most of the parameters that control
-text processing. You can switch amongst these environments, by
-default groff processes text in environment 0.
-The following is the information kept in an environment.
-
-@itemize @bullet{}
-@item
-Type size
+@itemize @bullet
@item
-Font (family and style)
+font parameters (size, family, style, character height and slant, space
+and sentence space size)
+
@item
-Page parameters
+page parameters (line length, title length, vertical spacing,
+line spacing, indentation, line numbering, hyphenation data)
+
@item
-Fill/adjust mode
+fill and adjust mode
+
@item
-Tab stops
+tab stops, tab and leader characters, escape character, no-break and
+hyphen indicators, margin character data
+
@item
-Partially collected lines
+partially collected lines
@end itemize
-These environments may be given arbitrary names
-(@pxref{Identifiers}, for more info.)
-Old versions of troff only had environments named 0, 1 and 2.
+These environments may be given arbitrary names (see @ref{Identifiers},
+for more info). Old versions of @code{troff} only had environments
+named @samp{0}, @samp{1} and@w{ }@samp{2}.
@findex ev
@vindex .ev
-The @code{ev} request will switch among these environments.
-The single argument is the name of the environment to switch to, with
-no argument groff will switch back to the previous enviroment.
-There is no limit on the number of named environments;
-they will be created the first time that they are referenced.
-The @code{.ev} number register contains
+@cindex switch environments
+@cindex current environment number/name register
+The @code{ev} request will switch to another environment. The single
+argument is the name of the environment to switch to. With no argument
+@code{gtroff} will switch back to the previous environment. There is no
+limit on the number of named environments; they will be created the
+first time that they are referenced. The @code{.ev} register contains
the name or number of the current environment. This is a string-valued
register.
+Note that a call to @code{ev} (with argument) will push the previously
+active environment onto a stack. If, say, environments @samp{foo},
+@samp{bar}, and @samp{zap} are called (in that order), the first
+@code{ev} request without parameter will switch back to environment
+@samp{bar} (which will be popped off the stack), and a second call will
+switch back to environment @samp{foo}.
+
+@c XXX example
+
+@ignore
@example
... page break macro, revised ...
@end example
+@end ignore
+
+Here is another example:
@example
.ev footnote-env
@@ -4558,35 +7081,44 @@ register.
.ev
@end example
+@findex evc
+@cindex copy environment
+To copy an environment into the current one, use the @code{evc} request,
+which takes the name of the environment to copy from as an argument.
+@c =====================================================================
@node I/O, Postprocessor Access, Environments, Programming Tutorial
@section I/O
@cindex i/o
-
+@cindex input and output requests
+@cindex requests for input and output
+@cindex output and input requests
@findex so
+@cindex including a file
+@cindex file inclusion
The @code{so} request will read in the file given as an argument and
-include it in place of the @code{so} request. This is quite useful
-for large documents, i.e. keeping each chapter in a separate file.
+include it in place of the @code{so} request. This is quite useful for
+large documents, i.e.@: keeping each chapter in a separate file.
@xref{gsoelim}, for more information.
@findex mso
-The @code{mso} request is
-the same as the @code{so} request except that file is searched for in
-the same way that @file{tmac.@var{name}} is searched for when the
-@samp{-m@var{name}} option is specified.
+The @code{mso} request is the same as the @code{so} request except that
+the file is searched for in the same directories as
+@file{tmac.@var{name}} is searched for when the @option{-m@var{name}}
+option is specified.
@findex cf
-@findex trf
-The @code{cf} and @code{trf} requests are to include a file.
-It will transparently output the contents of file filename. Each
-line is output
-as it would be were it preceded by @code{\!}; however, the lines are not
-subject to copy-mode interpretation. If the file does not end with a
-newline, then a newline will be added. For example, you can define a
-macro @code{x} containing the contents of file @file{f}, using
+@cindex transparent output
+@cindex output, transparent
+The @code{cf} and @code{trf} requests are to include a file. It will
+transparently output the contents of file filename. Each line is output
+as it were preceded by @code{\!}; however, the lines are not subject to
+copy mode interpretation. If the file does not end with a newline, then
+a newline will be added. For example, to define a macro@w{ }@code{x}
+containing the contents of file@w{ }@file{f}, use
@example
.di x
@@ -4594,31 +7126,32 @@ macro @code{x} containing the contents of file @file{f}, using
.di
@end example
-.cf filename
-When used in a diversion, this will embed in the diversion an object
-which, when reread, will cause the contents of filename to be
-transparently copied through to the output. In @sc{Unix} troff, the contents
-of filename is immediately copied through to the output regardless of
-whether there is a current diversion; this behaviour is so anomalous
-that it must be considered a bug.
-
+The request @w{@code{.cf @var{filename}}}, when used in a diversion,
+will embed in the diversion an object which, when reread, will cause the
+contents of @var{filename} to be transparently copied through to the
+output. In @acronym{UNIX} @code{troff}, the contents of @var{filename}
+is immediately copied through to the output regardless of whether there
+is a current diversion; this behaviour is so anomalous that it must be
+considered a bug. This request causes a line break.
+@findex trf
With @code{trf}, unlike @code{cf}, the file cannot contain characters
-such as NUL that are not legal troff input characters.
+such as NUL that are not valid @code{gtroff} input characters
+(@pxref{Identifiers}). This request causes a line break.
@findex nx
-The @code{nx} request will force groff to continue processing of the
-file specified as an argument.
+The @code{nx} request will force @code{gtroff} to continue processing of
+the file specified as an argument.
@findex rd
-The @code{rd} request will read from standard input, and include what
-is read as though it were part of the input file. Text is read until
-a blank line is encountered.
+The @code{rd} request will read from standard input, and include what is
+read as though it were part of the input file. Text is read until a
+blank line is encountered.
@cindex form letters
@cindex letters, form
-Using these two requests you can set up form letters.
-The form letter template is constructed like this:
+Using these two requests it is easy to set up form letters. The form
+letter template is constructed like this:
@example
.ce
@@ -4635,13 +7168,13 @@ Body of letter.
@end example
@findex ex
-When this is run, the following file should be redirected in.
-Note that requests included in this file are executed as though they
-were part of the form letter. The last block of input is the
-@code{ex} requests which tells groff to stop processing. If this was
-not there, groff would not know when to stop.
+@noindent
+When this is run, the following file should be redirected in. Note that
+requests included in this file are executed as though they were part of
+the form letter. The last block of input is the @code{ex} requests
+which tells groff to stop processing. If this was not there, groff
+would not know when to stop.
-@cindex Beagle Brothers
@example
Trent A. Fisher
708 NW 19th Av., #202
@@ -4661,15 +7194,20 @@ Dear Mr. Adollar,
@findex pi
@code{pi}
+@c XXX documentation
+
@findex sy
The @code{sy} request will allow arbitrary system commands to be
-executed from within a groff document. The output is not saved
-anyplace, so it is up to you to do so.
+executed from within a @code{gtroff} document. The output is not saved
+anyplace, so it is up to the user to do so.
+
+@c XXX add info about safer and unsafe mode
For example, the following example will introduce the current time
-into your document:
+into a document:
-@cindex time
+@cindex time, current
+@cindex current time
@pindex perl
@example
.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
@@ -4679,170 +7217,192 @@ into your document:
\nH:\nM:\nS
@end example
-Note that this works by having the perl script (run by @code{sy})
+@noindent
+Note that this works by having the @code{perl} script (run by @code{sy})
print out the @code{nr} requests which will set the number registers
-@samp{H}, @samp{M} and @samp{S}, and then reads those commands in
-with the @code{so} request.
+@samp{H}, @samp{M} and @samp{S}, and then reads those commands in with
+the @code{so} request.
@vindex systat
-The @code{systat} number register contains
-The return value of the @code{system()} function executed by the last
-@code{sy} request.
+@cindex @code{system()} return value register
+The @code{systat} number register contains the return value of the
+@code{system()} function executed by the last @code{sy} request.
@findex open
-The @code{open} request will open
-a file (specified as the second argument) for writing and associate
-the stream (specified as the first argument) with it.
+The @code{open} request will open a file (specified as the second
+argument) for writing and associate the stream (specified as the first
+argument) with it.
@findex opena
-The @code{opena} is
-like open, but if filename exists, append to it instead of truncating
-it.
+The @code{opena} is like @code{open}, but if the file exists, append to
+it instead of truncating it.
@findex write
-@findex ds
-@cindex copy-in mode
-@cindex mode, copy-in
+@cindex copy-in mode, and @code{write} requests
+@cindex mode, copy-in, and @code{write} requests
The @code{write} request will write to the file associated with the
-stream specified by the first argument. The stream must previously
-have been the subject of an open request. The remainder of the line
-in interpreted as the @code{ds} request reads its second argument: a
-leading @code{"} will be stripped, and it will be read in copy-in mode.
+stream specified by the first argument. The stream must previously have
+been the subject of an open request. The remainder of the line is
+interpreted as the @code{ds} request reads its second argument: A
+leading @samp{"} will be stripped, and it will be read in copy-in mode.
@findex close
-The @code{close} request will
-close the stream specified by the first argument; stream will no
-longer be an acceptable argument to the @code{write} request.
+The @code{close} request will close the stream specified by the first
+argument; stream will no longer be an acceptable argument to the
+@code{write} request.
+
+@c XXX example
+@ignore
@example
... example of open write &c...
@end example
+@end ignore
-@findex \v
-The @code{\V} escape will
-interpolate the contents of the specified environment variable, as returned
-by getenv(3).
-The argument to @code{\V} is specified as an identifier, i.e.
-@samp{\V@var{x}}, @samp{\V(@var{xx}} or @samp{\V[@var{xxx}]}.
-@code{\V} is interpreted in copy-in mode.
+@findex \V
+The @code{\V} escape will interpolate the contents of the specified
+environment variable, as returned by the function @code{getenv}. The
+argument to @code{\V} is specified as an identifier, i.e.@:
+@samp{\V@var{x}}, @samp{\V(@var{xx}} or @samp{\V[@var{xxx}]}. @code{\V}
+is interpreted in copy-in mode.
-@node Postprocessor Access, Miscellany, I/O, Programming Tutorial
+@c =====================================================================
+
+@node Postprocessor Access, Miscellaneous, I/O, Programming Tutorial
@section Postprocessor Access
@cindex postprocessor access
@cindex access of postprocessor
-
-There are two escapes which will allow you to give information
-directly to the postprocessor. This is particularly useful for
-embedding PostScript into your final document.
+There are two escapes which will allow information to be directly given
+to the postprocessor. This is particularly useful for embedding
+@sc{PostScript} into the final document.
@findex \X
-The @code{\X} escape will embed its argument into the gtroff output
-preceded with @samp{x X}.
+The @code{\X} escape will embed its argument into the @code{gtroff}
+output preceded with @w{@samp{x X}}.
@findex \Y
-The @code{\Y} escape is called with an identifier (i.e.
-@code{\Y@var{x}},
-@code{\Y(@var{xx}} or
-@code{\Y[@var{xxx}]}).
-This is approximately equivalent to @samp{\X'\*[@var{xxx}]'}.
-However the contents
-of the string or macro @var{xxx} are not interpreted; also it is
-permitted for
-@var{xxx} to have been defined as a macro and thus contain newlines
-(it is not permitted for the argument to @code{\X} to contain newlines).
-The inclusion of
-newlines requires an extetension to the @sc{Unix} troff output format, and will
-confuse drivers that do not know about this extension.
-
-
-@c distribute these through the text
-@xref{Devices}
-
-@node Miscellany, Debugging, Postprocessor Access, Programming Tutorial
-@section Miscellany
-@cindex miscellany
-
-
-This section contains parts of troff which cannot (yet) be
+The @code{\Y} escape is called with an identifier (i.e.@:
+@code{\Y@var{x}}, @code{\Y(@var{xx}} or @code{\Y[@var{xxx}]}). This is
+approximately equivalent to @samp{\X'\*[@var{xxx}]'}. However, the
+contents of the string or macro @var{xxx} are not interpreted; also it
+is permitted for @var{xxx} to have been defined as a macro and thus
+contain newlines (it is not permitted for the argument to @code{\X} to
+contain newlines). The inclusion of newlines requires an extension to
+the @acronym{UNIX} @code{troff} output format, and will confuse drivers
+that do not know about this extension.
+
+@xref{Output Devices}.
+
+
+@c =====================================================================
+
+@node Miscellaneous, Debugging, Postprocessor Access, Programming Tutorial
+@section Miscellaneous
+@cindex miscellaneous
+
+This section documents parts of @code{gtroff} which cannot (yet) be
categorized elsewhere in this manual.
@findex nm
-Line numbers can be printed in the left margin
-using the @code{nm} request.
-The first argument is the line number of the @emph{next} output line,
-this defaults to 1.
-The second argument indicates on which lines numbers will be printed,
-i.e. 5 means put line numbers on every 5 lines, this defaults to 1.
-The third argument is the space to be left between the number and
-your text, this defaults to 1.
-The fourth argument is the indentation of the line numbers.
+@cindex line numbers
+@cindex numbers, line
+Line numbers can be printed in the left margin using the @code{nm}
+request. The first argument is the line number of the @emph{next}
+output line; this defaults to@w{ }1. The second argument indicates on
+which lines numbers will be printed, i.e.@: 5 means put line numbers on
+every 5@w{ }lines; this defaults to@w{ }1. The third argument is the
+space to be left between the number and the text; this defaults to@w{
+}1. The fourth argument is the indentation of the line numbers.
Without arguments, line numbers are turned off.
+@c XXX xref ln register
+
@findex nn
-The @code{nn} request will temporarily turn off line numbering.
-The first argument is the number of lines not to be numbered,
-this defaults to 1. (does this disable incrementing or display?)
+The @code{nn} request will temporarily turn off line numbering. The
+first argument is the number of lines not to be numbered; this defaults
+to@w{ }1.
+@c XXX (does this disable incrementing or display?)
+
+@c XXX example
+
+@ignore
@example
... line numbering example ...
@end example
+@end ignore
@findex mc
-margin characters can be automatically printed to the right of your
-text with the @code{mc} request.
-The first argument is the character to be printed and the second
-argument is the distance away from your text.
-With no arguments the margin characters are turned off.
-If this occurs before a break, no margin character will be printed.
-
-This is quite useful for indicating text that has changed, and, in
-fact, there are programs available for doing this (they are called
+@cindex margin characters
+@cindex characters for margins
+Margin characters can be automatically printed to the right of the text
+with the @code{mc} request. The first argument is the character to be
+printed, and the second argument is the distance away from the main body
+text. With no arguments the margin characters are turned off. If this
+occurs before a break, no margin character will be printed.
+
+@pindex nrchbar
+@pindex changebar
+This is quite useful for indicating text that has changed, and, in fact,
+there are programs available for doing this (they are called
@code{nrchbar} and @code{changebar} and can be found in any
@samp{comp.sources.unix} archive.
+@c XXX example
+
+@ignore
@example
... margin char example ...
@end example
+@end ignore
@findex lf
@pindex soelim
-The @code{lf} primary reason for existence is to make debugging
-documents which are split into many files, which are then put
-together with @code{soelim} and other preprocessors.
-The first argument is the name of the file and the second argument is
-the input line number in that file.
-This way troff can produce error messages which are intelligible to
-the user.
+@cindex multi-file documents
+@cindex documents, multi-file
+The primary reason for the existence of @code{lf} is to make debugging
+documents which are split into many files, which are then put together
+with @code{soelim} and other preprocessors. The first argument is the
+name of the file and the second argument is the input line number in
+that file. This way @code{gtroff} can produce error messages which are
+intelligible to the user.
+
+@c XXX example
+@ignore
@example
... example of soelim'ed doc ...
@end example
+@end ignore
+
-@node Debugging, Implementation Differences, Miscellany, Programming Tutorial
+@c =====================================================================
+
+@node Debugging, Implementation Differences, Miscellaneous, Programming Tutorial
@section Debugging
@cindex debugging
+@code{gtroff} is not easy to debug, but there are some useful features
+and strategies for debugging.
-Troff is not easy to debug, but there are some useful features and
-strategies for debugging.
-
-@itemize @bullet{}
+@itemize @bullet
@item
@findex tm
-The @code{tm} request will send output to stderr, this is very useful for
-printing debugging output.
+The @code{tm} request will send output to the standard error stream;
+this is very useful for printing debugging output.
+
@item
When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line
-flag.
+statements in the code and have them turned on by a command line flag.
@example
.if \n(DB .tm debugging output
@end example
-Then you can activate these statements with:
+@noindent
+To activate these statements say
@example
groff -rDB=1 file
@@ -4850,227 +7410,309 @@ groff -rDB=1 file
@item
@findex ab
-The @code{ab} request is similar to the @code{tm} request,
-except that it will cause groff to stop processing.
-With no argument it will print @samp{User Abort}.
+@cindex aborting
+The @code{ab} request is similar to the @code{tm} request, except that
+it will cause @code{gtroff} to stop processing. With no argument it
+will print @samp{User Abort}.
+
@item
-@findex ex
-The @code{ex} request will also cause groff to stop processing.
+@findex ex@r{, use in debugging}
+@cindex exiting
+The @code{ex} request will also cause @code{gtroff} to stop processing
+if encountered at the topmost level; see also @ref{I/O}.
+
@item
-If you know you are going to get many errors and no useful output,
-you can tell groff to suppress formatted output with the @samp{-z}
-flag.
+If it is known in advance that there will be many errors and no useful
+output, @code{gtroff} can be forced to suppress formatted output with
+the @option{-z} flag.
+
@item
@findex pm
+@cindex dumping symbol table
+@cindex symbol table, dumping
The @code{pm} request will dump out the entire symbol table.
+
@item
@findex pnr
+@cindex dumping number registers
+@cindex number registers, dumping
The @code{pnr} request will print the names and contents of all
currently defined number registers on stderr.
+
@item
@findex ptr
-The @code{ptr} request will
-print the names and positions of all traps (not including input line
-traps and diversion traps) on stderr. Empty slots in the page trap list
-are printed as well, because they can affect the priority of
-subsequently planted traps.
+@cindex dumping traps
+@cindex traps, dumping
+The @code{ptr} request will print the names and positions of all traps
+(not including input line traps and diversion traps) on stderr. Empty
+slots in the page trap list are printed as well, because they can affect
+the priority of subsequently planted traps.
+
@item
@findex fl
-The @code{fl} request instructs groff to flush its output immediately.
-The intention is that this be used when using troff interactively.
-There is little other use for it.
+@cindex flush output
+@cindex output, flush
+@cindex interactive use of @code{gtroff}
+@cindex @code{gtroff}, interactive use
+The @code{fl} request instructs @code{gtroff} to flush its output
+immediately. The intention is that this be used when using
+@code{gtroff} interactively. There is little other use for it. This
+request causes a line break.
+
@item
@findex backtrace
-The @code{backtrace} request will
-print a backtrace of the input stack on stderr.
+@cindex backtrace of input stack
+@cindex input stack, backtrace
+The @code{backtrace} request will print a backtrace of the input stack
+to the standard error stream.
+
@item
-Groff has command line options for printing out more warnings
-(@samp{-w}) and for printing backtraces (@samp{-b}) when a warning or
-an error occurs. The most verbose level of warnings is @samp{-ww}.
+@cindex warnings
+@code{gtroff} has command line options for printing out more warnings
+(@option{-w}) and for printing backtraces (@option{-b}) when a warning
+or an error occurs. The most verbose level of warnings is @option{-ww}.
+
@item
@findex warn
@vindex .warn
-The @code{warn} request controls the level of warnings checked for.
-The one argument is the sum of the numbers associated with each
-warning that is to be enabled; all other warnings will be disabled.
-The number associated with each warning is listed below.
-For example, @code{.warn 0} will disable all warnings, and
-@code{.warn 1} will disable
-all warnings except that about missing characters. If an argument
-is not given, all warnings will be enabled.
-The number register @code{.warn} contains the current warning level.
+@cindex level of warnings
+@cindex warnings, level
+The @code{warn} request controls the level of warnings checked for. The
+only argument is the sum of the numbers associated with each warning
+that is to be enabled; all other warnings will be disabled. The number
+associated with each warning is listed below. For example,
+@w{@code{.warn 0}} will disable all warnings, and @w{@code{.warn 1}}
+will disable all warnings except that about missing characters. If an
+argument is not given, all warnings will be enabled. The number
+register @code{.warn} contains the current warning level.
@end itemize
+@c ---------------------------------------------------------------------
+
+@menu
+* Warnings::
+@end menu
+
+@node Warnings, , Debugging, Debugging
@subsection Warnings
@cindex warnings
-The warnings that can be given by troff are divided into the
-following categories. The name associated with each warning is used
-by the @samp{-w} and @samp{-W} options; the number is used by the
-@code{warn} request, and by the @code{.warn} register.
+The warnings that can be given to @code{gtroff} are divided into the
+following categories. The name associated with each warning is used by
+the @option{-w} and @option{-W} options; the number is used by the
+@code{warn} request and by the @code{.warn} register.
@table @samp
-@item char
+@item char
@itemx 1
Non-existent characters. This is enabled by default.
-@item number
+
+@item number
@itemx 2
Invalid numeric expressions. This is enabled by default.
-@item break
+@xref{Expressions}.
+
+@item break
@itemx 4
-In fill mode, lines which could not be broken so that
-their length was less than the line length. This is
-enabled by default.
-@item delim
+@cindex fill mode
+@cindex mode, fill
+In fill mode, lines which could not be broken so that their length was
+less than the line length. This is enabled by default.
+
+@item delim
@itemx 8
Missing or mismatched closing delimiters.
-@item el
+
+@item el
@itemx 16
+@findex ie
+@findex el
Use of the @code{el} request with no matching @code{ie} request.
-@xref{if-else}, for more information.
-@item scale
+@xref{if-else}.
+
+@item scale
@itemx 32
Meaningless scaling indicators.
-@item range
+
+@item range
@itemx 64
Out of range arguments.
-@item syntax
+
+@item syntax
@itemx 128
Dubious syntax in numeric expressions.
-@item di
+
+@item di
@itemx 256
-@findex di
-@findex da
+@findex di@r{, debugging}
+@findex da@r{, debugging}
Use of @code{di} or @code{da} without an argument when there is no
current diversion.
-@item mac
+
+@item mac
@itemx 512
-Use of undefined strings, macros and diversions.
-When an undefined string, macro or diversion is used,
-that string is automatically defined as empty. So,
-in most cases, at most one warning will be given for
-each name.
+@findex de
+@c XXX more findex entries
+Use of undefined strings, macros and diversions. When an undefined
+string, macro or diversion is used, that string is automatically defined
+as empty. So, in most cases, at most one warning will be given for each
+name.
+
@item reg
@itemx 1024
-Use of undefined number registers. When an undefined
-number register is used, that register is
-automatically defined to have a value of 0. a
-definition is automatically made with a value of 0.
-So, in most cases, at most one warning will be given
-for use of a particular name.
+@findex nr
+@c XXX more findex entries
+Use of undefined number registers. When an undefined number register is
+used, that register is automatically defined to have a value of@w{ }0.
+A definition is automatically made with a value of@w{ }0. So, in most
+cases, at most one warning will be given for use of a particular name.
+
@item tab
@itemx 2048
Use of a tab character where a number was expected.
+
@item right-brace
@itemx 4096
-@findex \@}
+@findex \@}@r{, debugging}
Use of @code{\@}} where a number was expected.
+
@item missing
@itemx 8192
Requests that are missing non-optional arguments.
+
@item input
@itemx 16384
Illegal input characters.
+
@item escape
@itemx 32768
-Unrecognized escape sequences. When an unrecognized
-escape sequence is encountered, the escape character
-is ignored.
+Unrecognized escape sequences. When an unrecognized escape sequence is
+encountered, the escape character is ignored.
+
@item space
@itemx 65536
-Missing space between a request or macro and its
-argument. This warning will be given when an
-undefined name longer than two characters is
-encountered, and the first two characters of the name
-make a defined name. The request or macro will not
-be invoked. When this warning is given, no macro is
-automatically defined. This is enabled by default.
+@cindex compatibility mode
+Missing space between a request or macro and its argument. This warning
+will be given when an undefined name longer than two characters is
+encountered, and the first two characters of the name make a defined
+name. The request or macro will not be invoked. When this warning is
+given, no macro is automatically defined. This is enabled by default.
This warning will never occur in compatibility mode.
+
@item font
@itemx 131072
-Non-existent fonts. This is enabled by default.
+Non-existent fonts. This is enabled by default.
+
@item all
-All warnings except @samp{di}, @samp{mac} and @samp{reg}. It is
-intended that this covers
-all warnings that are useful with traditional macro packages.
+All warnings except @samp{di}, @samp{mac} and @samp{reg}. It is
+intended that this covers all warnings that are useful with traditional
+macro packages.
+
@item w
All warnings.
@end table
+@c =====================================================================
+
@node Implementation Differences, Summary, Debugging, Programming Tutorial
@section Implementation Differences
@cindex implementation differences
@cindex differences in implementation
+@cindex incompatibilities with Unix @code{troff}
+@cindex compatibility mode
+@cindex mode, compatibility
+GNU @code{troff} has a number of features which cause incompatibilities
+with documents written with old versions of @code{troff}.
-GNU troff has a number of features which cause incompatibilites with
-documents written with old versions of troff.
-
-Long names cause some incompatibilities. @sc{Unix} troff will interpret
+@cindex long names
+@cindex names, long
+Long names cause some incompatibilities. @acronym{UNIX} @code{troff}
+will interpret
@example
.dsabcd
@end example
-@findex \*
-@findex \n
+@findex \*@r{, incompatibilities with Unix @code{troff}}
+@findex \n@r{, incompatibilities with Unix @code{troff}}
@findex cp
@vindex .C
-as defining a string @samp{ab} with contents @samp{cd}.
-Normally, GNU troff will interpret this as a call of a macro named
-@code{dsabcd}. Also @sc{Unix} troff will interpret @code{\*[} or
-@code{\n[} as references to a string or number register called
-@samp{[}. In GNU troff, however, this will normally be interpreted as the
-start of a long name. In compatibility mode GNU troff will interpret
-these things in the traditional way. In compatibility mode, however,
-long names are not recognised. Compatibility mode can be turned on with
-the @samp{-C} command line option, and turned on or off with the
-@code{cp} request.
-The number register @code{.C} is 1 if compatibility mode is on, 0 otherwise.
+@noindent
+as defining a string @samp{ab} with contents @samp{cd}. Normally, GNU
+@code{troff} will interpret this as a call of a macro named
+@code{dsabcd}. Also @acronym{UNIX} @code{troff} will interpret
+@code{\*[} or @code{\n[} as references to a string or number register
+called @samp{[}. In GNU @code{troff}, however, this will normally be
+interpreted as the start of a long name. In compatibility mode GNU
+@code{troff} will interpret these things in the traditional way. In
+compatibility mode, however, long names are not recognized.
+Compatibility mode can be turned on with the @option{-C} command line
+option, and turned on or off with the @code{cp} request. The number
+register @code{.C} is@w{ }1 if compatibility mode is on, 0@w{
+}otherwise.
@findex \A
-GNU troff does not allow the use of the escape sequences
-@samp{\| \^ \& \@} \@{ \@key{SP} \' \` \- \_ \! \% \c} in names of
-strings, macros,
-diversions, number registers, fonts or environments; @sc{Unix} troff does.
-The @code{\A} escape sequence may be helpful in avoiding use of these escape
-sequences in names.
+@findex \|
+@findex \^
+@findex \&
+@findex \@}
+@findex \@{
+@findex \@key{SP}
+@findex \'
+@findex \`
+@findex \-
+@findex \_
+@findex \!
+@findex \%
+@findex \c
+GNU @code{troff} does not allow the use of the escape sequences
+@code{\|}, @code{\^}, @code{\&}, @code{\@}}, @code{\@{},
+@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\%}, and @code{\c} in names of strings, macros, diversions, number
+registers, fonts or environments; @acronym{UNIX} @code{troff} does. The
+@code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
+avoiding use of these escape sequences in names.
@cindex fractional point sizes
@cindex point sizes, fractional
-@findex ps
-Fractional pointsizes cause one noteworthy incompatibility. In @sc{Unix}
-troff the @code{ps} request ignores scale indicators and so
+@findex ps@r{, incompatibilities with Unix @code{troff}}
+Fractional point sizes cause one noteworthy incompatibility. In
+@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
+indicators and thus
@example
.ps 10u
@end example
-will set the pointsize to 10 points, whereas in GNU troff it will set
-the pointsize to 10 scaled points.
-@xref{Fractional Type Sizes}, for more information.
-
-@findex bd
-@findex cs
-@findex tkf
-@findex tr
-@findex fp
-In GNU troff there is a fundamental difference between unformatted,
-input characters, and formatted, output characters. Everything that
-affects how an output character will be output is stored with the
-character; once an output character has been constructed it is
+@noindent
+will set the point size to 10@w{ }points, whereas in GNU @code{troff} it
+will set the point size to 10@w{ }scaled points. @xref{Fractional Type
+Sizes}, for more information.
+
+@findex bd@r{, incompatibilities with Unix @code{troff}}
+@findex cs@r{, incompatibilities with Unix @code{troff}}
+@findex tkf@r{, incompatibilities with Unix @code{troff}}
+@findex tr@r{, incompatibilities with Unix @code{troff}}
+@findex fp@r{, incompatibilities with Unix @code{troff}}
+@cindex input and output characters, compatibility with Unix
+@cindex output characters, compatibility with Unix
+@cindex characters, input and output, compatibility with Unix
+In GNU @code{troff} there is a fundamental difference between
+unformatted, input characters, and formatted, output characters.
+Everything that affects how an output character will be output is stored
+with the character; once an output character has been constructed it is
unaffected by any subsequent requests that are executed, including
-@code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp}
-requests. Normally output characters are constructed
-from input characters at the moment immediately before the character is
-added to the current output line. Macros, diversions and strings are
-all, in fact, the same type of object; they contain lists of input
-characters and output characters in any combination. An output
-character does not behave like an input character for the purposes of
-macro processing; it does not inherit any of the special properties that
-the input character from which it was constructed might have had. For
-example,
+@code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp} requests.
+Normally output characters are constructed from input characters at the
+moment immediately before the character is added to the current output
+line. Macros, diversions and strings are all, in fact, the same type of
+object; they contain lists of input characters and output characters in
+any combination. An output character does not behave like an input
+character for the purposes of macro processing; it does not inherit any
+of the special properties that the input character from which it was
+constructed might have had. For example,
@example
.di x
@@ -5080,127 +7722,222 @@ example,
.x
@end example
-@findex \e
-@findex \!
-@findex \?
-will print @samp{\\} in GNU troff; each pair of input backslashes is
-turned into one
-output backslash and the resulting output backslashes are not
-interpreted as escape
-characters when they are reread. @sc{Unix} troff would interpret them as
-escape characters when they were reread and would end up printing one
-@samp{\}.
-The correct way to obtain a printable backslash is to use the
-@code{\e} escape
-sequence: this will always print a single instance of the current escape
-character, regardless of whether or not it is used in a diversion; it
-will also work in both GNU troff and @sc{Unix} troff. If you wish for some
-reason to store in a diversion an escape sequence that will be
-interpreted when the diversion is reread, you can either use the
-traditional @code{\!} transparent output facility, or, if this is unsuitable,
-the new @code{\?} escape sequence. @xref{Diversions}, for more information.
+@findex \e@r{, incompatibilities with Unix @code{troff}}
+@findex \!@r{, incompatibilities with Unix @code{troff}}
+@findex \?@r{, incompatibilities with Unix @code{troff}}
+@cindex transparent output, incompatibilities with Unix @code{troff}
+@cindex output, transparent, incompatibilities with Unix @code{troff}
+@noindent
+will print @samp{\\} in GNU @code{troff}; each pair of input backslashes
+is turned into one output backslash and the resulting output backslashes
+are not interpreted as escape characters when they are reread.
+@acronym{UNIX} @code{troff} would interpret them as escape characters
+when they were reread and would end up printing one @samp{\}. The
+correct way to obtain a printable backslash is to use the @code{\e}
+escape sequence: This will always print a single instance of the current
+escape character, regardless of whether or not it is used in a
+diversion; it will also work in both GNU @code{troff} and @acronym{UNIX}
+@code{troff}. To store, for some reason, an escape sequence in a
+diversion that will be interpreted when the diversion is reread, either
+use the traditional @code{\!} transparent output facility, or, if this
+is unsuitable, the new @code{\?} escape sequence.
+
+@xref{Diversions}, for more information.
+@c =====================================================================
+
@node Summary, , Implementation Differences, Programming Tutorial
@section Summary
@cindex summary
+@c XXX documentation
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Preprocessors, Output Devices, Programming Tutorial, Top
+@chapter Preprocessors
+@cindex preprocessors
+
+This chapter describes all preprocessors that come with @code{groff} or
+which are freely available.
+
+@menu
+* geqn::
+* gtbl::
+* gpic::
+* ggrn::
+* grap::
+* grefer::
+* gsoelim::
+@end menu
+
-@node geqn, gtbl, Programming Tutorial, Top
-@chapter @code{geqn}
+@c =====================================================================
+
+@node geqn, gtbl, Preprocessors, Preprocessors
+@section @code{geqn}
@cindex @code{eqn}
@cindex @code{geqn}
+@c XXX
@menu
* Invoking geqn::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking geqn, , geqn, geqn
-@section Invoking @code{geqn}
+@subsection Invoking @code{geqn}
@cindex invoking @code{geqn}
@cindex @code{geqn}, invoking
+@c XXX
+
+@c =====================================================================
-@node gtbl, gpic, geqn, Top
-@chapter @code{gtbl}
+@node gtbl, gpic, geqn, Preprocessors
+@section @code{gtbl}
@cindex @code{tbl}
@cindex @code{gtbl}
+@c XXX
@menu
* Invoking gtbl::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking gtbl, , gtbl, gtbl
-@section Invoking @code{gtbl}
+@subsection Invoking @code{gtbl}
@cindex invoking @code{gtbl}
@cindex @code{gtbl}, invoking
+@c XXX
+
-@node gpic, grap, gtbl, Top
-@chapter @code{gpic}
+@c =====================================================================
+
+@node gpic, ggrn, gtbl, Preprocessors
+@section @code{gpic}
@cindex @code{pic}
@cindex @code{gpic}
+@c XXX
@menu
* Invoking gpic::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking gpic, , gpic, gpic
-@section Invoking @code{gpic}
+@subsection Invoking @code{gpic}
@cindex invoking @code{gpic}
@cindex @code{gpic}, invoking
+@c XXX
+
+
+@c =====================================================================
+
+@node ggrn, grap, gpic, Preprocessors
+@section @code{ggrn}
+@cindex @code{grn}
+@cindex @code{ggrn}
+
+@c XXX
+
+@menu
+* Invoking ggrn::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking ggrn, , ggrn, ggrn
+@subsection Invoking @code{ggrn}
+@cindex invoking @code{ggrn}
+@cindex @code{ggrn}, invoking
+@c XXX
-@node grap, grefer, gpic, Top
-@chapter @code{grap}
+
+@c =====================================================================
+
+@node grap, grefer, ggrn, Preprocessors
+@section @code{grap}
@cindex @code{grap}
+A free implementation of @code{grap}, written by Ted Faber,
+is available as an extra package from the following address:
+
+@display
+@url{http://www.lunabase.org/~faber/Vault/software/grap/}
+@end display
+
+@c =====================================================================
-@node grefer, gsoelim, grap, Top
-@chapter @code{grefer}
+@node grefer, gsoelim, grap, Preprocessors
+@section @code{grefer}
@cindex @code{refer}
@cindex @code{grefer}
+@c XXX
@menu
* Invoking grefer::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking grefer, , grefer, grefer
-@section Invoking @code{grefer}
+@subsection Invoking @code{grefer}
@cindex invoking @code{grefer}
@cindex @code{grefer}, invoking
+@c XXX
+
+@c =====================================================================
-@node gsoelim, Devices, grefer, Top
-@chapter @code{gsoelim}
+@node gsoelim, , grefer, Preprocessors
+@section @code{gsoelim}
@cindex @code{soelim}
@cindex @code{gsoelim}
+@c XXX
@menu
* Invoking gsoelim::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking gsoelim, , gsoelim, gsoelim
-@section Invoking @code{gsoelim}
+@subsection Invoking @code{gsoelim}
@cindex invoking @code{gsoelim}
@cindex @code{gsoelim}, invoking
+@c XXX
-@node Devices, File formats, gsoelim, Top
-@chapter Devices
-@cindex devices
+@c =====================================================================
+@c =====================================================================
+@node Output Devices, File formats, Preprocessors, Top
+@chapter Output Devices
+@cindex output devices
+@cindex devices for output
+
+@c XXX
@menu
* Special Characters::
@@ -5208,222 +7945,343 @@ the new @code{\?} escape sequence. @xref{Diversions}, for more information.
* grops::
* grodvi::
* grolj4::
+* grolbp::
* grohtml::
* gxditview::
@end menu
-@node Special Characters, grotty, Devices, Devices
+
+@c =====================================================================
+
+@node Special Characters, grotty, Output Devices, Output Devices
@section Special Characters
@cindex special characters
@cindex characters, special
+@c XXX
+
+@xref{Font Files}.
+
-@c distribute these through the text
-@xref{Font Files}
+@c =====================================================================
-@node grotty, grops, Special Characters, Devices
+@node grotty, grops, Special Characters, Output Devices
@section @code{grotty}
@cindex @code{grotty}
-
+@c XXX
@menu
* Invoking grotty::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking grotty, , grotty, grotty
@subsection Invoking @code{grotty}
@cindex invoking @code{grotty}
@cindex @code{grotty}, invoking
+@c XXX
+
+@c =====================================================================
-@node grops, grodvi, grotty, Devices
+@node grops, grodvi, grotty, Output Devices
@section @code{grops}
@cindex @code{grops}
-
+@c XXX
@menu
* Invoking grops::
* Embedding PostScript::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking grops, Embedding PostScript, grops, grops
@subsection Invoking @code{grops}
@cindex invoking @code{grops}
@cindex @code{grops}, invoking
+@c XXX
+@c ---------------------------------------------------------------------
@node Embedding PostScript, , Invoking grops, grops
-@subsection Embedding PostScript
+@subsection Embedding @sc{PostScript}
@cindex embedding postscript
@cindex postscript, embedding
+@c XXX
+
+@c =====================================================================
-@node grodvi, grolj4, grops, Devices
+@node grodvi, grolj4, grops, Output Devices
@section @code{grodvi}
@cindex @code{grodvi}
-
+@c XXX
@menu
* Invoking grodvi::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking grodvi, , grodvi, grodvi
@subsection Invoking @code{grodvi}
@cindex invoking @code{grodvi}
@cindex @code{grodvi}, invoking
+@c XXX
-@node grolj4, grohtml, grodvi, Devices
+@c =====================================================================
+
+@node grolj4, grolbp, grodvi, Output Devices
@section @code{grolj4}
@cindex @code{grolj4}
-
+@c XXX
@menu
* Invoking grolj4::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking grolj4, , grolj4, grolj4
@subsection Invoking @code{grolj4}
@cindex invoking @code{grolj4}
@cindex @code{grolj4}, invoking
+@c XXX
+
+
+@c =====================================================================
+
+@node grolbp, grohtml, grolj4, Output Devices
+@section @code{grolbp}
+@cindex @code{grolbp}
+
+@c XXX
+
+@menu
+* Invoking grolbp::
+@end menu
+
+@c ---------------------------------------------------------------------
+@node Invoking grolbp, , grolbp, grolbp
+@subsection Invoking @code{grolbp}
+@cindex invoking @code{grolbp}
+@cindex @code{grolbp}, invoking
-@node grohtml, gxditview, grolj4, Devices
+@c XXX
+
+
+@c =====================================================================
+
+@node grohtml, gxditview, grolbp, Output Devices
@section @code{grohtml}
@cindex @code{grohtml}
-
+@c XXX
@menu
* Invoking grohtml::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking grohtml, , grohtml, grohtml
@subsection Invoking @code{grohtml}
@cindex invoking @code{grohtml}
@cindex @code{grohtml}, invoking
+@c XXX
+
+@c =====================================================================
-@node gxditview, , grohtml, Devices
+@node gxditview, , grohtml, Output Devices
@section @code{gxditview}
@cindex @code{gxditview}
-
+@c XXX
@menu
* Invoking gxditview::
@end menu
+@c ---------------------------------------------------------------------
+
@node Invoking gxditview, , gxditview, gxditview
@subsection Invoking @code{gxditview}
@cindex invoking @code{gxditview}
@cindex @code{gxditview}, invoking
+@c XXX
+@c X11's xditview
+
-@node File formats, Installation, Devices, Top
+@c =====================================================================
+@c =====================================================================
+
+@node File formats, Installation, Output Devices, Top
@chapter File formats
@cindex file formats
@cindex formats, file
-
+@c XXX
@menu
* gtroff Output::
* Font Files::
@end menu
+
+@c =====================================================================
+
@node gtroff Output, Font Files, File formats, File formats
@section @code{gtroff} Output
@cindex @code{gtroff} output
@cindex output, @code{gtroff}
+This section describes the format output of GNU @code{troff}. The
+output format used by GNU @code{troff} is very similar to that used by
+@acronym{UNIX} device-independent @code{troff} (@code{ditroff}).
+
+@menu
+* Output Format::
+* Device Control::
+* Drawing Functions::
+* Line Continuation::
+@end menu
-This section describes the format output by GNU troff. The output
-format used by GNU troff is very similar to that used by @sc{Unix}
-device-independent troff.
+@c ---------------------------------------------------------------------
-The output format is ascii based, as opposed to a binary format (like
-@TeX{} dvi).
-The output format is 8 bit clean, thus single characters can have the
-eighth bit set, as can the names of fonts and special characters.
+@node Output Format, Device Control, gtroff Output, gtroff Output
+@subsection Output Format
+@cindex output format
+@cindex format of output
+
+@cindex 8-bit input
+@cindex input, 8-bit
+The output format is text based, as opposed to a binary format (like
+@TeX{} DVI). The output format is @w{8-bit} clean, thus single
+characters can have the eighth bit set, as can the names of fonts and
+special characters.
The output format consists of single command characters with attached
-parameters which are separated from subsequent text by whitespace, or
-a newline.
+parameters which are separated from subsequent text by whitespace or a
+newline.
-The names of characters and fonts an be of arbitrary length; drivers
+The names of characters and fonts can be of arbitrary length; drivers
should not assume that they will be only two characters long (as
-device-independent troff did).
+@code{ditroff} does).
When a character is to be printed, that character will always be in the
-current font.
-Unlike device-independent troff, it is not necessary for
-drivers to search special fonts to find a character.
+current font. Unlike @code{ditroff}, it is not necessary for drivers to
+search special fonts to find a character.
@table @code
@item H@var{n}
+@c XXX
+
@item V@var{n}
+@c XXX
+
@item h@var{n}
+@c XXX
+
@item v@var{n}
+@c XXX
+
@item c@var{n}
+@c XXX
+
@item C@var{n}
+@c XXX
+
@item @var{nn}@var{c}
+@c XXX
+
@item t@var{xxx}
@var{xxx} is any sequence of characters terminated by a space or a
-newline; the first character should be printed at the current
-position, the the current horizontal position should be increased by
-the width of the first character, and so on for each character.
-The width of the character is that given in the font file,
-appropriately scaled for the current point size,
-and rounded so that it is a multiple of the horizontal resolution.
-Special characters cannot be printed using this command.
-
-This command is only allowed if the @samp{tcommand} line is present
-in the @file{DESC} file.
+newline; the first character should be printed at the current position,
+the the current horizontal position should be increased by the width of
+the first character, and so on for each character. The width of the
+character is that given in the font file, appropriately scaled for the
+current point size, and rounded so that it is a multiple of the
+horizontal resolution. Special characters cannot be printed using this
+command.
+
+@kindex tcommand
+@pindex DESC@r{, and @code{tcommand}}
+This command is only allowed if the @samp{tcommand} line is present in
+the @file{DESC} file.
+
@item u@var{n} @var{xxx}
-@pindex DESC
-This is same as the @code{t} command except that after printing each
+This is same as the @samp{t} command except that after printing each
character, the current horizontal position is increased by the sum of
-the width of that character and @code{n}.
+the width of that character and@w{ }@var{n}.
+
+This command is only allowed if the @samp{tcommand} line is present in
+the @file{DESC} file.
-This command is only allowed if the @samp{tcommand} line is present
-in the @file{DESC} file.
@item n@var{a}@var{b}
+@c XXX
+
@item p@var{n}
+@c XXX
+
@item s@var{n}
-The argument to the s command is in scaled points (units of points/n,
-where n is the argument to the sizescale command in the DESC file.)
+@kindex sizescale
+@pindex DESC@r{, and @code{sizescale}}
+The argument to the @samp{s} command is in scaled points (units of
+points/@var{n}, where @var{n} is the argument to the @samp{sizescale}
+command in the @file{DESC} file).
+
@item f@var{n}
@item x @dots{} \n
Device control.
+@c XXX more info
+
@item D@var{c} @var{x}@dots{}\n
+@c XXX
@end table
+@c ---------------------------------------------------------------------
+
+@node Device Control, Drawing Functions, Output Format, gtroff Output
@subsection Device Control
+@cindex device control
+@cindex control of devices
-The @code{x} command is normally followed by a letter or word
-indicating the function to perform, followed by white space separated
-arguments.
+The @samp{x} command is normally followed by a letter or word indicating
+the function to perform, followed by white space separated arguments.
-The first argument can be abreviated to the first letter.
+The first argument can be abbreviated to the first letter.
@table @code
@item x init
+@c XXX
+
@item x T
+@c XXX
+
@item x res @var{n} @var{h} @var{v}
+@c XXX
+
@item x H
-The argument to the x Height command is also in scaled points.
+@c XXX more info
+The argument to the @w{@samp{x Height}} command is also in scaled
+points.
@end table
The first three output commands are guaranteed to be:
@@ -5434,263 +8292,377 @@ x res n h v
x init
@end example
-For example, the input @samp{crunchy \fH\s+2frog\s0\fP!?} will produce:
+@noindent
+For example, the input
+
+@example
+crunchy \fH\s+2frog\s0\fP!?
+@end example
+
+@noindent
+will produce
+
+@c XXX example
+@ignore
@example
... sample output here ...
@end example
+@end ignore
+
+@c ---------------------------------------------------------------------
+@node Drawing Functions, Line Continuation, Device Control, gtroff Output
@subsection Drawing Functions
+@cindex drawing functions
+@cindex functions for drawing
-The D drawing command has been extended. These extensions will only be
-used by GNU pic if the -x option is given.
+@pindex gpic
+The @samp{D} drawing command has been extended. These extensions will
+only be used by GNU @code{pic} if the @option{-x} option is given.
+
+@xref{Drawing Requests}.
@table @code
-...
-@item Df n\n
-Set the shade of gray to be used for filling solid objects to n; n must
-be an integer between 0 and 1000, where 0 corresponds solid white and
-1000 to solid black, and values in between correspond to intermediate
-shades of gray. This applies only to solid circles, solid ellipses and
-solid polygons. By default, a level of 1000 will be used. Whatever
-color a solid object has, it should completely obscure everything
-beneath it. A value greater than 1000 or less than 0 can also be used:
-this means fill with the shade of gray that is currently being used for
-lines and text. Normally this will be black, but some drivers may
-provide a way of changing this.
-@item DC d\n
-Draw a solid circle with a diameter of d with the leftmost point at the
-current position.
-@item DE dx dy\n
-Draw a solid ellipse with a horizontal diameter of dx and a vertical
-diameter of dy with the leftmost point at the current position.
-@item Dp $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub
-n$\n
-Draw a polygon with, for $i = 1 ,..., n+1$, the i-th vertex at the
-current position $+ sum from j=1 to i-1 ( dx sub j , dy sub j )$. At
-the moment, GNU pic only uses this command to generate triangles and
-rectangles.
-@item DP $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub
-n$\n
-Like Dp but draw a solid rather than outlined polygon.
-@item Dt n\n
-Set the current line thickness to n machine units. Traditionally @sc{Unix}
-troff drivers use a line thickness proportional to the current point
-size; drivers should continue to do this if no Dt command has been
-given, or if a Dt command has been given with a negative value of n. A
-zero value of n selects the smallest available line thickness.
+@c XXX ...
+@item Df @var{n}
+Set the shade of gray to be used for filling solid objects to@w{
+}@var{n}; @var{n}@w{ }must be an integer between 0 and@w{ }1000, where 0
+corresponds solid white and 1000 to solid black, and values in between
+correspond to intermediate shades of gray. This applies only to solid
+circles, solid ellipses and solid polygons. By default, a level of@w{
+}1000 will be used. Whatever color a solid object has, it should
+completely obscure everything beneath it. A value greater than@w{ }1000
+or less than@w{ }0 can also be used: this means fill with the shade of
+gray that is currently being used for lines and text. Normally this
+will be black, but some drivers may provide a way of changing this.
+
+@item DC @var{d}
+Draw a solid circle with a diameter of@w{ }@var{d} with the leftmost
+point at the current position.
+
+@item DE @var{dx} @var{dy}
+Draw a solid ellipse with a horizontal diameter of@w{ }@var{dx} and a
+vertical diameter of@w{ }@var{dy} with the leftmost point at the current
+position.
+
+@item Dp @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{} @var{dxn} @var{dyn}
+Draw a polygon with. The first vertex is at the current position, the
+second vertex at an offset (@var{dx1},@var{dy1}) from the current
+position, the second vertex at an offset (@var{dx2},@var{dy2}) from the
+first vertex, and so on up to the @var{n}-th vertex. At the moment, GNU
+@code{pic} only uses this command to generate triangles and rectangles.
+
+@item DP @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{} @var{dxn} @var{dyn}
+Like @code{Dp} but draw a solid rather than outlined polygon.
+
+@item Dt @var{n}
+@cindex line thickness
+@cindex thickness of lines
+Set the current line thickness to @var{n}@w{ }machine units.
+Traditionally, @acronym{UNIX} @code{troff} drivers use a line thickness
+proportional to the current point size; drivers should continue to do
+this if no @code{Dt} command has been given, or if a @code{Dt} command
+has been given with a negative value of@w{ }@var{n}. A zero value of@w{
+}@var{n} selects the smallest available line thickness.
@end table
+@findex \D
A difficulty arises in how the current position should be changed after
-the execution of these commands. This is not of great importance since
-the code generated by GNU pic does not depend on this. Given a drawing
-command of the form
+the execution of these commands. This is not of great importance since
+the code generated by GNU @code{pic} does not depend on this. Given a
+drawing command of the form
-\D'c $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$'
+@example
+\D'@var{c} @var{x1} @var{y1} @var{x2} @var{y2} @dots{} @var{xn} @var{yn}'
+@end example
+
+@findex \w
+@vindex st
+@findex sb
+@noindent
+where @var{c} is not one of @samp{c}, @samp{e}, @samp{l}, @samp{a} or
+@samp{~}, @acronym{UNIX} @code{troff} will treat each of the x@w{ }value
+as a horizontal quantity, and each of the y@w{ }values as a vertical
+quantity and will assume that the width of the drawn object is sum if
+all x@w{ }values, and that the height is the sum of all y@w{ }values.
+(The assumption about the height can be seen by examining the @code{st}
+and @code{sb} registers after using such a @code{D}@w{ }command in a
+@code{\w} escape sequence.) This rule also holds for all the original
+drawing commands with the exception of @code{De}. For the sake of
+compatibility GNU @code{troff} also follows this rule, even though it
+produces an ugly result in the case of the @code{Df}, @code{Dt}, and, to
+a lesser extent, @code{DE}@w{ }commands. Thus after executing a
+@code{D}@w{ }command of the form
-where c is not one of c, e, l, a or ~, @sc{Unix} troff will treat each of the
-$x sub i$ as a horizontal quantity, and each of the $y sub i$ as a
-vertical quantity and will assume that the width of the drawn object is
-$sum from i=1 to n x sub i$, and that the height is $sum from i=1 to n y
-sub i$. (The assumption about the height can be seen by examining the
-st and sb registers after using such a D command in a \w escape
-sequence.) This rule also holds for all the original drawing commands
-with the exception of De. For the sake of compatibility GNU troff also
-follows this rule, even though it produces an ugly result in the case of
-the Df, Dt, and, to a lesser extent, DE commands. Thus after executing
-a D command of the form
+@example
+D@var{c} @var{x1} @var{y1} @var{x2} @var{y2} @dots{} @var{xn} @var{yn}
+@end example
-Dc $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\n
+@noindent
+the current position should be increased horizontally by the sum of all
+x@w{ }values and vertically by the sum of all y@w{ }values.
-the current position should be increased by $( sum from i=1 to n x sub i
-, sum from i=1 to n y sub i )$.
+@c ---------------------------------------------------------------------
+@node Line Continuation, , Drawing Functions, gtroff Output
@subsection Line Continuation
+@cindex line continuation in output commands
+@cindex output commands, line continuation
-There is a continuation convention which permits the argument to the x X
-command to contain newlines: when outputting the argument to the x X
-command, GNU troff will follow each newline in the argument with a +
-character (as usual, it will terminate the entire argument with a
-newline); thus if the line after the line containing the x X command
-starts with +, then the newline ending the line containing the x X
-command should be treated as part of the argument to the x X command,
-the + should be ignored, and the part of the line following the + should
-be treated like the part of the line following the x X command.
-
+There is a continuation convention which permits the argument to the
+@w{@samp{x X}} command to contain newlines: When outputting the argument
+to the @w{@samp{x X}} command, GNU @code{troff} will follow each newline
+in the argument with a @samp{+} character (as usual, it will terminate
+the entire argument with a newline); thus if the line after the line
+containing the @w{@samp{x X}} command starts with @samp{+}, then the
+newline ending the line containing the @w{@samp{x X}} command should be
+treated as part of the argument to the @w{@samp{x X}} command, the
+@samp{+} should be ignored, and the part of the line following the
+@samp{+} should be treated like the part of the line following the
+@w{@samp{x X}} command.
+@c =====================================================================
@node Font Files, , gtroff Output, File formats
@section Font Files
@cindex font files
@cindex files, font
+The @code{gtroff} font format is roughly a superset of the
+@code{ditroff} font format. Unlike the @code{ditroff} font format,
+there is no associated binary format; all files are text files. The
+font files for device @var{name} are stored in a directory
+@file{dev@var{name}}. There are two types of file: a device description
+file called @file{DESC} and for each font@w{ }@var{f} a font file
+called@w{ }@file{@var{f}}.
-The groff font format is roughly a superset of the ditroff font
-format. Unlike the ditroff font format, there is no associated binary
-format. The font files for device name are stored in a directory
-@file{dev@var{name}}. There are two types of file: a device
-description file called @file{DESC} and for each font @samp{F} a font
-file called @file{F}. These are text files; there is no associated
-binary format.
+@menu
+* DESC file format::
+* Font file format::
+@end menu
+@c ---------------------------------------------------------------------
+
+@node DESC file format, Font file format, Font Files, Font Files
@subsection @file{DESC} file format
-@pindex DESC
+@cindex @file{DESC} file format
+@cindex font description file format
+@cindex format of font description file
+@pindex DESC@r{ file format}
The @file{DESC} file can contain the following types of line:
@table @code
@item res @var{n}
+@kindex res
There are @var{n} machine units per inch.
+
@item hor @var{n}
+@kindex hor
The horizontal resolution is @var{n} machine units.
+
@item vert @var{n}
+@kindex vert
The vertical resolution is @var{n} machine units.
+
@item sizescale @var{n}
-The scale factor for pointsizes. By default this has a value of 1. One
-scaled point is equal to one point/@var{n}. The arguments to the
+@kindex sizescale
+The scale factor for point sizes. By default this has a value of@w{ }1.
+One scaled point is equal to one point/@var{n}. The arguments to the
@code{unitwidth} and @code{sizes} commands are given in scaled points.
@xref{Fractional Type Sizes}, for more information.
+
@item unitwidth @var{n}
-Quantities in the font files are given in machine units for fonts whose
-point size is @var{n} scaled points.
+@kindex unitwidth
+Quantities in the font files are given in machine units for fonts whose
+point size is @var{n}@w{ }scaled points.
+
@item tcommand
-This means that the postprocessor can handle the @code{t} and
-@code{u} output commands.
-@item sizes @var{s1} @var{s2}@dots{}@var{sn} 0
-This means that the device has fonts at @var{s1}, @var{s2},
-@dots{}@var{sn} scaled points. The list of sizes must be terminated
-by a 0. Each @var{si} can also be a range of
-sizes @var{m}-@var{n}. The list can extend over more than one line.
-@item styles @var{S1 S2@dots{}Sm}
-The first @var{m} font positions will be associated with styles
-@var{S1}@dots{}@var{Sm}.
-@item fonts @var{n} @var{F1 F2 F3@dots{}Fn}
-Fonts @var{F1@dots{}Fn} will be mounted in the font positions
-@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m}
-is the number of styles. This command may extend over more than one
-line. A font name of 0 will cause no font to be mounted on the
-corresponding font position.
+@kindex tcommand
+This means that the postprocessor can handle the @samp{t} and @samp{u}
+output commands.
+
+@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
+@kindex sizes
+This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
+@var{sn} scaled points. The list of sizes must be terminated by a@w{
+}0. Each @var{si} can also be a range of sizes @var{m}-@var{n}. The
+list can extend over more than one line.
+
+@item styles @var{S1} @var{S2} @dots{} @var{Sm}
+@kindex styles
+The first @var{m}@w{ }font positions will be associated with styles
+@var{S1} @dots{} @var{Sm}.
+
+@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
+@kindex fonts
+Fonts @var{F1} @dots{} @var{Fn} will be mounted in the font positions
+@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
+styles. This command may extend over more than one line. A font name
+of@var{ }0 will cause no font to be mounted on the corresponding font
+position.
+
@item family @var{fam}
+@kindex family
The default font family is @var{fam}.
+
@item charset
+@kindex charset
This line and everything following in the file are ignored. It is
allowed for the sake of backwards compatibility.
@end table
The @code{res}, @code{unitwidth}, @code{fonts} and @code{sizes} lines
-are compulsory. Other commands are ignored by troff but may be used
-by postprocessors to store arbitrary information about the device in
-the @file{DESC} file.
+are mandatory. Other commands are ignored by @code{gtroff} but may be
+used by postprocessors to store arbitrary information about the device
+in the @file{DESC} file.
+@c XXX add other commands resp. xrefs to output devices
+@c XXX add obsolete commands
+@c ---------------------------------------------------------------------
+
+@node Font file format, , DESC file format, Font Files
@subsection Font file format
+@cindex font file format
+@cindex format of font files
A font file has two sections. The first section is a sequence of lines
each containing a sequence of blank delimited words; the first word in
the line is a key, and subsequent words give a value for that key.
@table @code
-@item name @var{F}
-The name of the font is @var{F}.
+@item name @var{f}
+@kindex name
+The name of the font is@w{ }@var{f}.
+
@item spacewidth @var{n}
-The normal width of a space is @var{n}.
+@kindex spacewidth
+The normal width of a space is@w{ }@var{n}.
+
@item slant @var{n}
-The characters of the font have a slant of @var{n} degrees.
+@kindex slant
+The characters of the font have a slant of @var{n}@w{ }degrees.
(Positive means forward.)
-@item ligatures @var{lig1} @var{lig2}@dots{}@var{lign} [0]
+
+@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
+@kindex ligatures
Characters @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
-possible ligatures are ff, fi, fl and ffl. For backwards
-compatibiliy, the list of ligatures may be terminated with a 0. The
-list of ligatures may not extend over more than one line.
+possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
+@samp{ffl}. For backwards compatibility, the list of ligatures may be
+terminated with a@w{ }0. The list of ligatures may not extend over more
+than one line.
+
@item special
+@kindex special
The font is special; this means that when a character is requested that
is not present in the current font, it will be searched for in any
special fonts that are mounted.
@end table
-Other commands are ignored by troff but may be used by postprocessors to
-store arbitrary information about the font in the font file.
+Other commands are ignored by @code{gtroff} but may be used by
+postprocessors to store arbitrary information about the font in the font
+file.
-The first section can contain comments which start with the # character
-and extend to the end of a line.
+@cindex comments in font files
+@cindex font files, comments
+@kindex #
+The first section can contain comments which start with the @samp{#}
+character and extend to the end of a line.
The second section contains one or two subsections. It must contain a
@code{charset} subsection and it may also contain a @code{kernpairs}
subsection. These subsections can appear in any order. Each
subsection starts with a word on a line by itself.
-The word @code{charset} starts the @code{charset} subsection. The
-@code{charset} line is followed by a sequence of lines. Each line
-gives information for one character. A line comprises a number of
-fields separated by blanks or tabs. The format is
+@kindex charset
+The word @code{charset} starts the character set subsection. The
+@code{charset} line is followed by a sequence of lines. Each line gives
+information for one character. A line comprises a number of fields
+separated by blanks or tabs. The format is
-@display
+@c XXX fix it for new HTML additions
+
+@example
@var{name} @var{metrics} @var{type} @var{code} @var{comment}
-@end display
+@end example
-@var{name} identifies the character: if @var{name} is a single
-character @var{c} then it corresponds to the groff input character
-@var{c}; if it is of the form @samp{\@var{c}} where @var{c} is a
-single character, then it corresponds to the groff input character
-@samp{\@var{c}}; otherwise it corresponds to the groff input character
-@samp{\[@var{name}]} (if it is exactly two characters @var{xx} it can
-be entered as @samp{\(@var{xx}}.) Groff supports eight bit characters;
-however some utilities has difficulties with eight bit characters.
-For this reason, there is a convention that the @var{name}
-@samp{char@var{n}} is equivalent to the single character whose code is
-@var{n}. For example, @samp{char163} would be equivalent to the
-character with @var{code} 163 which is the pounds sterling sign in ISO
-Latin-1 character set. The name @samp{---} is special and indicates
-that the character is unnamed; such characters can only be used by
-means of the @code{\N} escape sequence in troff.
+@cindex 8-bit input
+@cindex input, 8-bit
+@findex \N
+@kindex ---
+@noindent
+@var{name} identifies the character: If @var{name} is a single
+character@w{ }@var{c} then it corresponds to the @code{gtroff} input
+character @var{c}; if it is of the form @samp{\@var{c}} where @var{c} is
+a single character, then it corresponds to the @code{gtroff} input
+character@w{ }\@var{c}; otherwise it corresponds to the groff input
+character @samp{\[@var{name}]}. (If it is exactly two characters
+@var{xx} it can be entered as @samp{\(@var{xx}}.) @code{gtroff}
+supports 8-bit characters; however some utilities have difficulties with
+eight-bit characters. For this reason, there is a convention that the
+name @samp{char@var{n}} is equivalent to the single character whose code
+is@w{ }@var{n}. For example, @samp{char163} would be equivalent to the
+character with code@w{ }163 which is the pounds sterling sign in @w{ISO
+Latin-1} character set. The name @samp{---} is special and indicates
+that the character is unnamed; such characters can only be used by means
+of the @code{\N} escape sequence in @code{gtroff}.
+
+@c XXX input encodings vs. output encodings
The @var{type} field gives the character type:
@table @code
@item 1
-means the character has an descender, for example, p;
+the character has an descender, for example, `p';
+
@item 2
-means the character has an ascender, for example, b;
+the character has an ascender, for example, `b';
+
@item 3
-means the character has both an ascender and a descender, for example,
-@samp{(}.
+the character has both an ascender and a descender, for example, `('.
@end table
The @var{code} field gives the code which the postprocessor uses to
-print the character. The character can also be input to groff using
-this code by means of the @code{\N} escape sequence. The code can be any
-integer. If it starts with a 0 it will be interpreted as octal; if it
-starts with 0x or 0X it will be intepreted as hexdecimal.
+print the character. The character can also be input to @code{gtroff}
+using this code by means of the @code{\N} escape sequence. The code can
+be any integer. If it starts with @samp{0} it will be interpreted as
+octal; if it starts with @samp{0x} or @samp{0X} it will be interpreted as
+hexadecimal.
Anything on the line after the @var{code} field will be ignored.
The @var{metrics} field has the form:
-@smallexample
-@var{width[,height[,depth[,italic_correction[,left_italic_correction[,subscript_correction]]]]]}
-@end smallexample
+@example
+@var{width}[,@var{height}[,@var{depth}[,@var{italic_correction}
+ [,@var{left_italic_correction}[,@var{subscript_correction}]]]]]
+@end example
-There must not be any spaces between these subfields. Missing
-subfields are assumed to be 0. The subfields are all decimal
-integers. Since there is no associated binary format, these values
-are not required to fit into a variable of type @samp{char} as they
-are in ditroff. The @var{width} subfields gives the width of the
-character. The @var{height} subfield gives the height of the
-character (upwards is positive); if a character does not extend above
-the baseline, it should be given a zero height, rather than a negative
-height. The @var{depth} subfield gives the depth of the character,
-that is, the distance below the lowest point below the baseline to
-which the character extends (downwards is positive); if a character
-does not extend below above the baseline, it should be given a zero
-depth, rather than a negative depth. The @var{italic_correction}
-subfield gives the amount of space that should be added after the
-character when it is immediately to be followed by a character from a
-roman font. The @var{left_italic_correction} subfield gives the
-amount of space that should be added before the character when it is
-immediately to be preceded by a character from a roman font. The
+@noindent
+There must not be any spaces between these subfields (it has been split
+here into two lines for better legibility only). Missing subfields are
+assumed to be@w{ }0. The subfields are all decimal integers. Since
+there is no associated binary format, these values are not required to
+fit into a variable of type @samp{char} as they are in @code{ditroff}.
+The @var{width} subfield gives the width of the character. The
+@var{height} subfield gives the height of the character (upwards is
+positive); if a character does not extend above the baseline, it should
+be given a zero height, rather than a negative height. The @var{depth}
+subfield gives the depth of the character, that is, the distance below
+the lowest point below the baseline to which the character extends
+(downwards is positive); if a character does not extend below above the
+baseline, it should be given a zero depth, rather than a negative depth.
+The @var{italic_correction} subfield gives the amount of space that
+should be added after the character when it is immediately to be
+followed by a character from a Roman font. The
+@var{left_italic_correction} subfield gives the amount of space that
+should be added before the character when it is immediately to be
+preceded by a character from a Roman font. The
@var{subscript_correction} gives the amount of space that should be
-added after a character before adding a subscript. This should be less
+added after a character before adding a subscript. This should be less
than the italic correction.
A line in the @code{charset} section can also have the format
@@ -5699,58 +8671,122 @@ A line in the @code{charset} section can also have the format
@var{name} "
@end example
+@noindent
This indicates that @var{name} is just another name for the character
mentioned in the preceding line.
+@kindex kernpairs
The word @code{kernpairs} starts the kernpairs section. This contains a
sequence of lines of the form:
-@display
-@var{c1 c2 n}
-@end display
+@example
+@var{c1} @var{c2} @var{n}
+@end example
This means that when character @var{c1} appears next to character
-@var{c2} the space between them should be increased by @var{n}. Most
-entries in kernpairs section will have a negative value for @var{n}.
+@var{c2} the space between them should be increased by@w{ }@var{n}.
+Most entries in kernpairs section will have a negative value for@w{
+}@var{n}.
+
+@c =====================================================================
+@c =====================================================================
-@node Installation, Request Index, File formats, Top
+@node Installation, Request and Escape Index, File formats, Top
@chapter Installation
@cindex installation
+@c XXX
+
+
+@c =====================================================================
+@c =====================================================================
-@node Request Index, Register Index, Installation, Top
-@chapter Request Index
+@node Request and Escape Index, Operator Index, Installation, Top
+@chapter Request and Escape Index
+
+In this index, escapes are listed with a leading backslash (@samp{\}) to
+distinguish them from requests which appear without the leading control
+character (normally either @samp{.} or @samp{'}).
@printindex fn
-@node Register Index, String Index, Request Index, Top
+
+@c =====================================================================
+@c =====================================================================
+
+@node Operator Index, Register Index, Request and Escape Index, Top
+@chapter Operator Index
+
+@printindex op
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Register Index, Macro and String Index, Operator Index, Top
@chapter Register Index
@printindex vr
-@node String Index, Macro Index, Register Index, Top
-@chapter String Index
+@c =====================================================================
+@c =====================================================================
+
+@node Macro and String Index, Glyph Name Index, Register Index, Top
+@chapter Macro and String Index
+
+In this index, strings are listed with the calling escape sequence
+(@samp{\*}) to distinguish them from macros which appear without the
+leading control character (normally either @samp{.} or @samp{'}).
+
+@printindex ma
-@node Macro Index, Program Index, String Index, Top
-@chapter Macro Index
+@c =====================================================================
+@c =====================================================================
+@node Glyph Name Index, Font File Keyword Index, Macro and String Index, Top
+@chapter Glyph Name Index
-@node Program Index, Concept Index, Macro Index, Top
-@chapter Program Index
+A glyph name @code{xx} consisting of exactly two characters can be
+accessed as @samp{\(xx}. Glyph names @code{xxx} of any length can be
+accessed as @samp{\[xxx]}.
+
+@printindex gl
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
+@chapter Font File Keyword Index
+
+@printindex ky
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Program and File Index, Concept Index, Font File Keyword Index, Top
+@chapter Program and File Index
@printindex pg
-@node Concept Index, , Program Index, Top
+@c =====================================================================
+@c =====================================================================
+
+@node Concept Index, , Program and File Index, Top
@chapter Concept Index
@printindex cp
diff --git a/contrib/groff/doc/homepage.ms b/contrib/groff/doc/homepage.ms
new file mode 100644
index 000000000000..b542d73234ee
--- /dev/null
+++ b/contrib/groff/doc/homepage.ms
@@ -0,0 +1,162 @@
+.\" This file gives a small example how a web page could look like if created
+.\" with groff.
+.\"
+.\"
+.\" To make it work with other output devices also, we include tmac.arkup
+.\" directly.
+.mso tmac.arkup
+.\"
+.LP
+.\"
+.\" set a longer line than the default as we have some long ftp addresses
+.\" which groff cannot split
+.nr LL 7i
+.TL
+Home of Groff (GNU Troff).
+.sp 1i
+.LP
+GNU Troff
+.URL (Groff) http://groff.ffii.org/
+\(em a
+.URL GNU http://www.gnu.org/
+project.
+Hosted by
+.URL FFII http://ffii.org/ .
+.br
+.LINE
+.LP
+Groff (GNU Troff) is a document processor which reads plain text mixed with
+formatting commands and produces formatted output.
+.LP
+Groff now supports HTML for the Web.
+Please see
+.URL "Groff Web Tips" "#Web Tips" .
+.sp
+.SH
+Download
+.LP
+.URL Germany "ftp://groff.ffii.org/pub/groff/"
+|
+.URL USA "ftp://ftp.gnu.org/gnu/groff/"
+.LP
+.URL License http://www.gnu.org/copyleft/gpl.html
+|
+.URL "Mailing list" http://ffii.org/mailman/listinfo/groff/
+|
+.URL "Groff for Windows" "http://www.cs.vu.nl/~tmgil/misc/wingroff.html"
+.sp
+User issues lead:
+.MAILTO Ted.Harding@nessie.mcc.ac.uk "Ted Harding"
+.br
+Technical issues lead:
+.MAILTO wl@gnu.org "Werner Lemberg"
+.SH
+README
+.LP
+This is the GNU groff document formatting system.
+The version number is given in the file VERSION.
+.LP
+Included in this release are implementations of troff, pic, eqn, tbl, refer,
+the -man macros and the -ms macros, and drivers for PostScript, TeX dvi
+format, HP LaserJet 4 printers, HTML format (still alpha), and
+typewriter-like devices.
+Also included is a modified version of the Berkeley -me macros, an enhanced
+version of the X11 xditview previewer, and an implementation of the -mm
+macros contributed by
+.MAILTO jh@axis.se "J\(:orgen H\(:agg" .
+.LP
+See the file INSTALL for installation instructions.
+You will require a C++ compiler.
+.LP
+The file NEWS describes recent user-visible changes to groff.
+.LP
+Groff is free software.
+See the file COPYING for copying permission.
+.LP
+The file PROBLEMS describes various problems that have been encountered in
+compiling, installing, and running groff.
+.LP
+For the moment, the documentation assumes that you are already familiar with
+the Unix versions of troff, -man, -ms and the preprocessors.
+.LP
+The most recent released version of groff is always available by anonymous
+ftp from ftp.gnu.org in the directory pub/gnu/groff.
+.LP
+A CVS repository is now available, containing the current development
+version of groff.
+You can access it with the commands:
+.sp
+.RS
+.nf
+\fC
+export CVSROOT=:pserver:anoncvs@anoncvs.ffii.org:/var/cvs
+cvs login
+cvs -z9 co groff
+\fR
+.fi
+.RE
+.sp
+.LP
+(if the prompt for the password appears, just press the enter key).
+After a successful login you no longer need the first two commands; an
+update of a checked out repository should be done with:
+.sp
+.RS
+\fC
+cvs -z9 update -dP
+\fR
+.RE
+.sp
+.LP
+Please read the info pages of cvs for further details.
+.LP
+Alternatively, you can download snapshots (which are updated twice a day)
+from
+.URL here ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz
+or a diff file relative to the latest official groff release as:
+.sp
+.RS
+\fC
+ftp://ftp.ffii.org/pub/groff/devel/groff-[version]-current.diff.gz
+\fR
+.RE
+.sp
+.LP
+Please report bugs using the form in the file BUG-REPORT; the idea of this
+is to make sure that FSF has all the information it needs to fix the bug.
+At the very least, read the BUG-REPORT form and make sure that you supply
+all the information that it asks for.
+Even if you are not sure that something is a bug, report it using
+BUG-REPORT: this will enable us to determine whether it really is a bug or
+not.
+.LP
+Three mailing lists are available:
+.sp
+.RS
+.nf
+\fC
+bug-groff@gnu.org for reporting bugs
+groff@gnu.org for general discussion of groff
+groff-commit@ffii.org a read-only list showing logs of
+ commitments to the CVS repository
+\fR
+.fi
+.RE
+.sp
+.LP
+Note that groff@gnu.org is an alias for groff@ffii.org; you must be
+subscribed to the `groff' and `groff-commit' lists to send mails.
+.LP
+To subscribe, send e-mail to [list]-request@[domain] (example:
+groff-request@ffii.org) with the word `subscribe' in either the
+subject or body of the e-mail (don't include the quotes).
+.LP
+GNU groff was written by
+.MAILTO jjc@jclark.com "James Clark" .
+It is now maintained by
+.MAILTO Ted.Harding@nessie.mcc.ac.uk "Ted Harding"
+and
+.MAILTO wl@gnu.org "Werner Lemberg" .
+.LINE
+.
+.\" EOF
diff --git a/contrib/groff/doc/meref.me b/contrib/groff/doc/meref.me
index 5a62ae11567e..445fcd77656a 100644
--- a/contrib/groff/doc/meref.me
+++ b/contrib/groff/doc/meref.me
@@ -1508,10 +1508,20 @@ End
picture (alternate form).
.TL
.b .GS
+.i x
.DE
Begin
.i gremlin
picture.
+.i X
+can be either
+.b C ,
+.b L ,
+or
+.b R
+to center, left, or right justify the
+whole picture.
+Default is centering the image.
.TL
.b .GE
.DE
diff --git a/contrib/groff/doc/pic.ms b/contrib/groff/doc/pic.ms
index 948617c34b83..8553953a37a3 100644
--- a/contrib/groff/doc/pic.ms
+++ b/contrib/groff/doc/pic.ms
@@ -10,7 +10,7 @@
.\" This document was written for free use and redistribution by
.\" Eric S. Raymond <esr@thyrsus.com> in August 1995.
.\"
-.\" $Id: pic.ms,v 1.2 1999/12/04 08:57:07 wlemb Exp $
+.\" $Id: pic.ms,v 1.1.1.1 2000/02/06 09:39:20 wlemb Exp $
.\"
.\" Set a proper TeX
.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
diff --git a/contrib/groff/doc/texinfo.tex b/contrib/groff/doc/texinfo.tex
new file mode 100644
index 000000000000..faad86b0e247
--- /dev/null
+++ b/contrib/groff/doc/texinfo.tex
@@ -0,0 +1,5999 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2000-05-28.15}
+%
+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
+% Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at
+% your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this texinfo.tex file; see the file COPYING. If not, write
+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA 02111-1307, USA.
+%
+% In other words, you are welcome to use, share and improve this program.
+% You are forbidden to forbid anyone else to use, share and improve
+% what you give them. Help stamp out software-hoarding!
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% ftp://ftp.gnu.org/gnu/texinfo.tex
+% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+% ftp://texinfo.org/tex/texinfo.tex
+% ftp://us.ctan.org/macros/texinfo/texinfo.tex
+% (and all CTAN mirrors, finger ctan@us.ctan.org for a list).
+% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+% The texinfo.tex in any given Texinfo distribution could well be out
+% of date, so if that's what you're using, please check.
+% Texinfo has a small home page at http://texinfo.org/.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
+% The extra runs of TeX get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages. You can get
+% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+% Save some parts of plain tex whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexi=\i
+\let\ptexlbrace=\{
+\let\ptexrbrace=\}
+\let\ptexstar=\*
+\let\ptext=\t
+
+% We never want plain's outer \+ definition in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+\message{Basics,}
+\chardef\other=12
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+\hyphenation{ap-pen-dix}
+\hyphenation{mini-buf-fer mini-buf-fers}
+\hyphenation{eshell}
+\hyphenation{white-space}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen \bindingoffset
+\newdimen \normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\ifx\eTeXversion\undefined
+\def\loggingall{\tracingcommands2 \tracingstats2
+ \tracingpages1 \tracingoutput1 \tracinglostchars1
+ \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+\else
+\def\loggingall{\tracingcommands3 \tracingstats2
+ \tracingpages1 \tracingoutput1 \tracinglostchars1
+ \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+ \tracingscantokens1 \tracingassigns1 \tracingifs1
+ \tracinggroups1 \tracingnesting2
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+\fi
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+ %
+ {%
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \escapechar = `\\ % use backslash in output files.
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingxxx.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 2\baselineskip
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \turnoffactive
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1 \unvbox#1
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg#1{%
+ \let\next = #1%
+ \begingroup
+ \obeylines
+ \futurelet\temp\parseargx
+}
+
+% If the next token is an obeyed space (from an @example environment or
+% the like), remove it and recurse. Otherwise, we're done.
+\def\parseargx{%
+ % \obeyedspace is defined far below, after the definition of \sepspaces.
+ \ifx\obeyedspace\temp
+ \expandafter\parseargdiscardspace
+ \else
+ \expandafter\parseargline
+ \fi
+}
+
+% Remove a single space (as the delimiter token to the macro call).
+{\obeyspaces %
+ \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ %
+ % First remove any @c comment, then any @comment.
+ % Result of each macro is put in \toks0.
+ \argremovec #1\c\relax %
+ \expandafter\argremovecomment \the\toks0 \comment\relax %
+ %
+ % Call the caller's macro, saved as \next in \parsearg.
+ \expandafter\next\expandafter{\the\toks0}%
+ }%
+}
+
+% Since all \c{,omment} does is throw away the argument, we can let TeX
+% do that for us. The \relax here is matched by the \relax in the call
+% in \parseargline; it could be more or less anything, its purpose is
+% just to delimit the argument to the \c.
+\def\argremovec#1\c#2\relax{\toks0 = {#1}}
+\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+
+% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+% @end itemize @c foo
+% will have two active spaces as part of the argument with the
+% `itemize'. Here we remove all active spaces from #1, and assign the
+% result to \toks0.
+%
+% This loses if there are any *other* active characters besides spaces
+% in the argument -- _ ^ +, for example -- since they get expanded.
+% Fortunately, Texinfo does not define any such commands. (If it ever
+% does, the catcode of the characters in questionwill have to be changed
+% here.) But this means we cannot call \removeactivespaces as part of
+% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
+% that \parsearg gets might well have any character at all in it.
+%
+\def\removeactivespaces#1{%
+ \begingroup
+ \ignoreactivespaces
+ \edef\temp{#1}%
+ \global\toks0 = \expandafter{\temp}%
+ \endgroup
+}
+
+% Change the active space to expand to nothing.
+%
+\begingroup
+ \obeyspaces
+ \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
+\endgroup
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+%% These are used to keep @begin/@end levels from running away
+%% Call \inENV within environments (after a \begingroup)
+\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
+\def\ENVcheck{%
+\ifENV\errmessage{Still within an environment; press RETURN to continue}
+\endgroup\fi} % This is not perfect, but it should reduce lossage
+
+% @begin foo is the same as @foo, for now.
+\newhelp\EMsimple{Press RETURN to continue.}
+
+\outer\def\begin{\parsearg\beginxxx}
+
+\def\beginxxx #1{%
+\expandafter\ifx\csname #1\endcsname\relax
+{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
+\csname #1\endcsname\fi}
+
+% @end foo executes the definition of \Efoo.
+%
+\def\end{\parsearg\endxxx}
+\def\endxxx #1{%
+ \removeactivespaces{#1}%
+ \edef\endthing{\the\toks0}%
+ %
+ \expandafter\ifx\csname E\endthing\endcsname\relax
+ \expandafter\ifx\csname \endthing\endcsname\relax
+ % There's no \foo, i.e., no ``environment'' foo.
+ \errhelp = \EMsimple
+ \errmessage{Undefined command `@end \endthing'}%
+ \else
+ \unmatchedenderror\endthing
+ \fi
+ \else
+ % Everything's ok; the right environment has been started.
+ \csname E\endthing\endcsname
+ \fi
+}
+
+% There is an environment #1, but it hasn't been started. Give an error.
+%
+\def\unmatchedenderror#1{%
+ \errhelp = \EMsimple
+ \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+}
+
+% Define the control sequence \E#1 to give an unmatched @end error.
+%
+\def\defineunmatchedend#1{%
+ \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+}
+
+
+% Single-spacing is done by various environments (specifically, in
+% \nonfillstart and \quotations).
+\newskip\singlespaceskip \singlespaceskip = 12.5pt
+\def\singlespace{%
+ % Why was this kern here? It messes up equalizing space above and below
+ % environments. --karl, 6may93
+ %{\advance \baselineskip by -\singlespaceskip
+ %\kern \baselineskip}%
+ \setleading \singlespaceskip
+}
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+ % Definitions to produce actual \{ & \} command in an index.
+ \catcode`\{ = 12 \catcode`\} = 12
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\@ = 0 \catcode`\\ = 12
+ @gdef@lbracecmd[\{]%
+ @gdef@rbracecmd[\}]%
+@endgroup
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown
+% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ptexi
+ \else\ifx\temp\jmacro \j
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=3000 }
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=3000 }
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=3000 }
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+\def\group{\begingroup
+ \ifnum\catcode13=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ %
+ % The \vtop we start below produces a box with normal height and large
+ % depth; thus, TeX puts \baselineskip glue before it, and (when the
+ % next line of text is done) \lineskip glue after it. (See p.82 of
+ % the TeXbook.) Thus, space below is not quite equal to space
+ % above. But it's pretty close.
+ \def\Egroup{%
+ \egroup % End the \vtop.
+ \endgroup % End the \group.
+ }%
+ %
+ \vtop\bgroup
+ % We have to put a strut on the last line in case the @group is in
+ % the midst of an example, rather than completely enclosing it.
+ % Otherwise, the interline space between the last line of the group
+ % and the first line afterwards is too small. But we can't put the
+ % strut in \Egroup, since there it would be on a line by itself.
+ % Hence this just inserts a strut at the beginning of each line.
+ \everypar = {\strut}%
+ %
+ % Since we have a strut on every line, we don't need any of TeX's
+ % normal interline spacing.
+ \offinterlineskip
+ %
+ % OK, but now we have to do something about blank
+ % lines in the input in @example-like environments, which normally
+ % just turn into \lisppar, which will insert no space now that we've
+ % turned off the interline space. Simplest is to make them be an
+ % empty paragraph.
+ \ifx\par\lisppar
+ \edef\par{\leavevmode \par}%
+ %
+ % Reset ^^M's definition to new definition of \par.
+ \obeylines
+ \fi
+ %
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\def\need{\parsearg\needx}
+
+% Old definition--didn't work.
+%\def\needx #1{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\def\needx#1{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break
+
+\let\br = \par
+
+% @dots{} output an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+ \leavevmode
+ \hbox to 1.5em{%
+ \hskip 0pt plus 0.25fil minus 0.25fil
+ .\hss.\hss.%
+ \hskip 0pt plus 0.5fil minus 0.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \leavevmode
+ \hbox to 2em{%
+ \hskip 0pt plus 0.25fil minus 0.25fil
+ .\hss.\hss.\hss.%
+ \hskip 0pt plus 0.5fil minus 0.5fil
+ }%
+ \spacefactor=3000
+}
+
+
+% @page forces the start of a new page
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\def\exdent{\parsearg\exdentyyy}
+\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+
+% This defn is used inside nofill environments such as @example.
+\def\nofillexdent{\parsearg\nofillexdentyyy}
+\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+\leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
+
+\def\inmargin#1{%
+\strut\vadjust{\nobreak\kern-\strutdepth
+ \vtop to \strutdepth{\baselineskip\strutdepth\vss
+ \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+
+%\hbox{{\rm#1}}\hfil\break}}
+
+% @include file insert text of that file as input.
+% Allow normal characters that we make active in the argument (a file name).
+\def\include{\begingroup
+ \catcode`\\=12
+ \catcode`~=12
+ \catcode`^=12
+ \catcode`_=12
+ \catcode`|=12
+ \catcode`<=12
+ \catcode`>=12
+ \catcode`+=12
+ \parsearg\includezzz}
+% Restore active chars for included file.
+\def\includezzz#1{\endgroup\begingroup
+ % Read the included file in a group so nested @include's work.
+ \def\thisfile{#1}%
+ \input\thisfile
+\endgroup}
+
+\def\thisfile{}
+
+% @center line outputs that line, centered
+
+\def\center{\parsearg\centerzzz}
+\def\centerzzz #1{{\advance\hsize by -\leftskip
+\advance\hsize by -\rightskip
+\centerline{#1}}}
+
+% @sp n outputs n lines of vertical space
+
+\def\sp{\parsearg\spxxx}
+\def\spxxx #1{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% We cannot implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\def\paragraphindent{\parsearg\doparagraphindent}
+\def\doparagraphindent#1{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\def\exampleindent{\parsearg\doexampleindent}
+\def\doexampleindent#1{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math means output in math mode.
+% We don't use $'s directly in the definition of \math because control
+% sequences like \math are expanded when the toc file is written. Then,
+% we read the toc file back, the $'s will be normal characters (as they
+% should be, according to the definition of Texinfo). So we must use a
+% control sequence to switch into and out of math mode.
+%
+% This isn't quite enough for @math to work properly in indices, but it
+% seems unlikely it will ever be needed there.
+%
+\let\implicitmath = $
+\def\math#1{\implicitmath #1\implicitmath}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{\implicitmath\ptexbullet\implicitmath}
+\def\minus{\implicitmath-\implicitmath}
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \iflinks
+ \readauxfile
+ \fi % \openindices needs to do some work in any case.
+ \openindices
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc.
+ % Just to be on the safe side, close the input stream before the \input.
+ \openin 1 texinfo.cnf
+ \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
+ \closein1
+ \temp
+ %
+ \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+\ifx\pdfoutput\undefined
+ \pdffalse
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\linkcolor = \relax
+ \let\pdfmakeoutlines = \relax
+\else
+ \pdftrue
+ \pdfoutput = 1
+ \input pdfcolor
+ \def\dopdfimage#1#2#3{%
+ \def\imagewidth{#2}%
+ \def\imageheight{#3}%
+ \ifnum\pdftexversion < 14
+ \pdfimage
+ \else
+ \pdfximage
+ \fi
+ \ifx\empty\imagewidth\else width \imagewidth \fi
+ \ifx\empty\imageheight\else height \imageheight \fi
+ {#1.pdf}%
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
+ \def\pdfmkpgn#1{#1@}
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
+ \def\endlink{\Black\pdfendlink}
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ \def\pdfmakeoutlines{{%
+ \openin 1 \jobname.toc
+ \ifeof 1\else\bgroup
+ \closein 1
+ \indexnofonts
+ \def\tt{}
+ \let\_ = \normalunderscore
+ % Thanh's hack / proper braces in bookmarks
+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+ %
+ \def\chapentry ##1##2##3{}
+ \def\unnumbchapentry ##1##2{}
+ \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
+ \def\unnumbsecentry ##1##2{}
+ \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
+ \def\unnumbsubsecentry ##1##2{}
+ \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
+ \def\unnumbsubsubsecentry ##1##2{}
+ \input \jobname.toc
+ \def\chapentry ##1##2##3{%
+ \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+ \def\unnumbchapentry ##1##2{%
+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+ \def\secentry ##1##2##3##4{%
+ \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
+ \def\unnumbsecentry ##1##2{%
+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+ \def\subsecentry ##1##2##3##4##5{%
+ \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
+ \def\unnumbsubsecentry ##1##2{%
+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+ \def\subsubsecentry ##1##2##3##4##5##6{%
+ \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
+ \def\unnumbsubsubsecentry ##1##2{%
+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+ \input \jobname.toc
+ \egroup\fi
+ }}
+ \def\makelinks #1,{%
+ \def\params{#1}\def\E{END}%
+ \ifx\params\E
+ \let\nextmakelinks=\relax
+ \else
+ \let\nextmakelinks=\makelinks
+ \ifnum\lnkcount>0,\fi
+ \picknum{#1}%
+ \startlink attr{/Border [0 0 0]}
+ goto name{\pdfmkpgn{\the\pgn}}%
+ \linkcolor #1%
+ \advance\lnkcount by 1%
+ \endlink
+ \fi
+ \nextmakelinks
+ }
+ \def\picknum#1{\expandafter\pn#1}
+ \def\pn#1{%
+ \def\p{#1}%
+ \ifx\p\lbrace
+ \let\nextpn=\ppn
+ \else
+ \let\nextpn=\ppnn
+ \def\first{#1}
+ \fi
+ \nextpn
+ }
+ \def\ppn#1{\pgn=#1\gobble}
+ \def\ppnn{\pgn=\first}
+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \fi
+ \nextsp}
+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ \def\pdfurl#1{%
+ \begingroup
+ \normalturnoffactive\def\@{@}%
+ \leavevmode\Red
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ % #1
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
+ \linkcolor #1\endlink}
+ \def\mkpgn#1{#1@}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+% Font-change commands.
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf analogous to plain's \rm, etc.
+\newfam\sffam
+\def\sf{\fam=\sffam \tensf}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this one.
+\def\ttsl{\tenttsl}
+
+% Use Computer Modern fonts at \magstephalf (11pt).
+\newcount\mainmagstep
+\mainmagstep=\magstephalf
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+\ifx\bigger\relax
+\let\mainmagstep=\magstep1
+\setfont\textrm\rmshape{12}{1000}
+\setfont\texttt\ttshape{12}{1000}
+\else
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\fi
+% Instead of cmb10, you many want to use cmbx10.
+% cmbx10 is a prettier font on its own, but cmb10
+% looks better when embedded in a line with cmr10.
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun, etc.
+\setfont\defbf\bxshape{10}{\magstep1} %was 1314
+\setfont\deftt\ttshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for title page:
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
+% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
+% \setfont\ssecsl\slshape{10}{\magstep1}
+% \setfont\ssectt\ttshape{10}{\magstep1}
+% \setfont\ssecsf\sfshape{10}{\magstep1}
+
+%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
+%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
+%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
+%\setfont\ssectt\ttshape{10}{1315}
+%\setfont\ssecsf\sfshape{10}{1315}
+
+%\let\ssecbf=\ssecrm
+
+% Subsection fonts (13.15pt).
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{\magstep1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+% but that is not a standard magnification.
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts, we
+% don't bother to reset \scriptfont and \scriptscriptfont (which would
+% also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
+ \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
+ \textfont\ttfam = \tentt \textfont\sffam = \tensf
+}
+
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this so that font changes will continue to work
+% in math mode, where it is the current \fam that is relevant in most
+% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
+% \tenbf}, for example. By redefining \tenbf, we obviate the need to
+% redefine \bf itself.
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+ \resetmathfonts}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rm #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \resetmathfonts \setleading{11pt}}
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\textfonts
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}
+\setfont\shortcontbf\bxshape{12}{1000}
+\setfont\shortcontsl\slshape{12}{1000}
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\var=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+\let\cite=\smartslanted
+
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+\def\t#1{%
+ {\tt \rawbackslash \frenchspacing #1}%
+ \null
+}
+\let\ttfont=\t
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+ \vbox{\hrule\kern-0.4pt
+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+ \kern-0.4pt\hrule}%
+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \frenchspacing
+ #1%
+ }%
+ \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in \code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+ \catcode`\-=\active
+ \catcode`\_=\active
+ %
+ \global\def\code{\begingroup
+ \catcode`\-=\active \let-\codedash
+ \catcode`\_=\active \let_\codeunder
+ \codex
+ }
+ %
+ % If we end up with any active - characters when handling the index,
+ % just treat them as a normal -.
+ \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
+\def\codex #1{\tclose{#1}\endgroup}
+
+%\let\exp=\tclose %Was temporary
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
+\def\kbdinputstylexxx#1{%
+ \def\arg{#1}%
+ \ifx\arg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\arg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\arg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is kbdinputdistinct. (Too much of a hassle to call the macro,
+% the catcodes are wrong for parsearg to work.)
+\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @url, @env, @command quotes seem unnecessary, so use \code.
+\let\url=\code
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself. First (mandatory) arg is the url. Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @acronym downcases the argument and prints in smallcaps.
+\def\acronym#1{{\smallcaps \lowercase{#1}}}
+
+% @pounds{} is a sterling sign.
+\def\pounds{{\it\$}}
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\def\shorttitlepage{\parsearg\shorttitlepagezzz}
+\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\def\titlepage{\begingroup \parindent=0pt \textfonts
+ \let\subtitlerm=\tenrm
+ \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
+ %
+ \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+ %
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ %
+ % Now you can print the title using @title.
+ \def\title{\parsearg\titlezzz}%
+ \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Now you can put text using @subtitle.
+ \def\subtitle{\parsearg\subtitlezzz}%
+ \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
+ %
+ % @author should come last, but may come many times.
+ \def\author{\parsearg\authorzzz}%
+ \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
+ {\authorfont \leftline{##1}}}%
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \oldpage
+ \let\page = \oldpage
+ \hbox{}}%
+% \def\page{\oldpage \hbox{}}
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+ %
+ \ifpdf \pdfmakepagedesttrue \fi
+ %
+ \HEADINGSon
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make Tex use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\everyheading{\parsearg\everyheadingxxx}
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\everyfooting{\parsearg\everyfootingxxx}
+
+{\catcode`\@=0 %
+
+\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -\baselineskip
+ \global\advance\vsize by -\baselineskip
+}
+
+\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+%
+}% unbind the catcode of @.
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg\settitlezzz}
+\def\settitlezzz #1{\gdef\thistitle{#1}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
+\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
+
+\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
+\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
+
+\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
+ \itemzzz {#1}}
+
+\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
+ \itemzzz {#1}}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemfont{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. Unfortunately
+ % we can't prevent a possible page break at the following
+ % \baselineskip glue.
+ \nobreak
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a table}}
+\def\itemx{\errmessage{@itemx while not in a table}}
+\def\kitem{\errmessage{@kitem while not in a table}}
+\def\kitemx{\errmessage{@kitemx while not in a table}}
+\def\xitem{\errmessage{@xitem while not in a table}}
+\def\xitemx{\errmessage{@xitemx while not in a table}}
+
+% Contains a kludge to get @end[description] to work.
+\def\description{\tablez{\dontindex}{1}{}{}{}{}}
+
+% @table, @ftable, @vtable.
+\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
+{\obeylines\obeyspaces%
+\gdef\tablex #1^^M{%
+\tabley\dontindex#1 \endtabley}}
+
+\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
+{\obeylines\obeyspaces%
+\gdef\ftablex #1^^M{%
+\tabley\fnitemindex#1 \endtabley
+\def\Eftable{\endgraf\afterenvbreak\endgroup}%
+\let\Etable=\relax}}
+
+\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
+{\obeylines\obeyspaces%
+\gdef\vtablex #1^^M{%
+\tabley\vritemindex#1 \endtabley
+\def\Evtable{\endgraf\afterenvbreak\endgroup}%
+\let\Etable=\relax}}
+
+\def\dontindex #1{}
+\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
+\def\vritemindex #1{\doind {vr}{\code{#1}}}%
+
+{\obeyspaces %
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
+\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
+
+\def\tablez #1#2#3#4#5#6{%
+\aboveenvbreak %
+\begingroup %
+\def\Edescription{\Etable}% Necessary kludge.
+\let\itemindex=#1%
+\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+\ifnum 0#4>0 \tableindent=#4\mil \fi %
+\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
+\def\itemfont{#2}%
+\itemmax=\tableindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \tableindent %
+\exdentamount=\tableindent
+\parindent = 0pt
+\parskip = \smallskipamount
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def\Etable{\endgraf\afterenvbreak\endgroup}%
+\let\item = \internalBitem %
+\let\itemx = \internalBitemx %
+\let\kitem = \internalBkitem %
+\let\kitemx = \internalBkitemx %
+\let\xitem = \internalBxitem %
+\let\xitemx = \internalBxitemx %
+}
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\def\itemize{\parsearg\itemizezzz}
+
+\def\itemizezzz #1{%
+ \begingroup % ended by the @end itemize
+ \itemizey {#1}{\Eitemize}
+}
+
+\def\itemizey #1#2{%
+\aboveenvbreak %
+\itemmax=\itemindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \itemindent %
+\exdentamount=\itemindent
+\parindent = 0pt %
+\parskip = \smallskipamount %
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def#2{\endgraf\afterenvbreak\endgroup}%
+\def\itemcontents{#1}%
+\let\item=\itemizeitem}
+
+% Set sfcode to normal for the chars that usually have another value.
+% These are `.?!:;,'
+\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
+ \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\def\enumerate{\parsearg\enumeratezzz}
+\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ \begingroup % ended by the @end enumerate
+ %
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call itemizey, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \itemizey{#1.}\Eenumerate\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+% Definition of @item while inside @itemize.
+
+\def\itemizeitem{%
+\advance\itemno by 1
+{\let\par=\endgraf \smallbreak}%
+\ifhmode \errmessage{In hmode at itemizeitem}\fi
+{\parskip=0in \hskip 0pt
+\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+\vadjust{\penalty 1200}}%
+\flushcr}
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+%
+% For those who want to use more than one line's worth of words in
+% the preamble, break the line within one argument and it
+% will parse correctly, i.e.,
+%
+% @multitable {Column 1 template} {Column 2 template} {Column 3
+% template}
+% Not:
+% @multitable {Column 1 template} {Column 2 template}
+% {Column 3 template}
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab, @multitable or @end multitable do not need to be on their
+% own lines, but it will not hurt if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the part of the @columnfraction before the decimal point, which
+% is presumably either 0 or the empty string (but we don't check, we
+% just throw it away). #2 is the decimal part, which we use as the
+% percent of \hsize for this column.
+\def\pickupwholefraction#1.#2 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
+ % typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% This used to have \hskip1sp. But then the space in a template line is
+% not enough. That is bad. So let's go back to just & until we
+% encounter the problem it was intended to solve again.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{&}
+
+% @multitable ... @end multitable definitions:
+%
+\def\multitable{\parsearg\dotable}
+\def\dotable#1{\bgroup
+ \vskip\parskip
+ \let\item\crcr
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
+ %
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % \everycr will reset column counter, \colcount, at the end of
+ % each line. Every column entry will cause \colcount to advance by one.
+ % The table preamble
+ % looks at the current \colcount to find the correct column width.
+ \everycr{\noalign{%
+ %
+ % \filbreak%% keeps underfull box messages off when table breaks over pages.
+ % Maybe so, but it also creates really weird page breaks when the table
+ % breaks over pages. Wouldn't \vfil be better? Wait until the problem
+ % manifests itself, so it can be fixed for real --karl.
+ \global\colcount=0\relax}}%
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup&\global\advance\colcount by 1\relax
+ \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively marking
+ % characters.
+ \noindent\ignorespaces##\unskip\multistrut}\cr
+}
+
+\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
+% If so, do nothing. If not, give it an appropriate dimension based on
+% current baselineskip.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+%% strut to put in table in case some entry doesn't have descenders,
+%% to keep lines equally spaced
+\let\multistrut = \strut
+\else
+%% FIXME: what is \box0 supposed to be?
+\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
+width0pt\relax} \fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+% Prevent errors for section commands.
+% Used in @ignore and in failing conditionals.
+\def\ignoresections{%
+ \let\chapter=\relax
+ \let\unnumbered=\relax
+ \let\top=\relax
+ \let\unnumberedsec=\relax
+ \let\unnumberedsection=\relax
+ \let\unnumberedsubsec=\relax
+ \let\unnumberedsubsection=\relax
+ \let\unnumberedsubsubsec=\relax
+ \let\unnumberedsubsubsection=\relax
+ \let\section=\relax
+ \let\subsec=\relax
+ \let\subsubsec=\relax
+ \let\subsection=\relax
+ \let\subsubsection=\relax
+ \let\appendix=\relax
+ \let\appendixsec=\relax
+ \let\appendixsection=\relax
+ \let\appendixsubsec=\relax
+ \let\appendixsubsection=\relax
+ \let\appendixsubsubsec=\relax
+ \let\appendixsubsubsection=\relax
+ \let\contents=\relax
+ \let\smallbook=\relax
+ \let\titlepage=\relax
+}
+
+% Used in nested conditionals, where we have to parse the Texinfo source
+% and so want to turn off most commands, in case they are used
+% incorrectly.
+%
+\def\ignoremorecommands{%
+ \let\defcodeindex = \relax
+ \let\defcv = \relax
+ \let\deffn = \relax
+ \let\deffnx = \relax
+ \let\defindex = \relax
+ \let\defivar = \relax
+ \let\defmac = \relax
+ \let\defmethod = \relax
+ \let\defop = \relax
+ \let\defopt = \relax
+ \let\defspec = \relax
+ \let\deftp = \relax
+ \let\deftypefn = \relax
+ \let\deftypefun = \relax
+ \let\deftypeivar = \relax
+ \let\deftypeop = \relax
+ \let\deftypevar = \relax
+ \let\deftypevr = \relax
+ \let\defun = \relax
+ \let\defvar = \relax
+ \let\defvr = \relax
+ \let\ref = \relax
+ \let\xref = \relax
+ \let\printindex = \relax
+ \let\pxref = \relax
+ \let\settitle = \relax
+ \let\setchapternewpage = \relax
+ \let\setchapterstyle = \relax
+ \let\everyheading = \relax
+ \let\evenheading = \relax
+ \let\oddheading = \relax
+ \let\everyfooting = \relax
+ \let\evenfooting = \relax
+ \let\oddfooting = \relax
+ \let\headings = \relax
+ \let\include = \relax
+ \let\lowersections = \relax
+ \let\down = \relax
+ \let\raisesections = \relax
+ \let\up = \relax
+ \let\set = \relax
+ \let\clear = \relax
+ \let\item = \relax
+}
+
+% Ignore @ignore ... @end ignore.
+%
+\def\ignore{\doignore{ignore}}
+
+% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
+%
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\html{\doignore{html}}
+\def\menu{\doignore{menu}}
+\def\direntry{\doignore{direntry}}
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory = \comment
+
+% Ignore text until a line `@end #1'.
+%
+\def\doignore#1{\begingroup
+ % Don't complain about control sequences we have declared \outer.
+ \ignoresections
+ %
+ % Define a command to swallow text until we reach `@end #1'.
+ % This @ is a catcode 12 token (that is the normal catcode of @ in
+ % this texinfo.tex file). We change the catcode of @ below to match.
+ \long\def\doignoretext##1@end #1{\enddoignore}%
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \catcode32 = 10
+ %
+ % Ignore braces, too, so mismatched braces don't cause trouble.
+ \catcode`\{ = 9
+ \catcode`\} = 9
+ %
+ % We must not have @c interpreted as a control sequence.
+ \catcode`\@ = 12
+ %
+ % Make the letter c a comment character so that the rest of the line
+ % will be ignored. This way, the document can have (for example)
+ % @c @end ifinfo
+ % and the @end ifinfo will be properly ignored.
+ % (We've just changed @ to catcode 12.)
+ \catcode`\c = 14
+ %
+ % And now expand that command.
+ \doignoretext
+}
+
+% What we do to finish off ignored text.
+%
+\def\enddoignore{\endgroup\ignorespaces}%
+
+\newif\ifwarnedobs\warnedobsfalse
+\def\obstexwarn{%
+ \ifwarnedobs\relax\else
+ % We need to warn folks that they may have trouble with TeX 3.0.
+ % This uses \immediate\write16 rather than \message to get newlines.
+ \immediate\write16{}
+ \immediate\write16{WARNING: for users of Unix TeX 3.0!}
+ \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
+ \immediate\write16{If you are running another version of TeX, relax.}
+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+ \immediate\write16{ Then upgrade your TeX installation if you can.}
+ \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
+ \immediate\write16{If you are stuck with version 3.0, run the}
+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
+ \immediate\write16{ to use a workaround.}
+ \immediate\write16{}
+ \global\warnedobstrue
+ \fi
+}
+
+% **In TeX 3.0, setting text in \nullfont hangs tex. For a
+% workaround (which requires the file ``dummy.tfm'' to be installed),
+% uncomment the following line:
+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+
+% Ignore text, except that we keep track of conditional commands for
+% purposes of nesting, up to an `@end #1' command.
+%
+\def\nestedignore#1{%
+ \obstexwarn
+ % We must actually expand the ignored text to look for the @end
+ % command, so that nested ignore constructs work. Thus, we put the
+ % text into a \vbox and then do nothing with the result. To minimize
+ % the change of memory overflow, we follow the approach outlined on
+ % page 401 of the TeXbook: make the current font be a dummy font.
+ %
+ \setbox0 = \vbox\bgroup
+ % Don't complain about control sequences we have declared \outer.
+ \ignoresections
+ %
+ % Define `@end #1' to end the box, which will in turn undefine the
+ % @end command again.
+ \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+ %
+ % We are going to be parsing Texinfo commands. Most cause no
+ % trouble when they are used incorrectly, but some commands do
+ % complicated argument parsing or otherwise get confused, so we
+ % undefine them.
+ %
+ % We can't do anything about stray @-signs, unfortunately;
+ % they'll produce `undefined control sequence' errors.
+ \ignoremorecommands
+ %
+ % Set the current font to be \nullfont, a TeX primitive, and define
+ % all the font commands to also use \nullfont. We don't use
+ % dummy.tfm, as suggested in the TeXbook, because not all sites
+ % might have that installed. Therefore, math mode will still
+ % produce output, but that should be an extremely small amount of
+ % stuff compared to the main input.
+ %
+ \nullfont
+ \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
+ \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
+ \let\tensf=\nullfont
+ % Similarly for index fonts (mostly for their use in smallexample).
+ \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
+ \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
+ \let\smallsf=\nullfont
+ %
+ % Don't complain when characters are missing from the fonts.
+ \tracinglostchars = 0
+ %
+ % Don't bother to do space factor calculations.
+ \frenchspacing
+ %
+ % Don't report underfull hboxes.
+ \hbadness = 10000
+ %
+ % Do minimal line-breaking.
+ \pretolerance = 10000
+ %
+ % Do not execute instructions in @tex
+ \def\tex{\doignore{tex}}%
+ % Do not execute macro definitions.
+ % `c' is a comment character, so the word `macro' will get cut off.
+ \def\macro{\doignore{ma}}%
+}
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it. Make sure the catcode of space is correct to avoid
+% losing inside @example, for instance.
+%
+\def\set{\begingroup\catcode` =10
+ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+ \parsearg\setxxx}
+\def\setxxx#1{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ \def\temp{#2}%
+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+ \fi
+ \endgroup
+}
+% Can't use \xdef to pre-expand #2 and save some time, since \temp or
+% \next or other control sequences that we've defined might get us into
+% an infinite loop. Consider `@set foo @cite{bar}'.
+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\def\clear{\parsearg\clearxxx}
+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+
+% @value{foo} gets the text saved in variable foo.
+{
+ \catcode`\_ = \active
+ %
+ % We might end up with active _ or - characters in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}. So \let any
+ % such active characters to their normal equivalents.
+ \gdef\value{\begingroup
+ \catcode`\-=12 \catcode`\_=12
+ \indexbreaks \let_\normalunderscore
+ \valuexxx}
+}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we \let\value to this in \indexdummies). Ones
+% whose names contain - or _ still won't work, but we can't do anything
+% about that. The command has to be fully expandable, since the result
+% winds up in the index file. This means that if the variable's value
+% contains other Texinfo commands, it's almost certain it will fail
+% (although perhaps we could fix that with sufficient work to do a
+% one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+\def\ifset{\parsearg\ifsetxxx}
+\def\ifsetxxx #1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \expandafter\ifsetfail
+ \else
+ \expandafter\ifsetsucceed
+ \fi
+}
+\def\ifsetsucceed{\conditionalsucceed{ifset}}
+\def\ifsetfail{\nestedignore{ifset}}
+\defineunmatchedend{ifset}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+\def\ifclear{\parsearg\ifclearxxx}
+\def\ifclearxxx #1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \expandafter\ifclearsucceed
+ \else
+ \expandafter\ifclearfail
+ \fi
+}
+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
+\def\ifclearfail{\nestedignore{ifclear}}
+\defineunmatchedend{ifclear}
+
+% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
+% following, through the first @end iftex (etc.). Make `@end iftex'
+% (etc.) valid only after an @iftex.
+%
+\def\iftex{\conditionalsucceed{iftex}}
+\def\ifnothtml{\conditionalsucceed{ifnothtml}}
+\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
+\defineunmatchedend{iftex}
+\defineunmatchedend{ifnothtml}
+\defineunmatchedend{ifnotinfo}
+
+% We can't just want to start a group at @iftex (for example) and end it
+% at @end iftex, since then @set commands inside the conditional have no
+% effect (they'd get reverted at the end of the group). So we must
+% define \Eiftex to redefine itself to be its previous value. (We can't
+% just define it to fail again with an ``unmatched end'' error, since
+% the @ifset might be nested.)
+%
+\def\conditionalsucceed#1{%
+ \edef\temp{%
+ % Remember the current value of \E#1.
+ \let\nece{prevE#1} = \nece{E#1}%
+ %
+ % At the `@end #1', redefine \E#1 to be its previous value.
+ \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+ }%
+ \temp
+}
+
+% We need to expand lots of \csname's, but we don't want to expand the
+% control sequences after we've constructed them.
+%
+\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within \newindex.
+{\catcode`\@=11
+\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+
+\def\newcodeindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}
+}
+
+\def\defcodeindex{\parsearg\newcodeindex}
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+% The \closeout helps reduce unnecessary open files; the limit on the
+% Acorn RISC OS is a mere 16 files.
+\def\synindex#1 #2 {%
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\closeout\csname#1indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+ \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+ \noexpand\doindex{#2}}%
+}
+
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+\def\syncodeindex#1 #2 {%
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\closeout\csname#1indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+ \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+ \noexpand\docodeindex{#2}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+\def\indexdummies{%
+\def\ { }%
+% Take care of the plain tex accent commands.
+\def\"{\realbackslash "}%
+\def\`{\realbackslash `}%
+\def\'{\realbackslash '}%
+\def\^{\realbackslash ^}%
+\def\~{\realbackslash ~}%
+\def\={\realbackslash =}%
+\def\b{\realbackslash b}%
+\def\c{\realbackslash c}%
+\def\d{\realbackslash d}%
+\def\u{\realbackslash u}%
+\def\v{\realbackslash v}%
+\def\H{\realbackslash H}%
+% Take care of the plain tex special European modified letters.
+\def\oe{\realbackslash oe}%
+\def\ae{\realbackslash ae}%
+\def\aa{\realbackslash aa}%
+\def\OE{\realbackslash OE}%
+\def\AE{\realbackslash AE}%
+\def\AA{\realbackslash AA}%
+\def\o{\realbackslash o}%
+\def\O{\realbackslash O}%
+\def\l{\realbackslash l}%
+\def\L{\realbackslash L}%
+\def\ss{\realbackslash ss}%
+% Take care of texinfo commands likely to appear in an index entry.
+% (Must be a way to avoid doing expansion at all, and thus not have to
+% laboriously list every single command here.)
+\def\@{@}% will be @@ when we switch to @ as escape char.
+% Need these in case \tex is in effect and \{ is a \delimiter again.
+% But can't use \lbracecmd and \rbracecmd because texindex assumes
+% braces and backslashes are used only as delimiters.
+\let\{ = \mylbrace
+\let\} = \myrbrace
+\def\_{{\realbackslash _}}%
+\def\w{\realbackslash w }%
+\def\bf{\realbackslash bf }%
+%\def\rm{\realbackslash rm }%
+\def\sl{\realbackslash sl }%
+\def\sf{\realbackslash sf}%
+\def\tt{\realbackslash tt}%
+\def\gtr{\realbackslash gtr}%
+\def\less{\realbackslash less}%
+\def\hat{\realbackslash hat}%
+\def\TeX{\realbackslash TeX}%
+\def\dots{\realbackslash dots }%
+\def\result{\realbackslash result}%
+\def\equiv{\realbackslash equiv}%
+\def\expansion{\realbackslash expansion}%
+\def\print{\realbackslash print}%
+\def\error{\realbackslash error}%
+\def\point{\realbackslash point}%
+\def\copyright{\realbackslash copyright}%
+\def\tclose##1{\realbackslash tclose {##1}}%
+\def\code##1{\realbackslash code {##1}}%
+\def\uref##1{\realbackslash uref {##1}}%
+\def\url##1{\realbackslash url {##1}}%
+\def\env##1{\realbackslash env {##1}}%
+\def\command##1{\realbackslash command {##1}}%
+\def\option##1{\realbackslash option {##1}}%
+\def\dotless##1{\realbackslash dotless {##1}}%
+\def\samp##1{\realbackslash samp {##1}}%
+\def\,##1{\realbackslash ,{##1}}%
+\def\t##1{\realbackslash t {##1}}%
+\def\r##1{\realbackslash r {##1}}%
+\def\i##1{\realbackslash i {##1}}%
+\def\b##1{\realbackslash b {##1}}%
+\def\sc##1{\realbackslash sc {##1}}%
+\def\cite##1{\realbackslash cite {##1}}%
+\def\key##1{\realbackslash key {##1}}%
+\def\file##1{\realbackslash file {##1}}%
+\def\var##1{\realbackslash var {##1}}%
+\def\kbd##1{\realbackslash kbd {##1}}%
+\def\dfn##1{\realbackslash dfn {##1}}%
+\def\emph##1{\realbackslash emph {##1}}%
+\def\acronym##1{\realbackslash acronym {##1}}%
+%
+% Handle some cases of @value -- where the variable name does not
+% contain - or _, and the value does not contain any
+% (non-fully-expandable) commands.
+\let\value = \expandablevalue
+%
+\unsepspaces
+% Turn off macro expansion
+\turnoffmacros
+}
+
+% If an index command is used in an @example environment, any spaces
+% therein should become regular spaces in the raw index file, not the
+% expansion of \tie (\\leavevmode \penalty \@M \ ).
+{\obeyspaces
+ \gdef\unsepspaces{\obeyspaces\let =\space}}
+
+% \indexnofonts no-ops all font-change commands.
+% This is used when outputting the strings to sort the index by.
+\def\indexdummyfont#1{#1}
+\def\indexdummytex{TeX}
+\def\indexdummydots{...}
+
+\def\indexnofonts{%
+% Just ignore accents.
+\let\,=\indexdummyfont
+\let\"=\indexdummyfont
+\let\`=\indexdummyfont
+\let\'=\indexdummyfont
+\let\^=\indexdummyfont
+\let\~=\indexdummyfont
+\let\==\indexdummyfont
+\let\b=\indexdummyfont
+\let\c=\indexdummyfont
+\let\d=\indexdummyfont
+\let\u=\indexdummyfont
+\let\v=\indexdummyfont
+\let\H=\indexdummyfont
+\let\dotless=\indexdummyfont
+% Take care of the plain tex special European modified letters.
+\def\oe{oe}%
+\def\ae{ae}%
+\def\aa{aa}%
+\def\OE{OE}%
+\def\AE{AE}%
+\def\AA{AA}%
+\def\o{o}%
+\def\O{O}%
+\def\l{l}%
+\def\L{L}%
+\def\ss{ss}%
+\let\w=\indexdummyfont
+\let\t=\indexdummyfont
+\let\r=\indexdummyfont
+\let\i=\indexdummyfont
+\let\b=\indexdummyfont
+\let\emph=\indexdummyfont
+\let\strong=\indexdummyfont
+\let\cite=\indexdummyfont
+\let\sc=\indexdummyfont
+%Don't no-op \tt, since it isn't a user-level command
+% and is used in the definitions of the active chars like <, >, |...
+%\let\tt=\indexdummyfont
+\let\tclose=\indexdummyfont
+\let\code=\indexdummyfont
+\let\url=\indexdummyfont
+\let\uref=\indexdummyfont
+\let\env=\indexdummyfont
+\let\acronym=\indexdummyfont
+\let\command=\indexdummyfont
+\let\option=\indexdummyfont
+\let\file=\indexdummyfont
+\let\samp=\indexdummyfont
+\let\kbd=\indexdummyfont
+\let\key=\indexdummyfont
+\let\var=\indexdummyfont
+\let\TeX=\indexdummytex
+\let\dots=\indexdummydots
+\def\@{@}%
+}
+
+% To define \realbackslash, we must make \ not be an escape.
+% We must first make another character (@) an escape
+% so we do not become unable to do a definition.
+
+{\catcode`\@=0 \catcode`\\=\other
+ @gdef@realbackslash{\}}
+
+\let\indexbackslash=0 %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% For \ifx comparisons.
+\def\emptymacro{\empty}
+
+% Most index entries go through here, but \dosubind is the general case.
+%
+\def\doind#1#2{\dosubind{#1}{#2}\empty}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% \empty if called from \doind, as we usually are. The main exception
+% is with defuns, which call us directly.
+%
+\def\dosubind#1#2#3{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
+ \fi
+ {%
+ \count255=\lastpenalty
+ {%
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \escapechar=`\\
+ {%
+ \let\folio = 0% We will expand all macros now EXCEPT \folio.
+ \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ \def\thirdarg{#3}%
+ %
+ % If third arg is present, precede it with space in sort key.
+ \ifx\thirdarg\emptymacro
+ \let\subentry = \empty
+ \else
+ \def\subentry{ #3}%
+ \fi
+ %
+ % First process the index entry with all font commands turned
+ % off to get the string to sort by.
+ {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
+ %
+ % Now the real index entry with the fonts.
+ \toks0 = {#2}%
+ %
+ % If third (subentry) arg is present, add it to the index
+ % string. And include a space.
+ \ifx\thirdarg\emptymacro \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ % Set up the complete index entry, with both the sort key
+ % and the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file, texindex reduces to
+ % two when writing the .??s sorted result.
+ \edef\temp{%
+ \write\csname#1indfile\endcsname{%
+ \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+ }%
+ %
+ % If a skip is the last thing on the list now, preserve it
+ % by backing up by \lastskip, doing the \write, then inserting
+ % the skip again. Otherwise, the whatsit generated by the
+ % \write will make \lastskip zero. The result is that sequences
+ % like this:
+ % @end defun
+ % @tindex whatever
+ % @defun ...
+ % will have extra space inserted, because the \medbreak in the
+ % start of the @defun won't see the skip inserted by the @end of
+ % the previous defun.
+ %
+ % But don't do any of this if we're not in vertical mode. We
+ % don't want to do a \vskip and prematurely end a paragraph.
+ %
+ % Avoid page breaks due to these extra skips, too.
+ %
+ \iflinks
+ \ifvmode
+ \skip0 = \lastskip
+ \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
+ \fi
+ %
+ \temp % do the write
+ %
+ %
+ \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+ \fi
+ }%
+ }%
+ \penalty\count255
+ }%
+}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\def\printindex{\parsearg\doprintindex}
+\def\doprintindex#1{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \indexbreaks
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\rawbackslashxx}%
+ \catcode`\\ = 0
+ \escapechar = `\\
+ \begindoublecolumns
+ \input \jobname.#1s
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+ % Some minor font changes for the special characters.
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+ %
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ \penalty -300
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus .5\baselineskip
+ \leftline{\secbf #1}%
+ \vskip .33\baselineskip plus .1\baselineskip
+ %
+ % Do our best not to break after the initial.
+ \nobreak
+}}
+
+% This typesets a paragraph consisting of #1, dot leaders, and then #2
+% flush to the right margin. It is used for index and table of contents
+% entries. The paragraph is indented by \leftskip.
+%
+\def\entry#1#2{\begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing columns.
+ \vskip 0pt plus1pt
+ %
+ % Start a ``paragraph'' for the index entry so the line breaking
+ % parameters we've set above will have an effect.
+ \noindent
+ %
+ % Insert the text of the index entry. TeX will do line-breaking on it.
+ #1%
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+ \def\tempb{#2}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd\ \else%
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ \ #2% The page number ends the paragraph.
+ \fi
+ \fi%
+ \par
+\endgroup}
+
+% Like \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+
+\def\secondary #1#2{
+{\parfillskip=0in \parskip=0in
+\hangindent =1in \hangafter=1
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \advance\vsize by -\ht\partialpage
+ \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+\def\pagesofar{%
+ % Re-output the contents of the output page -- any previous material,
+ % followed by the two boxes we just split, in box0 and box2.
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\pagewidth{\box0\hfil\box2}%
+}
+\def\enddoublecolumns{%
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+\def\balancecolumns{%
+ % Called at the end of the double column material.
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht3>\dimen@
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+% \def\appendixletter{\char\the\appendixno}
+% We do the following for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines this as the name of the chapter.
+% page headings and footings can use it. @section does likewise.
+\def\thischapter{}
+\def\thissection{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raise/lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% Choose a numbered-heading macro
+% #1 is heading level if unmodified by @raisesections or @lowersections
+% #2 is text for heading
+\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \chapterzzz{#2}
+\or
+ \seczzz{#2}
+\or
+ \numberedsubseczzz{#2}
+\or
+ \numberedsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \chapterzzz{#2}
+ \else
+ \numberedsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% like \numhead, but chooses appendix heading levels
+\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \appendixzzz{#2}
+\or
+ \appendixsectionzzz{#2}
+\or
+ \appendixsubseczzz{#2}
+\or
+ \appendixsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \appendixzzz{#2}
+ \else
+ \appendixsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% like \numhead, but chooses numberless heading levels
+\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \unnumberedzzz{#2}
+\or
+ \unnumberedseczzz{#2}
+\or
+ \unnumberedsubseczzz{#2}
+\or
+ \unnumberedsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \unnumberedzzz{#2}
+ \else
+ \unnumberedsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% @chapter, @appendix, @unnumbered.
+\def\thischaptername{No Chapter Title}
+\outer\def\chapter{\parsearg\chapteryyy}
+\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz #1{%
+\secno=0 \subsecno=0 \subsubsecno=0
+\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
+\chapmacro {#1}{\the\chapno}%
+\gdef\thissection{#1}%
+\gdef\thischaptername{#1}%
+% We don't substitute the actual chapter name into \thischapter
+% because we don't want its macros evaluated now.
+\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+ {\the\chapno}}}%
+\temp
+\donoderef
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\def\appendix{\parsearg\appendixyyy}
+\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz #1{%
+\secno=0 \subsecno=0 \subsubsecno=0
+\global\advance \appendixno by 1
+\message{\putwordAppendix\space \appendixletter}%
+\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
+\gdef\thissection{#1}%
+\gdef\thischaptername{#1}%
+\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+ {\putwordAppendix{} \appendixletter}}}%
+\temp
+\appendixnoderef
+\global\let\section = \appendixsec
+\global\let\subsection = \appendixsubsec
+\global\let\subsubsection = \appendixsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\def\centerchap{\parsearg\centerchapyyy}
+\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
+
+% @top is like @unnumbered.
+\outer\def\top{\parsearg\unnumberedyyy}
+
+\outer\def\unnumbered{\parsearg\unnumberedyyy}
+\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz #1{%
+\secno=0 \subsecno=0 \subsubsecno=0
+%
+% This used to be simply \message{#1}, but TeX fully expands the
+% argument to \message. Therefore, if #1 contained @-commands, TeX
+% expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+% expanded @cite (which turns out to cause errors because \cite is meant
+% to be executed, not expanded).
+%
+% Anyway, we don't want the fully-expanded definition of @cite to appear
+% as a result of the \message, we just want `@cite' itself. We use
+% \the<toks register> to achieve this: TeX expands \the<toks> only once,
+% simply yielding the contents of <toks register>. (We also do this for
+% the toc entries.)
+\toks0 = {#1}\message{(\the\toks0)}%
+%
+\unnumbchapmacro {#1}%
+\gdef\thischapter{#1}\gdef\thissection{#1}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
+\temp
+\unnumbnoderef
+\global\let\section = \unnumberedsec
+\global\let\subsection = \unnumberedsubsec
+\global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% Sections.
+\outer\def\numberedsec{\parsearg\secyyy}
+\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
+\def\seczzz #1{%
+\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+ {\the\chapno}{\the\secno}}}%
+\temp
+\donoderef
+\nobreak
+}
+
+\outer\def\appendixsection{\parsearg\appendixsecyyy}
+\outer\def\appendixsec{\parsearg\appendixsecyyy}
+\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz #1{%
+\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+ {\appendixletter}{\the\secno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
+
+\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
+\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz #1{%
+\plainsecheading {#1}\gdef\thissection{#1}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
+
+% Subsections.
+\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
+\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz #1{%
+\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+ {\the\chapno}{\the\secno}{\the\subsecno}}}%
+\temp
+\donoderef
+\nobreak
+}
+
+\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
+\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz #1{%
+\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+ {\appendixletter}{\the\secno}{\the\subsecno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
+
+\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz #1{%
+\plainsubsecheading {#1}\gdef\thissection{#1}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
+ {\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
+
+% Subsubsections.
+\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
+\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz #1{%
+\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+\subsubsecheading {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+\temp
+\donoderef
+\nobreak
+}
+
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
+\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz #1{%
+\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+\subsubsecheading {#1}
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
+
+\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz #1{%
+\plainsubsubsecheading {#1}\gdef\thissection{#1}%
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
+ {\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
+
+% These are variants which are not "outer", so they can appear in @ifinfo.
+% Actually, they should now be obsolete; ordinary section commands should work.
+\def\infotop{\parsearg\unnumberedzzz}
+\def\infounnumbered{\parsearg\unnumberedzzz}
+\def\infounnumberedsec{\parsearg\unnumberedseczzz}
+\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+
+\def\infoappendix{\parsearg\appendixzzz}
+\def\infoappendixsec{\parsearg\appendixseczzz}
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+
+\def\infochapter{\parsearg\chapterzzz}
+\def\infosection{\parsearg\sectionzzz}
+\def\infosubsection{\parsearg\subsectionzzz}
+\def\infosubsubsection{\parsearg\subsubsectionzzz}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+
+\def\majorheading{\parsearg\majorheadingzzz}
+\def\majorheadingzzz #1{%
+{\advance\chapheadingskip by 10pt \chapbreak }%
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+\def\chapheading{\parsearg\chapheadingzzz}
+\def\chapheadingzzz #1{\chapbreak %
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+% @heading, @subheading, @subsubheading.
+\def\heading{\parsearg\plainsecheading}
+\def\subheading{\parsearg\plainsubsecheading}
+\def\subsubheading{\parsearg\plainsubsubsecheading}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+\def\CHAPFplain{
+\global\let\chapmacro=\chfplain
+\global\let\unnumbchapmacro=\unnchfplain
+\global\let\centerchapmacro=\centerchfplain}
+
+% Plain chapter opening.
+% #1 is the text, #2 the chapter number or empty if unnumbered.
+\def\chfplain#1#2{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ \def\chapnum{#2}%
+ \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent = \wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% Plain opening for unnumbered.
+\def\unnchfplain#1{\chfplain{#1}{}}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerchfplain#1{{%
+ \def\centerparametersmaybe{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+ }%
+ \chfplain{#1}{}%
+}}
+
+\CHAPFplain % The default
+
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\nobreak
+}
+
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+}
+
+\def\CHAPFopen{
+\global\let\chapmacro=\chfopen
+\global\let\unnumbchapmacro=\unnchfopen
+\global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles.
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
+\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+
+% Subsection titles.
+\newskip \subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
+\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+
+% Subsubsection titles.
+\let\subsubsecheadingskip = \subsecheadingskip
+\let\subsubsecheadingbreak = \subsecheadingbreak
+\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
+\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+
+
+% Print any size section title.
+%
+% #1 is the section type (sec/subsec/subsubsec), #2 is the section
+% number (maybe empty), #3 the text.
+\def\sectionheading#1#2#3{%
+ {%
+ \expandafter\advance\csname #1headingskip\endcsname by \parskip
+ \csname #1headingbreak\endcsname
+ }%
+ {%
+ % Switch to the right set of fonts.
+ \csname #1fonts\endcsname \rm
+ %
+ % Only insert the separating space if we have a section number.
+ \def\secnum{#2}%
+ \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+ %
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent = \wd0 % zero if no section number
+ \unhbox0 #3}%
+ }%
+ \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc. We supply {\folio} at the end of the
+% argument, which will end up as the last argument to the \...entry macro.
+%
+% We open the .toc file here instead of at @setfilename or any other
+% given time so that @contents can be put in the document anywhere.
+%
+\newif\iftocfileopened
+\def\writetocentry#1{%
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ \iflinks \write\tocfile{#1{\folio}}\fi
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Finish up the main text and prepare to read what we've written
+% to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \unnumbchapmacro{#1}\def\thischapter{}%
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ % We can't do this, because then an actual ^ in a section
+ % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
+ %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \closein 1
+ \input \jobname.toc
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \pdfmakeoutlines
+ \endgroup
+ \lastnegativepageno = \pageno
+ \pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\chapentry = \shortchapentry
+ \let\unnumbchapentry = \shortunnumberedentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\secentry ##1##2##3##4{}
+ \def\unnumbsecentry ##1##2{}
+ \def\subsecentry ##1##2##3##4##5{}
+ \def\unnumbsubsecentry ##1##2{}
+ \def\subsubsecentry ##1##2##3##4##5##6{}
+ \def\unnumbsubsubsecentry ##1##2{}
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \closein 1
+ \input \jobname.toc
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+\ifpdf
+ \pdfcatalog{/PageMode /UseOutlines}%
+\fi
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapter-level things, for both the long and short contents.
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+
+% See comments in \dochapentry re vbox and related settings
+\def\shortchapentry#1#2#3{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
+}
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
+% We could simplify the code here by writing out an \appendixentry
+% command in the toc file for appendices, instead of using \chapentry
+% for both, but it doesn't seem worth it.
+%
+\newdimen\shortappendixwidth
+%
+\def\shortchaplabel#1{%
+ % Compute width of word "Appendix", may change with language.
+ \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
+ \shortappendixwidth = \wd0
+ %
+ % We typeset #1 in a box of constant width, regardless of the text of
+ % #1, so the chapter titles will come out aligned.
+ \setbox0 = \hbox{#1}%
+ \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
+ %
+ % This space should be plenty, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ \advance\dimen0 by 1.1em
+ \hbox to \dimen0{#1\hfil}%
+}
+
+\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
+
+% Sections.
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
+\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
+
+% Subsections.
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
+\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
+
+% And subsubsections.
+\def\subsubsecentry#1#2#3#4#5#6{%
+ \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+
+% This parameter controls the indentation of the various levels.
+\newdimen\tocindent \tocindent = 3pc
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% Final typesetting of a toc entry; we use the same \entry macro as for
+% the index entries, but we want to suppress hyphenation here. (We
+% can't do that in the \entry macro, since index entries might consist
+% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+\def\tocentry#1#2{\begingroup
+ \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
+ % Do not use \turnoffactive in these arguments. Since the toc is
+ % typeset in cmr, so characters such as _ would come out wrong; we
+ % have to do the usual translation tricks.
+ \entry{#1}{#2}%
+\endgroup}
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\let\subsecentryfonts = \textfonts
+\let\subsubsecentryfonts = \textfonts
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+% Furthermore, these definitions must come after we define our fonts.
+\newbox\dblarrowbox \newbox\longdblarrowbox
+\newbox\pushcharbox \newbox\bullbox
+\newbox\equivbox \newbox\errorbox
+
+%{\tentt
+%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
+%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
+%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
+% Adapted from the manmac format (p.420 of TeXbook)
+%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
+% depth .1ex\hfil}
+%}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% Adapted from the TeXbook's \boxit.
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+
+\global\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+
+% The @error{} command.
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\def\tex{\begingroup
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+ \catcode `\%=14
+ \catcode 43=12 % plus
+ \catcode`\"=12
+ \catcode`\==12
+ \catcode`\|=12
+ \catcode`\<=12
+ \catcode`\>=12
+ \escapechar=`\\
+ %
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\*=\ptexstar
+ \let\t=\ptext
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+\let\Etex=\endgroup}
+
+% Define @lisp ... @endlisp.
+% @lisp does a \begingroup so it can rebind things,
+% including the definition of @endlisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% Make each space character in the input produce a normal interword
+% space in the output. Don't allow a line break at this space, as this
+% is used only in environments like @example, where each line of input
+% should produce a line of output anyway.
+%
+{\obeyspaces %
+\gdef\sepspaces{\obeyspaces\let =\tie}}
+
+% Define \obeyedspace to be our active space, whatever it is. This is
+% for use in \parsearg.
+{\sepspaces%
+\global\let\obeyedspace= }
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip
+%
+\def\aboveenvbreak{{\advance\envskipamount by \parskip
+\endgraf \ifdim\lastskip<\envskipamount
+\removelastskip \penalty-50 \vskip\envskipamount \fi}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\long\def\cartouche{%
+\begingroup
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt %we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+% side, and for 6pt waste from
+% each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing=\comment
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \hsize=\cartinner
+ \kern3pt
+ \begingroup
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+\def\Ecartouche{%
+ \endgroup
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+\endgroup
+}}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\def\nonfillstart{%
+ \aboveenvbreak
+ \inENV % This group ends at the end of the body
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \singlespace
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ \parindent = 0pt
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ % @cartouche defines \nonarrowing to inhibit narrowing
+ % at next level down.
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \let\exdent=\nofillexdent
+ \let\nonarrowing=\relax
+ \fi
+}
+
+% Define the \E... control sequence only if we are inside the particular
+% environment, so the error checking in \end will work.
+%
+% To end an @example-like environment, we first end the paragraph (via
+% \afterenvbreak's vertical glue), and then the group. That way we keep
+% the zero \parskip that the environments set -- \parskip glue will be
+% inserted at the beginning of the next paragraph in the document, after
+% the environment.
+%
+\def\nonfillfinish{\afterenvbreak\endgroup}
+
+% @lisp: indented, narrowed, typewriter font.
+\def\lisp{\begingroup
+ \nonfillstart
+ \let\Elisp = \nonfillfinish
+ \tt
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+
+% @example: Same as @lisp.
+\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
+
+% @small... is usually equivalent to the non-small (@smallbook
+% redefines). We must call \example (or whatever) last in the
+% definition, since it reads the return following the @example (or
+% whatever) command.
+%
+% This actually allows (for example) @end display inside an
+% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
+%
+\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
+\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
+\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
+\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
+
+% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
+% Originally contributed by Pavel@xerox.
+\def\smalllispx{\begingroup
+ \def\Esmalllisp{\nonfillfinish\endgroup}%
+ \def\Esmallexample{\nonfillfinish\endgroup}%
+ \smallfonts
+ \lisp
+}
+
+% @display: same as @lisp except keep current font.
+%
+\def\display{\begingroup
+ \nonfillstart
+ \let\Edisplay = \nonfillfinish
+ \gobble
+}
+
+% @smalldisplay (when @smallbook): @display plus smaller fonts.
+%
+\def\smalldisplayx{\begingroup
+ \def\Esmalldisplay{\nonfillfinish\endgroup}%
+ \smallfonts \rm
+ \display
+}
+
+% @format: same as @display except don't narrow margins.
+%
+\def\format{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eformat = \nonfillfinish
+ \gobble
+}
+
+% @smallformat (when @smallbook): @format plus smaller fonts.
+%
+\def\smallformatx{\begingroup
+ \def\Esmallformat{\nonfillfinish\endgroup}%
+ \smallfonts \rm
+ \format
+}
+
+% @flushleft (same as @format).
+%
+\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
+
+% @flushright.
+%
+\def\flushright{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eflushright = \nonfillfinish
+ \advance\leftskip by 0pt plus 1fill
+ \gobble
+}
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins.
+%
+\def\quotation{%
+ \begingroup\inENV %This group ends at the end of the @quotation body
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \singlespace
+ \parindent=0pt
+ % We have retained a nonzero parskip for the environment, since we're
+ % doing normal filling. So to avoid extra space below the environment...
+ \def\Equotation{\parskip = 0pt \nonfillfinish}%
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \let\nonarrowing = \relax
+ \fi
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+% Allow user to change definition object font (\df) internally
+\def\setdeffont #1 {\csname DEF#1\endcsname}
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deftypemargin \deftypemargin=12pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+\newcount\parencount
+% define \functionparens, which makes ( and ) and & do special things.
+% \functionparens affects the group it is contained in.
+\def\activeparens{%
+\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
+\catcode`\[=\active \catcode`\]=\active}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+\global\let(=\lparen \global\let)=\rparen
+\global\let[=\lbrack \global\let]=\rbrack
+
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+% This is used to turn on special parens
+% but make & act ordinary (given that it's active).
+\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+
+% Definitions of (, ) and & used in args for functions.
+% This is the definition of ( outside of all parentheses.
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
+ \global\advance\parencount by 1
+}
+%
+% This is the definition of ( when already inside a level of parens.
+\gdef\opnested{\char`\(\global\advance\parencount by 1 }
+%
+\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+ % also in that case restore the outer-level definition of (.
+ \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+ \global\advance \parencount by -1 }
+% If we encounter &foo, then turn on ()-hacking afterwards
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+%
+\gdef\normalparens{\boldbrax\let&=\ampnr}
+} % End of definition inside \activeparens
+%% These parens (in \boldbrax) actually are a little bolder than the
+%% contained text. This is especially needed for [ and ]
+\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
+\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
+\let\ampnr = \&
+\def\lbrb{{\bf\char`\[}}
+\def\rbrb{{\bf\char`\]}}
+
+% Active &'s sneak into the index arguments, so make sure it's defined.
+{
+ \catcode`& = 13
+ \global\let& = \ampnr
+}
+
+% First, defname, which formats the header line itself.
+% #1 should be the function name.
+% #2 should be the type of definition, such as "Function".
+
+\def\defname #1#2{%
+% Get the values of \leftskip and \rightskip as they were
+% outside the @def...
+\dimen2=\leftskip
+\advance\dimen2 by -\defbodyindent
+\noindent
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
+\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
+\parshape 2 0in \dimen0 \defargsindent \dimen1
+% Now output arg 2 ("Function" or some such)
+% ending at \deftypemargin from the right margin,
+% but stuck inside a box of width 0 so it does not interfere with linebreaking
+{% Adjust \hsize to exclude the ambient margins,
+% so that \rightline will obey them.
+\advance \hsize by -\dimen2
+\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
+% Make all lines underfull and no complaints:
+\tolerance=10000 \hbadness=10000
+\advance\leftskip by -\defbodyindent
+\exdentamount=\defbodyindent
+{\df #1}\enskip % Generate function name
+}
+
+% Actually process the body of a definition
+% #1 should be the terminating control sequence, such as \Edefun.
+% #2 should be the "another name" control sequence, such as \defunx.
+% #3 should be the control sequence that actually processes the header,
+% such as \defunheader.
+
+\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup %
+\catcode 61=\active % 61 is `='
+\obeylines\activeparens\spacesplit#3}
+
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by the space, is the class name.
+%
+\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
+
+% Used for @deftypemethod and @deftypeivar.
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by a space, is the class name.
+% #5 is the method's return type.
+%
+\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
+ \medbreak
+ \def#1{\endgraf\endgroup\medbreak}%
+ \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+ \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
+
+% Used for @deftypeop. The change from \deftypemethparsebody is an
+% extra argument at the beginning which is the `category', instead of it
+% being the hardwired string `Method' or `Instance Variable'. We have
+% to account for this both in the \...x definition and in parsing the
+% input at hand. Thus also need a control sequence (passed as #5) for
+% the \E... definition to assign the category name to.
+%
+\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
+ \medbreak
+ \def#1{\endgraf\endgroup\medbreak}%
+ \def#2##1 ##2 ##3 {%
+ \def#4{##1}%
+ \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+ \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
+
+\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
+
+% These parsing functions are similar to the preceding ones
+% except that they do not make parens into active characters.
+% These are used for "variables" since they have no arguments.
+
+\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylines\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup %
+\catcode 61=\active %
+\obeylines\spacesplit#3}
+
+% This is used for \def{tp,vr}parsebody. It could probably be used for
+% some of the others, too, with some judicious conditionals.
+%
+\def\parsebodycommon#1#2#3{%
+ \begingroup\inENV %
+ \medbreak %
+ % Define the end token that this defining construct specifies
+ % so that it will exit this group.
+ \def#1{\endgraf\endgroup\medbreak}%
+ \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+ \begingroup\obeylines
+}
+
+\def\defvrparsebody#1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \spacesplit{#3{#4}}%
+}
+
+% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
+% type is just `struct', because we lose the braces in `{struct
+% termios}' when \spacesplit reads its undelimited argument. Sigh.
+% \let\deftpparsebody=\defvrparsebody
+%
+% So, to get around this, we put \empty in with the type name. That
+% way, TeX won't find exactly `{...}' as an undelimited argument, and
+% won't strip off the braces.
+%
+\def\deftpparsebody #1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+}
+
+% Fine, but then we have to eventually remove the \empty *and* the
+% braces (if any). That's what this does.
+%
+\def\removeemptybraces\empty#1\relax{#1}
+
+% After \spacesplit has done its work, this is called -- #1 is the final
+% thing to call, #2 the type name (which starts with \empty), and #3
+% (which might be empty) the arguments.
+%
+\def\parsetpheaderline#1#2#3{%
+ #1{\removeemptybraces#2\relax}{#3}%
+}%
+
+\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylines\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\spacesplit{#3{#5}}}
+
+% Split up #2 at the first space token.
+% call #1 with two arguments:
+% the first is all of #2 before the space token,
+% the second is all of #2 after that space token.
+% If #2 contains no space token, all of it is passed as the first arg
+% and the second is passed as empty.
+
+{\obeylines
+\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
+\ifx\relax #3%
+#1{#2}{}\else #1{#2}{#3#4}\fi}}
+
+% So much for the things common to all kinds of definitions.
+
+% Define @defun.
+
+% First, define the processing that is wanted for arguments of \defun
+% Use this to expand the args and terminate the paragraph they make up
+
+\def\defunargs#1{\functionparens \sl
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+% Set the font temporarily and use \font in case \setfont made \tensl a macro.
+{\tensl\hyphenchar\font=0}%
+#1%
+{\tensl\hyphenchar\font=45}%
+\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\nobreak\vskip -\parskip\nobreak
+}
+
+\def\deftypefunargs #1{%
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+% Use \boldbraxnoamp, not \functionparens, so that & is not special.
+\boldbraxnoamp
+\tclose{#1}% avoid \code because of side effects on active chars
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\nobreak\vskip -\parskip\nobreak
+}
+
+% Do complete processing of one @defun or @defunx line already parsed.
+
+% @deffn Command forward-char nchars
+
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+
+\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defun == @deffn Function
+
+\def\defun{\defparsebody\Edefun\defunx\defunheader}
+
+\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{\putwordDeffunc}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefun int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+
+% #1 is the data type. #2 is the name and args.
+\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
+% #1 is the data type, #2 the name, #3 the args.
+\def\deftypefunheaderx #1#2 #3\relax{%
+\doind {fn}{\code{#2}}% Make entry in function index
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
+\deftypefunargs {#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+
+% \defheaderxcond#1\relax$$$
+% puts #1 in @code, followed by a space, but does nothing if #1 is null.
+\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
+
+% #1 is the classification. #2 is the data type. #3 is the name and args.
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+% #1 is the classification, #2 the data type, #3 the name, #4 the args.
+\def\deftypefnheaderx #1#2#3 #4\relax{%
+\doind {fn}{\code{#3}}% Make entry in function index
+\begingroup
+\normalparens % notably, turn off `&' magic, which prevents
+% at least some C++ text from working
+\defname {\defheaderxcond#2\relax$$$#3}{#1}%
+\deftypefunargs {#4}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defmac == @deffn Macro
+
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+
+\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{\putwordDefmac}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defspec == @deffn Special Form
+
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+
+\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{\putwordDefspec}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defop CATEGORY CLASS OPERATION ARG...
+%
+\def\defop #1 {\def\defoptype{#1}%
+\defopparsebody\Edefop\defopx\defopheader\defoptype}
+%
+\def\defopheader#1#2#3{%
+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
+\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
+\defunargs {#3}\endgroup %
+}
+
+% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
+%
+\def\deftypeop #1 {\def\deftypeopcategory{#1}%
+ \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
+ \deftypeopcategory}
+%
+% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
+\def\deftypeopheader#1#2#3#4{%
+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+ \begingroup
+ \defname{\defheaderxcond#2\relax$$$#3}
+ {\deftypeopcategory\ \putwordon\ \code{#1}}%
+ \deftypefunargs{#4}%
+ \endgroup
+}
+
+% @deftypemethod CLASS TYPE METHOD ARG...
+%
+\def\deftypemethod{%
+ \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
+%
+% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
+\def\deftypemethodheader#1#2#3#4{%
+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+ \begingroup
+ \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
+ \deftypefunargs{#4}%
+ \endgroup
+}
+
+% @deftypeivar CLASS TYPE VARNAME
+%
+\def\deftypeivar{%
+ \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
+%
+% #1 is the class name, #2 the data type, #3 the variable name.
+\def\deftypeivarheader#1#2#3{%
+ \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
+ \begingroup
+ \defname{\defheaderxcond#2\relax$$$#3}
+ {\putwordInstanceVariableof\ \code{#1}}%
+ \defvarargs{#3}%
+ \endgroup
+}
+
+% @defmethod == @defop Method
+%
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+%
+% #1 is the class name, #2 the method name, #3 the args.
+\def\defmethodheader#1#2#3{%
+ \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
+ \begingroup
+ \defname{#2}{\putwordMethodon\ \code{#1}}%
+ \defunargs{#3}%
+ \endgroup
+}
+
+% @defcv {Class Option} foo-class foo-flag
+
+\def\defcv #1 {\def\defcvtype{#1}%
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
+
+\def\defcvarheader #1#2#3{%
+\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
+\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
+\defvarargs {#3}\endgroup %
+}
+
+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
+%
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+%
+\def\defivarheader#1#2#3{%
+ \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
+ \begingroup
+ \defname{#2}{\putwordInstanceVariableof\ #1}%
+ \defvarargs{#3}%
+ \endgroup
+}
+
+% @defvar
+% First, define the processing that is wanted for arguments of @defvar.
+% This is actually simple: just print them in roman.
+% This must expand the args and terminate the paragraph they make up
+\def\defvarargs #1{\normalparens #1%
+\interlinepenalty=10000
+\endgraf\nobreak\vskip -\parskip\nobreak}
+
+% @defvr Counter foo-count
+
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
+
+\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+
+% @defvar == @defvr Variable
+
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+
+\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{\putwordDefvar}%
+\defvarargs {#2}\endgroup %
+}
+
+% @defopt == @defvr {User Option}
+
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
+
+\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{\putwordDefopt}%
+\defvarargs {#2}\endgroup %
+}
+
+% @deftypevar int foobar
+
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+% #1 is the data type. #2 is the name, perhaps followed by text that
+% is actually part of the data type, which should not be put into the index.
+\def\deftypevarheader #1#2{%
+\dovarind#2 \relax% Make entry in variables index
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
+\interlinepenalty=10000
+\endgraf\nobreak\vskip -\parskip\nobreak
+\endgroup}
+\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
+
+% @deftypevr {Global Flag} int enable
+
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
+\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
+\interlinepenalty=10000
+\endgraf\nobreak\vskip -\parskip\nobreak
+\endgroup}
+
+% Now define @deftp
+% Args are printed in bold, a slight difference from @defvar.
+
+\def\deftpargs #1{\bf \defvarargs{#1}}
+
+% @deftp Class window height width ...
+
+\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+
+\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
+\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+
+% These definitions are used if you use @defunx (etc.)
+% anywhere other than immediately after a @defun or @defunx.
+%
+\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
+\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
+\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
+\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
+\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
+\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+\def\defopx#1 {\errmessage{@defopx in invalid context}}
+\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
+\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
+\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
+\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
+\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
+\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
+\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
+\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
+\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
+\def\defunx#1 {\errmessage{@defunx in invalid context}}
+\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
+\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+ \newwrite\macscribble
+ \def\scanmacro#1{%
+ \begingroup \newlinechar`\^^M
+ % Undo catcode changes of \startcontents and \doprintindex
+ \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+ % Append \endinput to make sure that TeX does not see the ending newline.
+ \toks0={#1\endinput}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \let\xeatspaces\eatspaces
+ \input \jobname.tmp
+ \endgroup
+}
+\else
+\def\scanmacro#1{%
+\begingroup \newlinechar`\^^M
+% Undo catcode changes of \startcontents and \doprintindex
+\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
+\fi
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+\def\macrolist{} % List of all defined macros in the form
+ % \do\macro1\do\macro2...
+
+% Utility routines.
+% Thisdoes \let #1 = #2, except with \csnames.
+\def\cslet#1#2{%
+\expandafter\expandafter
+\expandafter\let
+\expandafter\expandafter
+\csname#1\endcsname
+\csname#2\endcsname}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=12\catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\macrobodyctxt{%
+ \catcode`\~=12
+ \catcode`\^=12
+ \catcode`\_=12
+ \catcode`\|=12
+ \catcode`\<=12
+ \catcode`\>=12
+ \catcode`\+=12
+ \catcode`\{=12
+ \catcode`\}=12
+ \catcode`\@=12
+ \catcode`\^^M=12
+ \usembodybackslash}
+
+\def\macroargctxt{%
+ \catcode`\~=12
+ \catcode`\^=12
+ \catcode`\_=12
+ \catcode`\|=12
+ \catcode`\<=12
+ \catcode`\>=12
+ \catcode`\+=12
+ \catcode`\@=12
+ \catcode`\\=12}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0%
+ \else
+ \expandafter\parsemargdef \argl;%
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{The name \the\macname\space is reserved}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ % Add the macroname to \macrolist
+ \toks0 = \expandafter{\macrolist\do}%
+ \xdef\macrolist{\the\toks0
+ \expandafter\noexpand\csname\the\macname\endcsname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\def\unmacro{\parsearg\unmacroxxx}
+\def\unmacroxxx#1{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist
+ \begingroup
+ \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
+ \def\do##1{%
+ \def\tempb{##1}%
+ \ifx\tempa\tempb
+ % remove this
+ \else
+ \toks0 = \expandafter{\newmacrolist\do}%
+ \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
+ \fi}%
+ \def\newmacrolist{}%
+ % Execute macro list to define \newmacrolist
+ \macrolist
+ \global\let\macrolist\newmacrolist
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list. Set up \paramno and \paramlist
+% so \defmacro knows what to do. Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX: let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1%
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifrecursive
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\temp}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup\noexpand\scanmacro{\temp}}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \fi
+ \else
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \fi
+ \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {. If so it reads up to the closing }, if not, it reads the whole
+% line. Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \next}
+
+% We mant to disable all macros during \shipout so that they are not
+% expanded by \write.
+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+ \edef\next{\macrolist}\expandafter\endgroup\next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Just make them active and then expand them all to nothing.
+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{\ignoreactivespaces
+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
+ \expandafter\noexpand\csname#2\endcsname}%
+\expandafter\endgroup\next}
+
+
+\message{cross references,}
+% @xref etc.
+
+\newwrite\auxfile
+
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's job is to define \lastnode.
+\def\node{\ENVcheck\parsearg\nodezzz}
+\def\nodezzz#1{\nodexxx [#1,]}
+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+\let\nwnode=\node
+\let\lastnode=\relax
+
+% The sectioning commands (@chapter, etc.) call these.
+\def\donoderef{%
+ \ifx\lastnode\relax\else
+ \expandafter\expandafter\expandafter\setref{\lastnode}%
+ {Ysectionnumberandtype}%
+ \global\let\lastnode=\relax
+ \fi
+}
+\def\unnumbnoderef{%
+ \ifx\lastnode\relax\else
+ \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
+ \global\let\lastnode=\relax
+ \fi
+}
+\def\appendixnoderef{%
+ \ifx\lastnode\relax\else
+ \expandafter\expandafter\expandafter\setref{\lastnode}%
+ {Yappendixletterandtype}%
+ \global\let\lastnode=\relax
+ \fi
+}
+
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
+% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
+% to set \indexdummies so commands such as @code in a section title
+% aren't expanded. It would be nicer not to expand the titles in the
+% first place, but there's so many layers that that is hard to do.
+%
+\def\setref#1#2{{%
+ \indexdummies
+ \pdfmkdest{#1}%
+ \dosetq{#1-title}{Ytitle}%
+ \dosetq{#1-pg}{Ypagenumber}%
+ \dosetq{#1-snt}{#2}%
+}}
+
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ \def\printedmanual{\ignorespaces #5}%
+ \def\printednodename{\ignorespaces #3}%
+ \setbox1=\hbox{\printedmanual}%
+ \setbox0=\hbox{\printednodename}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+ % Use the node name inside the square brackets.
+ \def\printednodename{\ignorespaces #1}%
+ \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1 > 0pt
+ % It is in another manual, so we don't have it.
+ \def\printednodename{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+ \def\printednodename{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printednodename{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+ % insert empty discretionaries after hyphens, which means that it will
+ % not find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens, this
+ % is a loss. Therefore, we give the text of the node name again, so it
+ % is as if TeX is seeing it for the first time.
+ \ifpdf
+ \leavevmode
+ \getfilename{#4}%
+ \ifnum\filenamelength>0
+ \startlink attr{/Border [0 0 0]}%
+ goto file{\the\filename.pdf} name{#1@}%
+ \else
+ \startlink attr{/Border [0 0 0]}%
+ goto name{#1@}%
+ \fi
+ \linkcolor
+ \fi
+ %
+ \ifdim \wd1 > 0pt
+ \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
+ \else
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\normalturnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % [mynode],
+ [\printednodename],\space
+ % page 3
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \fi
+ \endlink
+\endgroup}
+
+% \dosetq is the interface for calls from other macros
+
+% Use \normalturnoffactive so that punctuation chars such as underscore
+% and backslash work in node names. (\turnoffactive doesn't do \.)
+\def\dosetq#1#2{%
+ {\let\folio=0%
+ \normalturnoffactive
+ \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+ \iflinks
+ \next
+ \fi
+ }%
+}
+
+% \internalsetq {foo}{page} expands into
+% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
+% When the aux file is read, ' is the escape character
+
+\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
+
+% Things to be expanded by \internalsetq
+
+\def\Ypagenumber{\folio}
+
+\def\Ytitle{\thissection}
+
+\def\Ynothing{}
+
+\def\Ysectionnumberandtype{%
+\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
+\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
+\else \ifnum \subsubsecno=0 %
+\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
+\else %
+\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
+\fi \fi \fi }
+
+\def\Yappendixletterandtype{%
+\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
+\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
+\else \ifnum \subsubsecno=0 %
+\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
+\else %
+\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
+\fi \fi \fi }
+
+\gdef\xreftie{'tie}
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Non-3.0.
+\else
+ \def\linenumber{\the\inputlineno:\space}
+\fi
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+
+\def\refx#1#2{%
+ \expandafter\ifx\csname X#1\endcsname\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ \message{\linenumber Undefined cross reference `#1'.}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \csname X#1\endcsname
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file.
+%
+\def\xrdef#1{\begingroup
+ % Reenable \ as an escape while reading the second argument.
+ \catcode`\\ = 0
+ \afterassignment\endgroup
+ \expandafter\gdef\csname X#1\endcsname
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+\def\readauxfile{\begingroup
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ \catcode`\@=\other
+ \catcode`\^=\other
+ % It was suggested to define this as 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ % Make the characters 128-255 be printing characters
+ {%
+ \count 1=128
+ \def\loop{%
+ \catcode\count 1=\other
+ \advance\count 1 by 1
+ \ifnum \count 1<256 \loop \fi
+ }%
+ }%
+ % The aux file uses ' as the escape (for now).
+ % Turn off \ as an escape so we do not lose on
+ % entries which were dumped with control sequences in their names.
+ % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+ % Reference to such entries still does not work the way one would wish,
+ % but at least they do not bomb out when the aux file is read in.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\%=\other
+ \catcode`\'=0
+ \catcode`\\=\other
+ %
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \closein 1
+ \input \jobname.aux
+ \global\havexrefstrue
+ \global\warnedobstrue
+ \fi
+ % Open the new aux file. TeX will close it automatically at exit.
+ \openout\auxfile=\jobname.aux
+\endgroup}
+
+
+% Footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
+
+\let\ptexfootnote=\footnote
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \footnotezzz
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset and anything else that uses
+% \parseargline fail inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\long\gdef\footnotezzz{\insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Hang the footnote text off the number.
+ \hang
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ \futurelet\next\fo@t
+}
+\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+ \else\let\next\f@t\fi \next}
+\def\f@@t{\bgroup\aftergroup\@foot\let\next}
+\def\f@t#1{#1\@foot}
+\def\@foot{\strut\par\egroup}
+
+}%end \catcode `\@=11
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ \closein 1
+ % Do not bother showing banner with post-v2.7 epsf.tex (available in
+ % doc/epsf.tex until it shows up on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\undefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is just the usual extra ignored arg for parsing this stuff.
+\def\imagexxx#1,#2,#3,#4\finish{%
+ \ifpdf
+ \centerline{\dopdfimage{#1}{#2}{#3}}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ % If the image is by itself, center it.
+ \ifvmode
+ \nobreak\bigskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \centerline{\epsfbox{#1.eps}}%
+ \bigbreak
+ \else
+ % In the middle of a paragraph, no extra space.
+ \epsfbox{#1.eps}%
+ \fi
+ \endgroup
+ \fi
+}
+
+
+\message{localization,}
+% and i18n.
+
+% @documentlanguage is usually given very early, just after
+% @setfilename. If done too late, it may not override everything
+% properly. Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\def\documentlanguage{\parsearg\dodocumentlanguage}
+\def\dodocumentlanguage#1{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \let\temp = \relax
+ \else
+ \def\temp{\input txi-#1.tex }%
+ \fi
+ \temp
+ \endgroup
+}
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? In the current directory
+should work if nowhere else does.}
+
+
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can
+% set \parskip and call \setleading for \baselineskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{13.2pt}%
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \setleading{12pt}%
+ %
+ \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \deftypemargin = 0pt
+ \defbodyindent = .5cm
+ %
+ \let\smalldisplay = \smalldisplayx
+ \let\smallexample = \smalllispx
+ \let\smallformat = \smallformatx
+ \let\smalllisp = \smalllispx
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \setleading{12pt}%
+ \parskip = 3pt plus 2pt minus 1pt
+ %
+ \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
+% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
+\def\afourlatex{{\globaldefs = 1
+ \setleading{13.6pt}%
+ %
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+ %
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on European A4 paper in wide format.
+\def\afourwide{%
+ \afourpaper
+ \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
+ %
+ \globaldefs = 0
+}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\def\pagesizes{\parsearg\pagesizesxxx}
+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{13.2pt}%
+ %
+ \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}
+
+% This macro is used to make a character print one way in ttfont
+% where it can probably just be output, and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}
+%\catcode 27=\active
+%\def^^[{$\diamondsuit$}
+
+% Set up an active definition for =, but don't enable it most of the time.
+{\catcode`\==\active
+\global\def={{\tt \char 61}}}
+
+\catcode`+=\active
+\catcode`\_=\active
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+\catcode`\@=0
+
+% \rawbackslashxx output one backslash character in current font
+\global\chardef\rawbackslashxx=`\\
+%{\catcode`\\=\other
+%@gdef@rawbackslashxx{\}}
+
+% \rawbackslash redefines \ as input to do \rawbackslashxx.
+{\catcode`\\=\active
+@gdef@rawbackslash{@let\=@rawbackslashxx }}
+
+% \normalbackslash outputs one backslash in fixed width font.
+\def\normalbackslash{{\tt\rawbackslashxx}}
+
+% \catcode 17=0 % Define control-q
+\catcode`\\=\active
+
+% Used sometimes to turn off (effectively) the active characters
+% even after parsing them.
+@def@turnoffactive{@let"=@normaldoublequote
+@let\=@realbackslash
+@let~=@normaltilde
+@let^=@normalcaret
+@let_=@normalunderscore
+@let|=@normalverticalbar
+@let<=@normalless
+@let>=@normalgreater
+@let+=@normalplus
+@let$=@normaldollar}
+
+@def@normalturnoffactive{@let"=@normaldoublequote
+@let\=@normalbackslash
+@let~=@normaltilde
+@let^=@normalcaret
+@let_=@normalunderscore
+@let|=@normalverticalbar
+@let<=@normalless
+@let>=@normalgreater
+@let+=@normalplus
+@let$=@normaldollar}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\{ in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also back turn on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @normalbackslash @fi
+ @catcode`+=@active
+ @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+@c Set initial fonts.
+@textfonts
+@rm
+
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
diff --git a/contrib/groff/eqn/Makefile.sub b/contrib/groff/eqn/Makefile.sub
index 692bf42e4ef4..7b43a6e508c8 100644
--- a/contrib/groff/eqn/Makefile.sub
+++ b/contrib/groff/eqn/Makefile.sub
@@ -1,14 +1,44 @@
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=main.cc lex.cc box.cc limit.cc list.cc over.cc text.cc \
- script.cc mark.cc other.cc delim.cc sqrt.cc pile.cc special.cc
-HDRS=box.h eqn.h pbox.h
-GRAM=eqn.y
-YTABC=eqn.cc
-YTABH=eqn.tab.h
+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
@@ -21,7 +51,7 @@ neqn: neqn.sh
install_data: neqn
-rm -f $(bindir)/$(NAMEPREFIX)neqn
- $(INSTALL_PROGRAM) neqn $(bindir)/$(NAMEPREFIX)neqn
+ $(INSTALL_SCRIPT) neqn $(bindir)/$(NAMEPREFIX)neqn
uninstall_sub:
-rm -f $(bindir)/$(NAMEPREFIX)neqn
diff --git a/contrib/groff/eqn/box.cc b/contrib/groff/eqn/box.cc
index e0ae1c0b60de..4e61b5dc3b74 100644
--- a/contrib/groff/eqn/box.cc
+++ b/contrib/groff/eqn/box.cc
@@ -264,7 +264,7 @@ void set_script_size()
int box::next_uid = 0;
-box::box() : uid(next_uid++), spacing_type(ORDINARY_TYPE)
+box::box() : spacing_type(ORDINARY_TYPE), uid(next_uid++)
{
}
diff --git a/contrib/groff/eqn/eqn.man b/contrib/groff/eqn/eqn.man
index 8c67b911e5ae..e194ecf48c4c 100644
--- a/contrib/groff/eqn/eqn.man
+++ b/contrib/groff/eqn/eqn.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -31,34 +31,30 @@ the original English.
.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
-[
-.B \-rvCNR
-]
-[
-.BI \-d cc
-]
-[
-.BI \-T name
-]
-[
-.BI \-M dir
-]
-[
-.BI \-f F
-]
-[
-.BI \-s n
-]
-[
-.BI \-p n
-]
-[
-.BI \-m n
-]
-[
-.IR files \|.\|.\|.
-]
+.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 ,
@@ -743,9 +739,11 @@ The default value is 0
(This is typically changed to 1 by the
.B eqnrc
file for the
-.B ascii
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
and
-.B latin1
+.B cp1047
devices.)
.LP
A more precise description of the role of many of these
diff --git a/contrib/groff/eqn/eqn_tab.h b/contrib/groff/eqn/eqn_tab.h
new file mode 100644
index 000000000000..9a8b3cb22595
--- /dev/null
+++ b/contrib/groff/eqn/eqn_tab.h
@@ -0,0 +1,67 @@
+#define OVER 257
+#define SMALLOVER 258
+#define SQRT 259
+#define SUB 260
+#define SUP 261
+#define LPILE 262
+#define RPILE 263
+#define CPILE 264
+#define PILE 265
+#define LEFT 266
+#define RIGHT 267
+#define TO 268
+#define FROM 269
+#define SIZE 270
+#define FONT 271
+#define ROMAN 272
+#define BOLD 273
+#define ITALIC 274
+#define FAT 275
+#define ACCENT 276
+#define BAR 277
+#define UNDER 278
+#define ABOVE 279
+#define TEXT 280
+#define QUOTED_TEXT 281
+#define FWD 282
+#define BACK 283
+#define DOWN 284
+#define UP 285
+#define MATRIX 286
+#define COL 287
+#define LCOL 288
+#define RCOL 289
+#define CCOL 290
+#define MARK 291
+#define LINEUP 292
+#define TYPE 293
+#define VCENTER 294
+#define PRIME 295
+#define SPLIT 296
+#define NOSPLIT 297
+#define UACCENT 298
+#define SPECIAL 299
+#define SPACE 300
+#define GFONT 301
+#define GSIZE 302
+#define DEFINE 303
+#define NDEFINE 304
+#define TDEFINE 305
+#define SDEFINE 306
+#define UNDEF 307
+#define IFDEF 308
+#define INCLUDE 309
+#define DELIM 310
+#define CHARTYPE 311
+#define SET 312
+#define GRFONT 313
+#define GBFONT 314
+typedef union {
+ char *str;
+ box *b;
+ pile_box *pb;
+ matrix_box *mb;
+ int n;
+ column *col;
+} YYSTYPE;
+extern YYSTYPE yylval;
diff --git a/contrib/groff/eqn/lex.cc b/contrib/groff/eqn/lex.cc
index c0430bc58b41..0a5a4e29e79b 100644
--- a/contrib/groff/eqn/lex.cc
+++ b/contrib/groff/eqn/lex.cc
@@ -19,7 +19,7 @@ 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 "eqn_tab.h"
#include "stringclass.h"
#include "ptable.h"
@@ -471,7 +471,7 @@ int top_input::get_location(char **fnp, int *lnp)
argument_macro_input::argument_macro_input(const char *body, int ac,
char **av, input *x)
-: input(x), argc(ac), ap(0)
+: input(x), ap(0), argc(ac)
{
int i;
for (i = 0; i < argc; i++)
diff --git a/contrib/groff/eqn/main.cc b/contrib/groff/eqn/main.cc
index 986c28267a7c..c0f40206d7be 100644
--- a/contrib/groff/eqn/main.cc
+++ b/contrib/groff/eqn/main.cc
@@ -23,13 +23,14 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#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 &);
+static char *delim_search (char *, int);
+static int inline_equation (FILE *, string &, string &);
char start_delim = '\0';
char end_delim = '\0';
@@ -40,6 +41,7 @@ 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();
@@ -78,7 +80,7 @@ void do_file(FILE *fp, const char *filename)
&& linebuf[2] == 'Q'
&& (linebuf[3] == ' ' || linebuf[3] == '\n' || compatible_flag)) {
put_string(linebuf, stdout);
- put_string(".if '\\*(.T'html' \\X(graphic-start(\\c\n", stdout);
+ graphic_start();
int start_lineno = current_lineno + 1;
str.clear();
for (;;) {
@@ -108,7 +110,7 @@ void do_file(FILE *fp, const char *filename)
}
restore_compatibility();
printf(".lf %d\n", current_lineno);
- put_string(".if '\\*(.T'html' \\X(graphic-end(\\c\n", stdout);
+ graphic_end();
put_string(linebuf, stdout);
}
else if (start_delim != '\0' && linebuf.search(start_delim) >= 0
@@ -165,7 +167,7 @@ static int inline_equation(FILE *fp, string &linebuf, string &str)
ptr = &linebuf[0];
}
str += '\0';
- put_string(".if '\\*(.T'html' \\X(graphic-start(\\c\n", stdout);
+ graphic_start();
init_lex(str.contents(), current_filename, start_lineno);
yyparse();
start = delim_search(ptr, start_delim);
@@ -180,7 +182,7 @@ static int inline_equation(FILE *fp, string &linebuf, string &str)
printf(".lf %d\n", current_lineno);
output_string();
restore_compatibility();
- put_string(".if '\\*(.T'html' \\X(graphic-end(\\c\n", stdout);
+ graphic_end();
printf(".lf %d\n", current_lineno + 1);
return 1;
}
@@ -259,8 +261,8 @@ int main(int argc, char **argv)
break;
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU eqn version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU eqn version %s\n", Version_string);
fflush(stderr);
break;
}
diff --git a/contrib/groff/eqn/neqn.sh b/contrib/groff/eqn/neqn.sh
index 770376732b29..6a60d138391d 100644
--- a/contrib/groff/eqn/neqn.sh
+++ b/contrib/groff/eqn/neqn.sh
@@ -1,5 +1,5 @@
#!/bin/sh
# Provision of this shell script should not be taken to imply that use of
-# GNU eqn with groff -Tascii|-Tlatin1 is supported.
+# GNU eqn with groff -Tascii|-Tlatin1|-Tutf8|-Tcp1047 is supported.
exec @g@eqn -Tascii ${1+"$@"}
diff --git a/contrib/groff/eqn/other.cc b/contrib/groff/eqn/other.cc
index 3f624f95f114..eb9e50a2bc57 100644
--- a/contrib/groff/eqn/other.cc
+++ b/contrib/groff/eqn/other.cc
@@ -38,7 +38,7 @@ box *make_accent_box(box *p, box *q)
return new accent_box(p, q);
}
-accent_box::accent_box(box *pp, box *qq) : ab(qq), pointer_box(pp)
+accent_box::accent_box(box *pp, box *qq) : pointer_box(pp), ab(qq)
{
}
@@ -386,7 +386,7 @@ void underline_box::debug_print()
fprintf(stderr, " } under");
}
-size_box::size_box(char *s, box *pp) : size(s), pointer_box(pp)
+size_box::size_box(char *s, box *pp) : pointer_box(pp), size(s)
{
}
@@ -495,7 +495,7 @@ void fat_box::debug_print()
}
-vmotion_box::vmotion_box(int i, box *pp) : n(i), pointer_box(pp)
+vmotion_box::vmotion_box(int i, box *pp) : pointer_box(pp), n(i)
{
}
@@ -534,7 +534,7 @@ void vmotion_box::debug_print()
fprintf(stderr, " }");
}
-hmotion_box::hmotion_box(int i, box *pp) : n(i), pointer_box(pp)
+hmotion_box::hmotion_box(int i, box *pp) : pointer_box(pp), n(i)
{
}
diff --git a/contrib/groff/eqn/over.cc b/contrib/groff/eqn/over.cc
index d92e6b8cbd28..06b032129fd7 100644
--- a/contrib/groff/eqn/over.cc
+++ b/contrib/groff/eqn/over.cc
@@ -46,7 +46,7 @@ box *make_small_over_box(box *pp, box *qq)
}
over_box::over_box(int is_small, box *pp, box *qq)
-: num(pp), den(qq), reduce_size(is_small)
+: reduce_size(is_small), num(pp), den(qq)
{
spacing_type = INNER_TYPE;
}
diff --git a/contrib/groff/eqn/special.cc b/contrib/groff/eqn/special.cc
index 64ee5530fc8c..310261ae4c59 100644
--- a/contrib/groff/eqn/special.cc
+++ b/contrib/groff/eqn/special.cc
@@ -59,7 +59,7 @@ box *make_special_box(char *s, box *p)
return new special_box(s, p);
}
-special_box::special_box(char *s, box *pp) :macro_name(s), pointer_box(pp)
+special_box::special_box(char *s, box *pp) : pointer_box(pp), macro_name(s)
{
}
diff --git a/contrib/groff/eqn/text.cc b/contrib/groff/eqn/text.cc
index a236e9a97f78..b0f1700c221d 100644
--- a/contrib/groff/eqn/text.cc
+++ b/contrib/groff/eqn/text.cc
@@ -165,7 +165,7 @@ void box::set_spacing_type(char *type)
}
char_box::char_box(unsigned char cc)
-: c(cc), prev_is_italic(0), next_is_italic(0)
+: c(cc), next_is_italic(0), prev_is_italic(0)
{
spacing_type = char_table[c].spacing_type;
}
diff --git a/contrib/groff/gendef.sh b/contrib/groff/gendef.sh
index e2b2575ffbd4..de32279b0069 100644
--- a/contrib/groff/gendef.sh
+++ b/contrib/groff/gendef.sh
@@ -11,7 +11,11 @@ do
#define $def"
done
-t=/tmp/groff.$$
+# Use $TMPDIR if defined. Default to cwd, for non-Unix systems
+# which don't have /tmp on each drive (we are going to remove
+# the file before we exit anyway). Put the PID in the basename,
+# since the extension can only hold 3 characters on MS-DOS.
+t=${TMPDIR-.}/gro$$.tmp
sed -e 's/=/ /' >$t <<EOF
$defs
diff --git a/contrib/groff/grn/Makefile.sub b/contrib/groff/grn/Makefile.sub
new file mode 100644
index 000000000000..ffa0ad209cc4
--- /dev/null
+++ b/contrib/groff/grn/Makefile.sub
@@ -0,0 +1,17 @@
+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
new file mode 100644
index 000000000000..b5b9fc9abd83
--- /dev/null
+++ b/contrib/groff/grn/README
@@ -0,0 +1,60 @@
+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
new file mode 100644
index 000000000000..b25305b3ca03
--- /dev/null
+++ b/contrib/groff/grn/gprint.h
@@ -0,0 +1,84 @@
+/* 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
new file mode 100644
index 000000000000..96a062c7e2cf
--- /dev/null
+++ b/contrib/groff/grn/grn.man
@@ -0,0 +1,634 @@
+.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
new file mode 100644
index 000000000000..bf72ea1f7736
--- /dev/null
+++ b/contrib/groff/grn/hdb.cc
@@ -0,0 +1,326 @@
+/* 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
new file mode 100644
index 000000000000..db3bfefa13bb
--- /dev/null
+++ b/contrib/groff/grn/hgraph.cc
@@ -0,0 +1,1043 @@
+/* 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
new file mode 100644
index 000000000000..f4e1ca827755
--- /dev/null
+++ b/contrib/groff/grn/hpoint.cc
@@ -0,0 +1,49 @@
+/* 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
new file mode 100644
index 000000000000..bcbb2df85e56
--- /dev/null
+++ b/contrib/groff/grn/main.cc
@@ -0,0 +1,901 @@
+/* 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
index a63905df9387..0e5d32cabbd5 100644
--- a/contrib/groff/grodvi/Makefile.sub
+++ b/contrib/groff/grodvi/Makefile.sub
@@ -3,4 +3,4 @@ MAN1=grodvi.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=dvi.o
-CCSRCS=dvi.cc
+CCSRCS=$(srcdir)/dvi.cc
diff --git a/contrib/groff/grodvi/dvi.cc b/contrib/groff/grodvi/dvi.cc
index d139124726fa..305470e132c6 100644
--- a/contrib/groff/grodvi/dvi.cc
+++ b/contrib/groff/grodvi/dvi.cc
@@ -19,6 +19,7 @@ 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;
@@ -186,8 +187,8 @@ public:
};
dvi_printer::dvi_printer()
-: byte_count(0), last_bop(-1), page_count(0), cur_font(0), fp(stdout),
- max_h(0), max_v(0), pushed(0), line_thickness(-1), cur_point_size(-1)
+: 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);
@@ -854,8 +855,8 @@ int main(int argc, char **argv)
switch(c) {
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "grodvi version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "grodvi version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -878,6 +879,9 @@ int main(int argc, char **argv)
default:
assert(0);
}
+#ifdef SET_BINARY
+ SET_BINARY(fileno(stdout));
+#endif
if (optind >= argc)
do_file("-");
else {
diff --git a/contrib/groff/grodvi/grodvi.man b/contrib/groff/grodvi/grodvi.man
index aeb894cd4095..72baf247f07a 100644
--- a/contrib/groff/grodvi/grodvi.man
+++ b/contrib/groff/grodvi/grodvi.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -38,6 +38,9 @@ grodvi \- convert groff output to TeX dvi format
] [
.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
@@ -139,7 +142,7 @@ for font and device description files.
.B @FONTDIR@/devdvi/DESC
Device description file.
.TP
-.B @FONTDIR@/devdvi/ F
+.BI @FONTDIR@/devdvi/ F
Font description file for font
.IR F .
.TP
@@ -153,7 +156,8 @@ 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 grodvi.
+work with
+.BR grodvi .
.LP
When using the
.B \-d
@@ -165,7 +169,6 @@ and widths of rules be rounded.
.BR tfmtodit (@MAN1EXT@),
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
-.BR @g@eqn (@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
index 0acd882b4552..42ae221c47fa 100644
--- a/contrib/groff/groff/Makefile.sub
+++ b/contrib/groff/groff/Makefile.sub
@@ -3,6 +3,6 @@ MAN1=groff.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
OBJS=groff.o pipeline.o
-CCSRCS=groff.cc
-CSRCS=pipeline.c
-HDRS=pipeline.h
+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
index c5f55e02d6fe..034052a86ca3 100644
--- a/contrib/groff/groff/groff.cc
+++ b/contrib/groff/groff/groff.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2000 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -35,26 +35,28 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "font.h"
#include "device.h"
#include "pipeline.h"
+#include "nonposix.h"
#include "defs.h"
-#define BSHELL "/bin/sh"
#define GXDITVIEW "gxditview"
// troff will be passed an argument of -rXREG=1 if the -X option is
// specified
#define XREG ".X"
-#ifndef STDLIB_H_DECLARES_PUTENV
+#ifdef NEED_DECLARATION_PUTENV
extern "C" {
int putenv(const char *);
}
-#endif /* not STDLIB_H_DECLARES_PUTENV */
+#endif /* NEED_DECLARATION_PUTENV */
const int SOELIM_INDEX = 0;
const int REFER_INDEX = SOELIM_INDEX + 1;
-const int PIC_INDEX = REFER_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 EQN_INDEX = TBL_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;
@@ -114,7 +116,7 @@ int main(int argc, char **argv)
command_prefix = PROG_PREFIX;
commands[TROFF_INDEX].set_name(command_prefix, "troff");
while ((opt = getopt(argc, argv,
- "abCd:eEf:F:hiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ"))
+ "abCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ"))
!= EOF) {
char buf[3];
buf[0] = '-';
@@ -134,6 +136,12 @@ int main(int argc, char **argv)
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;
@@ -160,7 +168,9 @@ int main(int argc, char **argv)
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;
@@ -192,7 +202,7 @@ int main(int argc, char **argv)
case 'F':
font::command_line_font_dir(optarg);
if (Fargs.length() > 0) {
- Fargs += ':';
+ Fargs += PATH_SEP[0];
Fargs += optarg;
}
else
@@ -210,6 +220,8 @@ int main(int argc, char **argv)
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':
@@ -285,7 +297,7 @@ int main(int argc, char **argv)
commands[POST_INDEX].append_arg("-");
if (lflag && !Xflag && spooler) {
commands[SPOOL_INDEX].set_name(BSHELL);
- commands[SPOOL_INDEX].append_arg("-c");
+ commands[SPOOL_INDEX].append_arg(BSHELL_DASH_C);
Largs += '\0';
Largs = spooler + Largs;
commands[SPOOL_INDEX].append_arg(Largs.contents());
@@ -296,6 +308,7 @@ int main(int argc, char **argv)
}
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++)
@@ -315,7 +328,7 @@ int main(int argc, char **argv)
e += Fargs;
char *fontpath = getenv("GROFF_FONT_PATH");
if (fontpath && *fontpath) {
- e += ':';
+ e += PATH_SEP[0];
e += fontpath;
}
e += '\0';
@@ -333,7 +346,19 @@ const char *xbasename(const char *s)
{
if (!s)
return 0;
- const char *p = strrchr(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 *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;
}
@@ -465,8 +490,8 @@ void possible_command::build_argv()
void possible_command::print(int is_last, FILE *fp)
{
build_argv();
- if (argv[0] != 0 && strcmp(argv[0], BSHELL) == 0
- && argv[1] != 0 && strcmp(argv[1], "-c") == 0
+ 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 {
@@ -547,9 +572,9 @@ char **possible_command::get_argv()
void synopsis()
{
fprintf(stderr,
-"usage: %s [-abehilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam] [-wname]\n"
-" [-Wname] [-Mdir] [-dcs] [-rcn] [-nnum] [-olist] [-Parg] [-Larg]\n"
-" [files...]\n",
+"usage: %s [-abeghilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n"
+" [-wname] [-Wname] [-Mdir] [-dcs] [-rcn] [-nnum] [-olist] [-Parg]\n"
+" [-Larg] [-Idir] [files...]\n",
program_name);
}
@@ -561,6 +586,8 @@ void help()
"-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"
@@ -571,7 +598,7 @@ void help()
"-nnum\tnumber first page n\n"
"-olist\toutput only pages in list\n"
"-ffam\tuse fam as the default font family\n"
-"-Fdir\tsearch directory dir for device directories\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"
@@ -590,6 +617,7 @@ void help()
"-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);
diff --git a/contrib/groff/groff/groff.man b/contrib/groff/groff/groff.man
index aa57f31f1de4..23dbf8e793b8 100644
--- a/contrib/groff/groff/groff.man
+++ b/contrib/groff/groff/groff.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1999 Free Software Foundation, Inc.
+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
@@ -31,55 +31,37 @@ the original English.
.SH NAME
groff \- front end for the groff document formatting system
.SH SYNOPSIS
+.nr a \n(.j
+.ad l
+.nr i \n(.i
+.in +\w'\fBgroff 'u
+.ti \niu
.B groff
-[
-.B \-abehilpstvzCENRSUVXZ
-]
-[
-.BI \-w name
-]
-[
-.BI \-W name
-]
-[
-.BI \-m name
-]
-[
-.BI \-F dir
-]
-[
-.BI \-I dir
-]
-[
-.BI \-T dev
-]
-[
-.BI \-f fam
-]
-[
-.BI \-M dir
-]
-[
-.BI \-d cs
-]
-[
-.BI \-r cn
-]
-[
-.BI \-n num
-]
-[
-.BI \-o list
-]
-[
-.BI \-P arg
-]
-[
-.BI \-L arg
-]
-[
-.IR files \|.\|.\|.\|
-]
+.de OP
+.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
+.el .RB "[\ " "\\$1" "\ ]"
+..
+.OP \-abeghilpstvzCEGNRSUVXZ
+.OP \-w name
+.OP \-W name
+.OP \-m name
+.OP \-F dir
+.OP \-I dir
+.OP \-T dev
+.OP \-f fam
+.OP \-M dir
+.OP \-d cs
+.OP \-r cn
+.OP \-n num
+.OP \-o list
+.OP \-P arg
+.OP \-L arg
+.RI "[\ " files\|.\|.\|. "\ ]"
+.br
+.ad \na
+.PP
+It is possible to have whitespace between a command line option and its
+parameter.
.SH DESCRIPTION
.B groff
is a front-end to the groff document formatting system.
@@ -105,11 +87,22 @@ For a 100dpi X11 previewer.
For typewriter-like devices.
.TP
.B latin1
-For typewriter-like devices using the ISO Latin-1 character set.
+For typewriter-like devices using the ISO Latin-1 (ISO 8859-1) character set.
+.TP
+.B utf8
+For typewriter-like devices using the Unicode (ISO 10646) character set with
+UTF-8 encoding.
+.TP
+.B cp1047
+For typewriter-like devices which use the EBCDIC code page IBM cp1047
+(e.g. OS/390 Unix).
.TP
.B lj4
For an HP LaserJet4-compatible (or other PCL5-compatible) printer.
.TP
+.B lbp
+For Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
+.TP
.B html
To produce HTML output.
.LP
@@ -125,6 +118,8 @@ The default device is
It can optionally preprocess with any of
.BR @g@pic ,
.BR @g@eqn ,
+.BR @g@grn ,
+.BR grap ,
.BR @g@tbl ,
.BR @g@refer ,
or
@@ -151,6 +146,12 @@ Preprocess with @g@eqn.
.B \-t
Preprocess with @g@tbl.
.TP
+.B \-g
+Preprocess with @g@grn.
+.TP
+.B \-G
+Preprocess with grap.
+.TP
.B \-p
Preprocess with @g@pic.
.TP
@@ -159,7 +160,7 @@ Preprocess with @g@soelim.
.TP
.BI \-I dir
This option is as described in
-.BR @g@soelim (@MAN1EXT@) .
+.BR @g@soelim (@MAN1EXT@).
This option implies the
.B \-s
option.
@@ -270,8 +271,8 @@ option to
and use the
.B \%\-msafer
macros with
-.BR @g@troff .
-(enabled by default)
+.B @g@troff
+(enabled by default).
.TP
.B \-U
Unsafe mode. Reverts to the old unsafe behaviour.
@@ -323,10 +324,12 @@ This also applies to
.BR tbl ,
.BR pic ,
.BR eqn ,
+.BR grn ,
.BR refer ,
and
.BR soelim .
It does not apply to
+.BR grap ,
.BR grops ,
.BR grodvi ,
.BR grotty ,
@@ -380,6 +383,28 @@ Font file for font
.I F
of device
.IR name .
+.LP
+Note that on EBCDIC hosts, output devices
+.BR ascii ,
+.BR latin1 ,
+and
+.B utf8
+aren't available.
+Similarly,
+.B cp1047
+is not available on ASCII based operating systems.
+.SH EXAMPLE
+To print the man page
+.B foo.1
+to the standard output using the latin-1 output device and
+.B less
+as the pager, the following command can be used:
+.IP
+.B groff -mandoc -Tlatin1 foo.1 | less
+.PP
+Alternatively, you can say
+.IP
+.B groff -m mandoc -Tlatin1 foo.1 | less
.SH AUTHOR
James Clark <jjc@jclark.com>
.SH BUGS
@@ -388,7 +413,7 @@ Include a complete, self-contained example
that will allow the bug to be reproduced,
and say which version of groff you are using.
.SH COPYRIGHT
-Copyright \(co 1989, 1990, 1991, 1992, 1999 Free Software Foundation, Inc.
+Copyright \(co 1989-2000 Free Software Foundation, Inc.
.LP
groff is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@ -406,17 +431,29 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.SH AVAILABILITY
The most recent released version of groff is always available for
anonymous ftp from ftp.gnu.org in the directory gnu/groff.
+.LP
+.B groff
+only supports the freely available
+.B grap
+implementation written by Ted Faber <faber@lunabase.org>.
+The actual version can be found at
+.IP
+\%http://www.lunabase.org/~faber/Vault/software/grap/
.SH "SEE ALSO"
.BR grog (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@),
-.BR @g@soelim (@MAN1EXT@) ,
+.BR @g@grn (@MAN1EXT@),
+.BR grap (1),
+.BR @g@soelim (@MAN1EXT@),
.BR @g@refer (@MAN1EXT@),
.BR grops (@MAN1EXT@),
.BR grodvi (@MAN1EXT@),
.BR grotty (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
+.BR grolbp (@MAN1EXT@),
.BR grohtml (@MAN1EXT@),
.BR gxditview (@MAN1EXT@),
.BR groff_font (@MAN5EXT@),
diff --git a/contrib/groff/groff/pipeline.c b/contrib/groff/groff/pipeline.c
index 9f444d0145f4..96381208c5d1 100644
--- a/contrib/groff/groff/pipeline.c
+++ b/contrib/groff/groff/pipeline.c
@@ -95,7 +95,187 @@ 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 *itoa 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;
@@ -203,20 +383,22 @@ int run_pipeline(ncommands, commands)
}
else
error("unexpected status %1",
- itoa(status), (char *)0, (char *)0);
+ 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 *itoa(n)
+static char *i_to_a(n)
int n;
{
static char buf[12];
diff --git a/contrib/groff/grog/Makefile.sub b/contrib/groff/grog/Makefile.sub
index 5b8f089f683c..35b2b3caefb3 100644
--- a/contrib/groff/grog/Makefile.sub
+++ b/contrib/groff/grog/Makefile.sub
@@ -1,5 +1,6 @@
MAN1=grog.n
CLEANADD=grog
+NAMEPREFIX=$(g)
all: grog
@@ -9,14 +10,15 @@ grog: grog.pl grog.sh
sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/grog.pl >$@; \
else \
rm -f $@; \
- sed "$(SH_SCRIPT_SED_CMD)" $(srcdir)/grog.sh >$@; \
+ sed -e 's/@g@/$(g)/g' \
+ -e "$(SH_SCRIPT_SED_CMD)" $(srcdir)/grog.sh >$@; \
fi
chmod +x $@
install_data: grog
- -test -d $(bindir) || mkdir $(bindir)
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/grog
- $(INSTALL_PROGRAM) grog $(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
index 8e92657309ce..86902d20cf54 100644
--- a/contrib/groff/grog/grog.man
+++ b/contrib/groff/grog/grog.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -41,6 +41,9 @@ options
.BR \-mm ,
.BR \-ms ,
.BR \-p ,
+.BR \-R ,
+.BR \-g ,
+.BR \-G ,
.BR \-s ,
and
.BR \-t
@@ -69,4 +72,7 @@ option.
.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
index b131da64b236..416d5b3d7f60 100644
--- a/contrib/groff/grog/grog.pl
+++ b/contrib/groff/grog/grog.pl
@@ -47,6 +47,21 @@ sub process {
$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++;
@@ -108,11 +123,14 @@ sub process {
close(FILE);
}
-if ($pic || $tbl || $eqn || $refer) {
+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);
diff --git a/contrib/groff/grog/grog.sh b/contrib/groff/grog/grog.sh
index 631b356aa931..d8724889ffe7 100644
--- a/contrib/groff/grog/grog.sh
+++ b/contrib/groff/grog/grog.sh
@@ -2,7 +2,7 @@
# grog -- guess options for groff command
# Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8.
-soelim=gsoelim
+soelim=@g@soelim
opts=
@@ -20,12 +20,12 @@ do
esac
done
-egrep -h '^\.(P|[LI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|Oc|TS|EQ|TH|SH|so|\[|R1|PH|SA)' $* \
+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|PH|SA|SO_START|SO_END)' \
+| 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 }
@@ -33,6 +33,8 @@ egrep -h '^\.(P|[LI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|Oc|TS|EQ|TH|SH|so|\[|R1|PH
/^\.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++ }
@@ -48,10 +50,12 @@ END {
if (files ~ /^-/)
files = "-- " files
printf "groff"
- if (pic > 0 || tbl > 0 || eqn > 0 || refer > 0) {
+ 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"
diff --git a/contrib/groff/grohtml/ChangeLog b/contrib/groff/grohtml/ChangeLog
index e7c1265769e1..df1e21f01805 100644
--- a/contrib/groff/grohtml/ChangeLog
+++ b/contrib/groff/grohtml/ChangeLog
@@ -1,3 +1,146 @@
+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.
diff --git a/contrib/groff/grohtml/Makefile.sub b/contrib/groff/grohtml/Makefile.sub
index 3faa1e301254..a1e301f0127e 100644
--- a/contrib/groff/grohtml/Makefile.sub
+++ b/contrib/groff/grohtml/Makefile.sub
@@ -2,5 +2,9 @@ PROG=grohtml
MAN1=grohtml.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=html.o
-CCSRCS=html.cc
+OBJS=\
+ html.o \
+ output.o
+CCSRCS=\
+ $(srcdir)/html.cc \
+ $(srcdir)/output.cc
diff --git a/contrib/groff/grohtml/TODO b/contrib/groff/grohtml/TODO
new file mode 100644
index 000000000000..4924bd1c53fb
--- /dev/null
+++ b/contrib/groff/grohtml/TODO
@@ -0,0 +1,294 @@
+
+------------------------------------------------------------------
+ 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
index e62e2233096e..6216d4eb5464 100644
--- a/contrib/groff/grohtml/design.ms
+++ b/contrib/groff/grohtml/design.ms
@@ -122,33 +122,6 @@ has been spanned by words. Ie no gaps exist.
the documentation about these rules is particularly incomplete and needs finishing
when time prevails.
.SH
-To do
-.LP
-.IP (i) .5i
-finish working out the max and min x, y, extents for splines.
-.IP (ii) .5i
-check and test thoroughly all the character descriptions in devhtml
-(originally taken from devX100)
-.IP (iii) .5i
-improve tmac.arkup
-.IP (vi) .5i
-also improve documentation.
-.IP (v) .5i
-fix the bugs which are exposed by Eric Raymonds pic guide,
-\fBMaking Pictures With GNU PIC\fR. It appears that grohtml becomes confused
-about which sections of the document are text and which sections need
-to be rendered as an image.
-.IP (vi) .5i
-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.
-.IP (vii) .5i
-introduce anti aliasing for the images as mentioned by Werner.
-.SH
Dependencies
.LP
Grohtml is dependent upon grops, gs which are invoked to
diff --git a/contrib/groff/grohtml/grohtml.man b/contrib/groff/grohtml/grohtml.man
index 63b05edd3586..f1cd7f755984 100644
--- a/contrib/groff/grohtml/grohtml.man
+++ b/contrib/groff/grohtml/grohtml.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1999 Free Software Foundation, Inc.
+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
@@ -26,18 +26,26 @@ the original English.
.SH NAME
grohtml \- html driver for groff
.SH SYNOPSIS
-.B grohtml
-[
-.B \-atvdgm?
-] [
-.BI \-F dir
-] [
-.BI \-I imagetype
-] [
-.BI \-r resolution
-] [
-.IR files \|.\|.\|.
-]
+.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
@@ -107,6 +115,12 @@ 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
diff --git a/contrib/groff/grohtml/html.cc b/contrib/groff/grohtml/html.cc
index 26b9279da693..0ee5ce6150d7 100644
--- a/contrib/groff/grohtml/html.cc
+++ b/contrib/groff/grohtml/html.cc
@@ -28,12 +28,51 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#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)
@@ -45,6 +84,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#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)
@@ -54,7 +94,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#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
+#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
/*
@@ -82,6 +125,7 @@ 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;
@@ -114,7 +158,6 @@ static int max (int a, int b)
}
}
-
/*
* is_subsection - returns TRUE if a1..a2 is within b1..b2
*/
@@ -125,7 +168,6 @@ static int is_subsection (int a1, int a2, int b1, int b2)
return( !((a1 < b1) || (a1 > b2) || (a2 < b1) || (a2 > b2)) );
}
-
/*
* is_intersection - returns TRUE if range a1..a2 intersects with b1..b2
*/
@@ -136,7 +178,6 @@ static int is_intersection (int a1, int a2, int b1, int b2)
return( ! ((a1 > b2) || (a2 < b1)) );
}
-
/*
* is_digit - returns TRUE if character, ch, is a digit.
*/
@@ -146,7 +187,6 @@ 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.
@@ -157,7 +197,6 @@ static int more_than_line_break (int v1, int v2, int size)
return( abs(v1-v2)>size );
}
-
/*
* the class and methods for styles
*/
@@ -180,7 +219,7 @@ style::style()
}
style::style(font *p, int sz, int h, int sl, int no)
- : f(p), point_size(sz), height(h), slant(sl), font_no(no)
+ : f(p), point_size(sz), font_no(no), height(h), slant(sl)
{
}
@@ -210,7 +249,7 @@ struct char_block {
};
char_block::char_block()
-: next(0), used(0)
+: used(0), next(0)
{
}
@@ -300,7 +339,7 @@ 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), minh(min_horizontal), maxv(max_vertical), maxh(max_horizontal),
+ minv(min_vertical), maxv(max_vertical), minh(min_horizontal), maxh(max_horizontal),
is_raw_command(is_command), is_html_command(is_html)
{
}
@@ -317,7 +356,7 @@ text_glob::~text_glob ()
int text_glob::is_less (text_glob *a, text_glob *b)
{
- if (is_intersection(a->minv, a->maxv, b->minv, b->maxv)) {
+ 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 );
@@ -346,7 +385,7 @@ public:
};
graphic_glob::graphic_glob ()
- : minv(-1), maxv(-1), minh(-1), maxh(-1), code(0), size(0), nopoints(0), point(0)
+ : minv(-1), maxv(-1), minh(-1), maxh(-1), nopoints(0), point(0), size(0), code(0)
{
}
@@ -358,7 +397,7 @@ graphic_glob::~graphic_glob ()
}
graphic_glob::graphic_glob (int troff_code)
- : minv(-1), maxv(-1), minh(-1), maxh(-1), code(troff_code), size(0), nopoints(0), point(0)
+ : minv(-1), maxv(-1), minh(-1), maxh(-1), nopoints(0), point(0), size(0), code(troff_code)
{
}
@@ -646,14 +685,14 @@ void assign_min_max_for_arc (graphic_glob *g, int *p, double *c)
if (g->maxh < g->minh) {
if (debug_on) {
fprintf(stderr, "assert failed minh > maxh\n"); fflush(stderr);
- stop();
+ // stop();
}
g->maxh = g->minh;
}
if (g->maxv < g->minv) {
if (debug_on) {
fprintf(stderr, "assert failed minv > maxv\n"); fflush(stderr);
- stop();
+ // stop();
}
g->maxv = g->minv;
}
@@ -784,215 +823,6 @@ void page::add_spline (int code, int xc, int yc, int np, int *p, int size, int f
}
}
-/*
- * 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_delimiter(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 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_translated_char (const char *s)
-{
- int i=0;
-
- while (char_conversions[i].html_char != NULL) {
- if (strcmp(s, char_conversions[i].html_char) == 0) {
- put_string(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;
-}
-
class html_font : public font {
html_font(const char *);
public:
@@ -1000,8 +830,6 @@ public:
char *encoding;
char *reencoded_name;
~html_font();
- void handle_unknown_font_command(const char *command, const char *arg,
- const char *filename, int lineno);
static html_font *load_html_font(const char *);
};
@@ -1024,19 +852,6 @@ html_font::~html_font()
{
}
-void html_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);
- }
-}
-
-
/*
* a simple class to contain the header to this document
*/
@@ -1053,7 +868,7 @@ public:
title_desc::title_desc ()
- : has_been_found(FALSE), has_been_written(FALSE)
+ : has_been_written(FALSE), has_been_found(FALSE)
{
}
@@ -1102,8 +917,43 @@ 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
@@ -1119,10 +969,11 @@ public:
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)
+ : no_of_columns(0), columns(0), vertical_limit(0), wrap_margin(0)
{
}
@@ -1139,18 +990,15 @@ class html_printer : public printer {
int space_char_index;
int no_of_printed_pages;
int paper_length;
- enum { SBUF_SIZE = 256 };
+ enum { SBUF_SIZE = 8192 };
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;
+ int sbuf_dmark_hpos;
style output_style;
int output_hpos;
int output_vpos;
@@ -1164,18 +1012,18 @@ class html_printer : public printer {
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;
- int in_paragraph;
- int need_paragraph;
- paragraph_type para_type;
+ 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;
@@ -1186,7 +1034,6 @@ class html_printer : public printer {
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);
@@ -1200,6 +1047,8 @@ class html_printer : public printer {
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);
@@ -1225,16 +1074,20 @@ class html_printer : public printer {
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 *name);
+ 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 (void);
+ void write_header (text_glob *g);
void determine_header_level (void);
void build_header (text_glob *g);
void make_html_indent (int indent);
@@ -1242,7 +1095,6 @@ class html_printer : public printer {
int is_a_header (text_glob *g);
int processed_header (text_glob *g);
void make_new_image_name (void);
- void create_temp_name (char *name, char *extension);
void calculate_region_margins (region_glob *r);
void remove_redundant_regions (void);
void remove_duplicate_regions (void);
@@ -1256,25 +1108,28 @@ class html_printer : public printer {
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 *line, struct text_defn *last, int max_words);
+ 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 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 vert, int left, int right, int next);
+ 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 left, int right);
+ 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);
- int copy_line (struct text_defn *dest, struct text_defn *src);
+ 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);
@@ -1284,6 +1139,7 @@ class html_printer : public printer {
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);
@@ -1295,8 +1151,48 @@ class html_printer : public printer {
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);
+ 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();
@@ -1311,30 +1207,30 @@ public:
};
html_printer::html_printer()
-: no_of_printed_pages(0),
+: 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),
- html(0, MAX_LINE_LENGTH),
- troff(0, MAX_LINE_LENGTH),
line_thickness(-1),
- inside_font_style(0),
fill(FILL_MAX + 1),
+ inside_font_style(0),
page_number(0),
+ header_indent(-1),
left_margin_indent(0),
right_margin_indent(0),
- start_region_vpos(0),
- start_region_hpos(0),
- end_region_vpos(0),
- end_region_hpos(0),
need_one_newline(0),
issued_newline(0),
image_number(0),
graphic_level(0),
- cutoff_heading(100),
- in_paragraph(0),
- need_paragraph(0),
- para_type(left_alignment)
+ 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);
@@ -1355,22 +1251,282 @@ html_printer::html_printer()
r /= 10;
point++;
}
- res = r;
+ res = r;
html.set_fixed_point(point);
- space_char_index = font::name_to_index("space");
- paper_length = font::paperlength;
+ 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;
+ 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;
- postscript_res = 72000;
+ 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) {
@@ -1380,81 +1536,88 @@ void html_printer::set_char(int i, font *f, const environment *env, int w, const
}
if ((name != 0) && (page_contents->is_in_graphic)) {
flush_sbuf();
- int r=font::res; // resolution of the device actually
+ 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);
+ 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;
- return;
+ } 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;
+ }
}
+}
- 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_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 0
- sbuf_space_code = ' ';
- sbuf_space_count++;
- sbuf_space_width = env->hpos - sbuf_end_hpos;
- sbuf_end_hpos = env->hpos + w + sbuf_kern;
- sbuf[sbuf_len++] = ' ';
- sbuf[sbuf_len++] = code;
- return;
+/*
+ * 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
- } else {
- int diff = env->hpos - sbuf_end_hpos - sbuf_space_width;
- if (diff == 0) {
- 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;
}
/*
* make_new_image_name - creates a new file name ready for a image file.
- * it leaves the extension off.
*/
void html_printer::make_new_image_name (void)
{
image_number++;
- sprintf(image_name, "groff-html-%d-%d", image_number, getpid());
+
+ 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;
+ }
+ }
+ }
}
/*
@@ -1477,6 +1640,120 @@ void html_printer::write_title (int in_head)
}
}
+/*
+ * 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.
@@ -1487,12 +1764,12 @@ 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_hpos = 0;
int start_title_vpos = 0;
int found_title_start = FALSE;
int height = 0;
@@ -1521,11 +1798,13 @@ void html_printer::find_title (void)
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;
- strcpy((char *)title.text, (char *)t->text_string);
+ 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();
@@ -1539,7 +1818,8 @@ void html_printer::find_title (void)
start_title_vpos = min(t->minv, start_title_vpos);
end_title_hpos = max(t->maxh, end_title_hpos);
strcat(title.text, " ");
- strcat(title.text, (char *)t->text_string);
+ 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()));
@@ -1548,7 +1828,7 @@ void html_printer::find_title (void)
title.has_been_found = TRUE;
return;
}
- } else if (t->minh == left_margin_indent) {
+ } else if (t->minh <= left_margin_indent) {
// no margin exists
return;
} else {
@@ -1569,7 +1849,7 @@ void html_printer::html_newline (void)
int r = font::res;
int height = output_style.point_size*r/72;
- if (in_paragraph) {
+ if (current_paragraph->in_paragraph) {
// safe to generate a pretty newline
html.put_string("<br>\n");
} else {
@@ -1580,21 +1860,37 @@ void html_printer::html_newline (void)
}
/*
+ * 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 (in_paragraph && need_paragraph) {
- switch (para_type) {
+ if (current_paragraph->in_paragraph && current_paragraph->need_paragraph) {
+ switch (current_paragraph->para_type) {
- case left_alignment: html.put_string("<p>");
+ case left_alignment: issue_left_paragraph();
break;
case center_alignment: html.put_string("<p align=center>");
break;
default: fatal("unknown paragraph alignment type");
}
- need_paragraph = FALSE;
+ current_paragraph->need_paragraph = FALSE;
}
}
@@ -1605,18 +1901,18 @@ void html_printer::force_begin_paragraph (void)
void html_printer::begin_paragraph (paragraph_type p)
{
- if (! in_paragraph) {
- int r = font::res;
- int height = output_style.point_size*r/72;
+ 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;
}
- need_paragraph = TRUE; // delay the <p> just in case we don't actually emit text
- in_paragraph = TRUE;
- issued_newline = TRUE;
- para_type = p;
+ 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;
}
}
@@ -1628,11 +1924,11 @@ void html_printer::begin_paragraph (paragraph_type p)
void html_printer::begin_paragraph_no_height (paragraph_type p)
{
- if (! in_paragraph) {
- need_paragraph = TRUE; // delay the <p> just in case we don't actually emit text
- in_paragraph = TRUE;
- issued_newline = TRUE;
- para_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;
}
}
@@ -1643,53 +1939,85 @@ void html_printer::begin_paragraph_no_height (paragraph_type p)
void html_printer::end_paragraph (void)
{
- if (in_paragraph) {
+ if (current_paragraph->in_paragraph) {
// check whether we have generated any text inbetween the potential paragraph begin end
- if (! need_paragraph) {
+ 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();
}
- terminate_current_font();
- para_type = left_alignment;
- in_paragraph = FALSE;
+ 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)
{
- if (! margin_on) {
- text_glob *w;
- graphic_glob *g;
-
- // remove margin
+ text_glob *w;
+ graphic_glob *g;
- right_margin_indent = 0;
+ // remove margin
- if (! page_contents->words.is_empty()) {
+ right_margin_indent = 0;
- // firstly check the words right margin
+ 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;
+ 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 == 950) stop();
+ if (right_margin_indent == 758) stop();
#endif
- }
- page_contents->words.move_right();
- } while (! page_contents->words.is_equal_to_head());
- }
-
+ }
+ 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();
@@ -1705,20 +2033,32 @@ void html_printer::calculate_margin (void)
} while (! page_contents->lines.is_equal_to_head());
}
- // now we know the right margin lets do the same to find left margin
- left_margin_indent = right_margin_indent;
+ /*
+ * 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)) {
- left_margin_indent = w->minh;
+ 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();
@@ -1733,7 +2073,6 @@ void html_printer::calculate_margin (void)
}
}
-
/*
* calculate_region - runs through the graphics globs and text globs
* and ensures that all graphic routines
@@ -1773,7 +2112,6 @@ void page::calculate_region (void)
void html_printer::remove_redundant_regions (void)
{
region_glob *r;
- graphic_glob *g;
// firstly run through the region making sure that all are needed
// ie all contain a line or word
@@ -2128,56 +2466,75 @@ int html_printer::is_less (graphic_glob *g, text_glob *t)
return( (g->minv < t->minv) || ((g->minv == t->minv) && (g->minh < t->minh)) );
}
-static FILE *create_file (char *filename)
+void html_printer::convert_to_image (char *troff_src, char *image_name)
{
- FILE *f;
+ char buffer[MAX_STRING_LENGTH*2 + 200];
+ char *ps_src = mktemp(xtmptemplate("-ps-"));
- errno = 0;
- f = fopen(filename, "w");
- if (f == 0) {
- error("can't create `%1'", filename);
- return( 0 );
- } else {
- return( f );
- }
-}
-
-void html_printer::convert_to_image (char *name)
-{
- char buffer[1024];
-
- sprintf(buffer, "grops %s > %s.ps\n", name, name);
+ sprintf(buffer, "grops%s %s > %s", EXE_EXT, troff_src, ps_src);
if (debug_on) {
- fprintf(stderr, "%s", buffer);
+ 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);
}
- system(buffer);
if (image_type == gif) {
sprintf(buffer,
- "echo showpage | gs -q -dSAFER -sDEVICE=ppmraw -r%d -g%dx%d -sOutputFile=- %s.ps - | ppmquant 256 2> /dev/null | ppmtogif 2> /dev/null > %s.gif \n",
- image_res,
+ "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,
- name, image_name);
+ ps_src, EXE_EXT, EXE_EXT, image_name);
} else {
sprintf(buffer,
- "echo showpage | gs -q -dSAFER -sDEVICE=%s -r%d -g%dx%d -sOutputFile=- %s.ps - 2> /dev/null > %s.png \n",
- image_device,
+ "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, image_name);
+ name, name, name, image_name);
+#endif
}
if (debug_on) {
- fprintf(stderr, "%s", buffer);
+ fprintf(stderr, "%s\n", buffer);
}
- system(buffer);
- sprintf(buffer, "/bin/rm -f %s %s.ps\n", name, name);
- if (debug_on) {
- fprintf(stderr, "%s", buffer);
- } else {
- system(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)
@@ -2187,20 +2544,12 @@ void html_printer::prologue (void)
troff.put_string(" 1 1\nx init\np1\n");
}
-void html_printer::create_temp_name (char *name, char *extension)
-{
- make_new_image_name();
- sprintf(name, "/tmp/%s.%s", image_name, extension);
-}
-
void html_printer::display_globs (int is_to_html)
{
text_glob *t=0;
graphic_glob *g=0;
FILE *f=0;
- char name[MAX_TEMP_NAME];
- char buffer[1024];
- int r=font::res;
+ char *troff_src;
int something=FALSE;
int is_center=FALSE;
@@ -2208,8 +2557,8 @@ void html_printer::display_globs (int is_to_html)
if (! is_to_html) {
is_center = html_position_region();
- create_temp_name(name, "troff");
- f = create_file(name);
+ make_new_image_name();
+ f = xtmpfile(&troff_src, "-troff-", FALSE);
troff.set_file(f);
prologue();
output_style.f = 0;
@@ -2280,14 +2629,13 @@ void html_printer::display_globs (int is_to_html)
if ((! is_to_html) && (f != 0)) {
fclose(troff.get_file());
if (something) {
- convert_to_image(name);
+ convert_to_image(troff_src, image_name);
if (is_center) {
+ end_paragraph();
begin_paragraph(center_alignment);
- } else {
- begin_paragraph(left_alignment);
+ force_begin_paragraph();
}
- force_begin_paragraph();
html.put_string("<img src=\"");
html.put_string(image_name);
if (image_type == gif) {
@@ -2295,37 +2643,37 @@ void html_printer::display_globs (int is_to_html)
} else {
html.put_string(".png\"");
}
- if (is_center) {
- html.put_string(" align=\"middle\"");
- }
html.put_string(">\n");
html_newline();
- end_paragraph();
+ if (is_center) {
+ end_paragraph();
+ }
output_vpos = end_region_vpos;
output_hpos = 0;
need_one_newline = FALSE;
output_style.f = 0;
+ end_paragraph();
}
- // unlink(name); // remove troff file
}
}
void html_printer::flush_page (void)
{
calculate_margin();
- output_vpos = -1;
- output_hpos = left_margin_indent;
+ output_vpos = -1;
+ output_hpos = get_left();
+ supress_sub_sup = TRUE;
#if 0
dump_page();
#endif
- html.begin_comment("left margin: ").comment_arg(itoa(left_margin_indent)).end_comment();;
- html.begin_comment("right margin: ").comment_arg(itoa(right_margin_indent)).end_comment();;
+ 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) {
@@ -2398,14 +2746,22 @@ void html_printer::html_change_font (text_glob *g, const char *fontname, int siz
write_html_font_type(oldfontname, "</", ">");
}
}
- if (fontname != 0) {
+
+ 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
- if (((output_style.f == 0) || (output_style.point_size != size)) && (size != 0)) {
- sprintf(buffer, "<font size=%d>", convertSizeToHTML(size));
- html.put_string(buffer);
- output_style.point_size = size; // and remember the size
- }
+ 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, "<", ">");
@@ -2415,8 +2771,6 @@ void html_printer::html_change_font (text_glob *g, const char *fontname, int siz
output_style = g->text_style; // remember style for next time
}
- } else {
- output_style.f = 0; // no style at present
}
}
@@ -2431,11 +2785,8 @@ void html_printer::change_font (text_glob *g, int is_to_html)
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 {
- html_change_font(g, fontname, size);
}
+ html_change_font(g, fontname, size);
}
} else {
// is to troff
@@ -2455,7 +2806,6 @@ void html_printer::change_font (text_glob *g, int is_to_html)
}
}
-
/*
* 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
@@ -2490,7 +2840,7 @@ void html_printer::terminate_current_font (void)
html_change_font(&g, 0, 0);
}
-void html_printer::write_header (void)
+void html_printer::write_header (text_glob *g)
{
if (strlen(header.header_buffer) > 0) {
if (header.header_level > 7) {
@@ -2511,16 +2861,24 @@ void html_printer::write_header (void)
header.no_of_headings++;
- text_glob *g=new text_glob(&st,
+ 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(g); // and add this header to the header list
+ 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;
}
- end_paragraph();
// and now we issue the real header
html.put_string("<h");
html.put_number(header.header_level);
@@ -2529,6 +2887,7 @@ void html_printer::write_header (void)
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;
@@ -2536,6 +2895,19 @@ void html_printer::write_header (void)
}
/*
+ * 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
*/
@@ -2572,16 +2944,16 @@ void html_printer::determine_header_level (void)
void html_printer::build_header (text_glob *g)
{
- int r = font::res;
- int height = g->text_style.point_size*r/72;
text_glob *l;
int current_vpos;
+ char buf[MAX_STRING_LENGTH];
strcpy(header.header_buffer, "");
do {
l = g;
current_vpos = g->minv;
- strcat(header.header_buffer, (char *)g->text_string);
+ 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) {
@@ -2665,10 +3037,10 @@ int html_printer::is_a_header (text_glob *g)
int html_printer::processed_header (text_glob *g)
{
- if ((guess_on) && (g->minh == left_margin_indent) && (! using_table_for_indent()) &&
+ if ((guess_on) && (g->minh <= left_margin_indent) && (! using_table_for_indent()) &&
(is_a_header(g))) {
build_header(g);
- write_header();
+ write_header(g);
return( TRUE );
} else {
return( FALSE );
@@ -2710,17 +3082,65 @@ void html_printer::move_horizontal (text_glob *g, int left_margin)
}
}
+/*
+ * looks_like_subscript - returns TRUE if, g, looks like a subscript.
+ */
+
int html_printer::looks_like_subscript (text_glob *g)
{
- return(((output_vpos < g->minv) && (output_style.point_size != 0) &&
- (output_style.point_size > g->text_style.point_size)));
+ 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)
{
- return(((output_vpos > g->minv) && (output_style.point_size != 0) &&
- (output_style.point_size > g->text_style.point_size)));
+ 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) );
}
/*
@@ -2732,15 +3152,21 @@ int html_printer::looks_like_superscript (text_glob *g)
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)) );
+ (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)
- );
+ (is_intersection(vpos, vpos+g->text_style.point_size*font::res/72-1, g->minv, g->maxv))
+ );
}
@@ -2750,11 +3176,12 @@ int html_printer::is_on_same_line (text_glob *g, int vpos)
void html_printer::make_html_indent (int indent)
{
- int r=font::res;
-
- html.put_string("<span style=\" text-indent: ");
- html.put_float(((double)(indent)/((double)r)));
- html.put_string("in;\"></span>");
+ 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>");
+ }
}
/*
@@ -2774,53 +3201,133 @@ int html_printer::using_table_for_indent (void)
int html_printer::calculate_min_gap (text_glob *g)
{
- return( g->text_style.f->get_space_width(g->text_style.point_size)*GAP_SPACES );
+ 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 *line, struct text_defn *last, int max_words)
+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;
- line[0].left = 0;
- line[0].right = 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)) {
- // found header therefore terminate indentation table
- upper_limit = -t->minv; // so we know a header has stopped the column
+ 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;
- int j =0;
+ 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))) {
- while ((last != 0) && (j<max_words) && (last[j].left != 0) && (last[j].left < t->minh)) {
- j++;
- }
- // t->minh might equal t->maxh when we are passing a special device character via \X
- // we currently ignore these when considering tables
- if (((t->minh - prevh >= mingap) || ((last != 0) && (last[j].left != 0) && (t->minh == last[j].left))) &&
+
+ /*
+ * 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)) {
- line[i].left = t->minh;
- line[i].right = 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) {
- line[i-1].right = t->maxh;
+ /*
+ * 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);
+ }
}
-
- // and record the vertical upper limit
+ /*
+ * 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()) {
@@ -2828,10 +3335,35 @@ int html_printer::collect_columns (struct text_defn *line, struct text_defn *las
}
}
- if (i<max_words) {
- line[i].left = 0;
- line[i].right = 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 );
@@ -2846,11 +3378,11 @@ int html_printer::conflict_with_words (struct text_defn *column_guess, struct te
int i=0;
int j;
- while ((column_guess[i].left != 0) && (i<MAX_WORDS_PER_LINE)) {
+ while ((column_guess[i].right != 0) && (i<MAX_WORDS_PER_LINE)) {
j=0;
- while ((words[j].left != 0) && (j<MAX_WORDS_PER_LINE)) {
+ 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].left != 0) && (words[j].right >= column_guess[i+1].left)) {
+ (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);
@@ -2876,7 +3408,7 @@ 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].left != 0); i++) {
+ for (i=0; (i<MAX_WORDS_PER_LINE) && (src[i].right != 0); i++) {
include_into_list(dest, &src[i]);
}
remove_redundant_columns(dest);
@@ -2888,7 +3420,7 @@ void html_printer::combine_line (struct text_defn *dest, struct text_defn *src)
void html_printer::remove_entry_in_line (struct text_defn *line, int j)
{
- while (line[j].left != 0) {
+ while (line[j].right != 0) {
line[j].left = line[j+1].left;
line[j].right = line[j+1].right;
j++;
@@ -2904,10 +3436,10 @@ void html_printer::remove_redundant_columns (struct text_defn *line)
int i=0;
int j=0;
- while (line[i].left != 0) {
- if ((i<MAX_WORDS_PER_LINE) && (line[i+1].left != 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].left != 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);
@@ -2929,11 +3461,11 @@ void html_printer::include_into_list (struct text_defn *line, struct text_defn *
{
int i=0;
- while ((i<MAX_WORDS_PER_LINE) && (line[i].left != 0) && (line[i].left<item->left)) {
+ while ((i<MAX_WORDS_PER_LINE) && (line[i].right != 0) && (line[i].left<item->left)) {
i++;
}
- if (line[i].left == 0) {
+ if (line[i].right == 0) {
// add to the end
if (i<MAX_WORDS_PER_LINE) {
if ((i>0) && (line[i-1].left > item->left)) {
@@ -2955,7 +3487,7 @@ void html_printer::include_into_list (struct text_defn *line, struct text_defn *
int l = line[i].left;
int r = line[i].right;
- while ((i+1<MAX_WORDS_PER_LINE) && (line[i].left != 0)) {
+ while ((i+1<MAX_WORDS_PER_LINE) && (line[i].right != 0)) {
line[i].left = left;
line[i].right = right;
i++;
@@ -2982,7 +3514,7 @@ int html_printer::is_in_column (struct text_defn *line, struct text_defn *item,
{
int i=0;
- while ((i<max_words) && (line[i].left != 0)) {
+ while ((i<max_words) && (line[i].right != 0)) {
if (line[i].left == item->left) {
return( TRUE );
} else {
@@ -3000,7 +3532,7 @@ void html_printer::calculate_right (struct text_defn *line, int max_words)
{
int i=0;
- while ((i<max_words) && (line[i].left != 0)) {
+ while ((i<max_words) && (line[i].right != 0)) {
if (i>0) {
line[i-1].right = line[i].left;
}
@@ -3017,7 +3549,7 @@ void html_printer::add_right_full_width (struct text_defn *line, int mingap)
{
int i=0;
- while ((i<MAX_WORDS_PER_LINE) && (line[i].left != 0)) {
+ while ((i<MAX_WORDS_PER_LINE) && (line[i].right != 0)) {
i++;
}
@@ -3042,7 +3574,7 @@ void html_printer::determine_right_most_column (struct text_defn *line, int max_
{
int i=0;
- while ((i<max_words) && (line[i].left != 0)) {
+ while ((i<max_words) && (line[i].right != 0)) {
i++;
}
if (i>0) {
@@ -3073,7 +3605,7 @@ int html_printer::is_column_match (struct text_defn *match,
include_into_list(match, &t);
}
- while ((line1[i].left != 0) && (line2[i].left != 0)) {
+ 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]);
@@ -3090,6 +3622,46 @@ int html_printer::is_column_match (struct text_defn *match,
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
@@ -3106,7 +3678,7 @@ int html_printer::remove_white_using_words (struct text_defn *next_guess,
int k=0;
int removed=FALSE;
- while ((last_guess[j].left != 0) && (next_line[k].left != 0)) {
+ 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;
@@ -3114,7 +3686,7 @@ int html_printer::remove_white_using_words (struct text_defn *next_guess,
i++;
j++;
k++;
- if ((next_guess[i-1].right > last_guess[j].left) && (last_guess[j].left != 0)) {
+ 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) {
@@ -3135,11 +3707,17 @@ int html_printer::remove_white_using_words (struct text_defn *next_guess,
i++;
j++;
k++;
- if ((next_guess[i-1].right > last_guess[j].left) && (last_guess[j].left != 0)) {
+ 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;
@@ -3164,7 +3742,7 @@ int html_printer::count_columns (struct text_defn *line)
{
int i=0;
- while (line[i].left != 0) {
+ while (line[i].right != 0) {
i++;
}
return( i );
@@ -3186,6 +3764,35 @@ void html_printer::rewind_text_to (text_glob *g)
}
/*
+ * 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 :-(
*/
@@ -3194,8 +3801,8 @@ void html_printer::display_columns (const char *word, const char *name, text_def
int i=0;
fprintf(stderr, "[%s:%s]", name, word);
- while (line[i].left != 0) {
- fprintf(stderr, " <left=%d right=%d> ", line[i].left, line[i].right);
+ 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");
@@ -3206,11 +3813,11 @@ void html_printer::display_columns (const char *word, const char *name, text_def
* copy_line - dest = src
*/
-int html_printer::copy_line (struct text_defn *dest, struct text_defn *src)
+void html_printer::copy_line (struct text_defn *dest, struct text_defn *src)
{
int k;
- for (k=0; ((src[k].left != 0) && (k<MAX_WORDS_PER_LINE)); 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;
}
@@ -3230,15 +3837,15 @@ void html_printer::add_column_gaps (struct text_defn *line)
struct text_defn t;
// firstly lets see whether we need an initial column on the left hand side
- if ((line[0].left != left_margin_indent) && (line[0].left != 0) &&
- (left_margin_indent < line[0].left) && (is_worth_column(left_margin_indent, line[0].left))) {
- t.left = left_margin_indent;
+ 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].left != 0)) {
- if ((i+1<MAX_WORDS_PER_LINE) && (line[i+1].left != 0) && (line[i].right != line[i+1].left) &&
+ 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;
@@ -3248,7 +3855,7 @@ void html_printer::add_column_gaps (struct text_defn *line)
i++;
}
}
- // lastly lets see whether we need a final column on the right hand side
+ // 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;
@@ -3312,9 +3919,9 @@ int html_printer::continue_searching_column (text_defn *next_col,
int words = count_columns(all_words);
if ((words == 0) || ((words == 1) &&
- (all_words[0].left == left_margin_indent) &&
+ (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
+ // no point as we have now seen a full line of contineous text with no gap
return( FALSE );
}
return( (count == count_columns(last_col)) &&
@@ -3350,16 +3957,14 @@ int html_printer::large_enough_gap (text_defn *last_col)
if (abs(last_col[i].left - left_margin_indent) >= gap) {
found = TRUE;
}
- while ((last_col[i].left != 0) && (last_col[i+1].left != 0)) {
+ 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
- if (i>0) {
- last_col[i-1].right = last_col[i].right;
- }
- remove_entry_in_line(last_col, i);
+ last_col[i].right = last_col[i+1].right;
+ remove_entry_in_line(last_col, i+1);
}
}
return( found );
@@ -3375,13 +3980,13 @@ int html_printer::is_subset_of_columns (text_defn *a, text_defn *b)
int j;
i=0;
- while ((i<MAX_WORDS_PER_LINE) && (a[i].left != 0)) {
+ while ((i<MAX_WORDS_PER_LINE) && (a[i].right != 0)) {
j=0;
- while ((j<MAX_WORDS_PER_LINE) && (b[j].left != 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].left == 0)) {
+ if ((j==MAX_WORDS_PER_LINE) || (b[j].right == 0)) {
// found a different column - not a subset
return( FALSE );
}
@@ -3391,31 +3996,28 @@ int html_printer::is_subset_of_columns (text_defn *a, text_defn *b)
}
/*
- * count_hits - counts the number of hits per column. A hit is when the
- * left hand position of a glob hits the left hand column.
+ * 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)
+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;
- int r = font::res;
- int gap = r/GAP_WIDTH_ONE_LINE;
- int n = count_columns(col);
- int left;
// firstly reset the used field
- for (i=0; i<n; i++) {
- col[i].is_used = 0;
+ for (i=0; i<no_of_columns; i++) {
+ col[i].is_used = 0;
}
// now calculate the left hand hits
- while ((g != 0) && (g->minv <= indentation.vertical_limit)) {
+ while ((g != 0) && (g->minv <= limit)) {
i=0;
- while ((col[i].left < g->minh) && (col[i].left != 0)) {
+ while ((i<no_of_columns) && (col[i].right < g->minh)) {
i++;
}
- if ((col[i].left == g->minh) && (col[i].left != 0)) {
+ if ((col[i].left == g->minh) && (col[i].right != 0)) {
col[i].is_used++;
}
page_contents->words.move_right();
@@ -3426,101 +4028,817 @@ void html_printer::count_hits (text_defn *col)
g=page_contents->words.get_data();
}
}
- // now remove any column which is less than the
- // minimal gap for one hit.
- // column 0 is excempt
+}
+
+/*
+ * 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.
+ */
- left = col[0].left;
- i=1;
- while (i<count_columns(col)) {
- if (col[i].is_used == 1) {
- if (col[i].left - left < gap) {
- col[i-1].right = col[i].right;
- remove_entry_in_line(col, i);
- left = col[i].left;
+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 {
- left = col[i].left;
- i++;
+ 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 {
- left = col[i].left;
+ // 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];
- struct text_defn last_raw [MAX_WORDS_PER_LINE];
- struct text_defn next_line [MAX_WORDS_PER_LINE];
- struct text_defn prev_guess[MAX_WORDS_PER_LINE];
- struct text_defn last_guess[MAX_WORDS_PER_LINE];
- struct text_defn next_guess[MAX_WORDS_PER_LINE];
+ 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 =0;
- int mingap=calculate_min_gap(start);
- int limit;
+ 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, "man") == 0) {
+ if (strcmp(start->text_string, "<hr>") == 0) {
stop();
}
#endif
- // get first set of potential columns into line1
- limit = collect_columns(last_guess, 0, MAX_WORDS_PER_LINE);
- copy_line(last_raw, last_guess);
- // add_right_full_width(last_guess, mingap); // adds extra right column to bring table to full width
-
- copy_line(all_words, last_guess);
+ /*
+ * 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)) {
- next_line[0].left = 0;
- next_line[0].right = 0;
+ cols_2[0].left = 0;
+ cols_2[0].right = 0;
} else {
- // and get the next line for finding columns
- limit = collect_columns(next_line, last_guess, MAX_WORDS_PER_LINE);
- lines++;
+ /*
+ * 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(last_raw, next_line, start)) {
+ /*
+ * 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);
- indentation.no_of_columns = 0; // center instead
+ /*
+ * 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 );
}
- combine_line(all_words, next_line);
+ /*
+ * remove any gaps from all_words
+ */
+ combine_line(all_words, cols_2);
if (debug_table_on) {
- display_columns(start->text_string, "[b] all_words", all_words);
+ 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);
}
- if ((! remove_white_using_words(next_guess, last_guess, next_line))) {
+ /*
+ * 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)) {
- combine_line(last_guess, next_line);
- // subtract any columns which are bridged by a sequence of words
+ /*
+ * 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_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) {
@@ -3529,40 +4847,52 @@ int html_printer::found_use_for_table (text_glob *start)
}
indentation.vertical_limit = limit;
- copy_line(last_raw, next_line);
+ copy_line(last_cols, next_cols);
+ copy_line(last_words, next_words);
if (page_contents->words.is_equal_to_head()) {
- next_line[0].left = 0;
- next_line[0].right = 0;
+ /*
+ * terminate the search
+ */
+ next_cols[0].left = 0;
+ next_cols[0].right = 0;
} else {
- limit = collect_columns(next_line, last_guess, MAX_WORDS_PER_LINE);
+ limit = collect_columns(next_words, next_cols, last_words, last_cols, MAX_WORDS_PER_LINE);
lines++;
}
-
- combine_line(all_words, next_line);
+
+ 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_raw ", last_raw);
+ 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 (debug_table_on) {
- display_columns(t->text_string, "[l] next_line", next_line);
+ 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, "market,") == 0) {
+ if (strcmp(t->text_string, "heT") == 0) {
stop();
}
#endif
-
- } while ((! remove_white_using_words(next_guess, last_guess, next_line)) &&
+
+ } 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_raw)) || (is_exact_left(last_guess, next_line))) &&
+ ((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--;
}
- lines--;
if (limit < 0) {
indentation.vertical_limit = limit;
@@ -3572,14 +4902,19 @@ int html_printer::found_use_for_table (text_glob *start)
// 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_raw)) || (is_exact_left(last_guess, next_line)))) {
+ ((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) {
@@ -3589,51 +4924,94 @@ int html_printer::found_use_for_table (text_glob *start)
}
if (debug_table_on) {
- display_columns(start->text_string, "[x] last_guess", last_guess);
+ 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 (((lines > 2) && ((i>1) || (continue_searching_column(last_guess, last_guess, all_words)))) ||
- ((lines == 1) && (large_enough_gap(last_guess)))) {
- // 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);
+ 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);
}
- indentation.no_of_columns = count_columns(last_guess);
- indentation.columns = (struct text_defn *)malloc(indentation.no_of_columns*sizeof(struct text_defn));
+ if (is_small_table(lines, last_guess, words_1, cols_1, words_2, cols_2,
+ &indentation.vertical_limit, &limit_1)) {
- 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++;
+ // 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( TRUE );
- } else {
- return( FALSE );
}
+ return( FALSE );
}
-void html_printer::define_cell (int left, int right)
-{
- float f=((float)(right-left))/((float)(right_margin_indent-left_margin_indent))*100.0;
+/*
+ * define_cell - creates a table cell using the percentage width.
+ */
- html.put_string("<td valign=\"top\" align=\"left\" width=\"");
- if (f > 1.0) {
- html.put_float(f);
- } else {
- html.put_float(1.0);
- }
+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");
}
@@ -3642,12 +5020,13 @@ void html_printer::define_cell (int left, int right)
* write out html text within this region.
*/
-void html_printer::column_display_word (int vert, int left, int right, int next)
+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(left, next);
+ define_cell(cell);
begin_paragraph_no_height(left_alignment);
while ((g != 0) && (g->minv <= vert)) {
if ((left <= g->minh) && (g->minh<right)) {
@@ -3659,7 +5038,7 @@ void html_printer::column_display_word (int vert, int left, int right, int next)
if (g->is_raw_command) {
html.put_string((char *)g->text_string);
} else {
- html.html_write_string((char *)g->text_string);
+ translate_to_html(g);
}
if (postword != 0) {
html.put_string(postword);
@@ -3673,14 +5052,6 @@ void html_printer::column_display_word (int vert, int left, int right, int next)
page_contents->words.move_right();
g=page_contents->words.get_data();
}
-#if 0
- if (page_contents->words.is_equal_to_head()) {
- g = 0;
- page_contents->words.start_from_tail();
- } else {
-
- }
-#endif
}
end_paragraph();
html.put_string("</td>\n");
@@ -3694,17 +5065,32 @@ void html_printer::column_display_word (int vert, int left, int right, int next)
}
/*
- * start_table - creates a table according with parameters contained within class html_table.
+ * total_percentages - returns the total of all the percentages in the table.
*/
-void html_printer::start_table (void)
+int html_printer::total_percentages ()
{
int i;
+ int sum=0;
- end_paragraph();
- html.put_string("\n<table width=\"100%\" rules=\"none\" frame=\"none\" cols=\"");
+ 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("\">\n");
+ html.put_string("\" cellspacing=\"0\" cellpadding=\"0\">\n");
}
/*
@@ -3715,8 +5101,21 @@ 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
*/
@@ -3746,7 +5145,7 @@ int html_printer::column_calculate_right_margin (int left, int 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();
+ // stop();
}
}
}
@@ -3762,11 +5161,7 @@ int html_printer::column_calculate_right_margin (int left, int right)
if (rightmost == -1) {
return( right ); // no words in this column
} else {
- if (count == 1) {
- return( rightmost+1 );
- } else {
- return( rightmost );
- }
+ return( rightmost );
}
}
}
@@ -3809,6 +5204,21 @@ int html_printer::column_calculate_left_margin (int left, int right)
* 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;
@@ -3831,15 +5241,24 @@ int html_printer::determine_row_limit (text_glob *start, int v)
{
text_glob *t;
int i;
- int vpos, prev, last;
- int is_gap[MAX_WORDS_PER_LINE];
+ 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
+ /*
+ * 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();
@@ -3851,16 +5270,22 @@ int html_printer::determine_row_limit (text_glob *start, int v)
(t->minv <= v));
}
}
- if (! page_contents->words.is_equal_to_head()) {
+ if (page_contents->words.is_equal_to_head()) {
+ t = &zero;
+ } else {
page_contents->words.move_left();
+ t = page_contents->words.get_data();
}
- t = page_contents->words.get_data();
+
prev = t->minv;
for (i=0; i<indentation.no_of_columns; i++) {
- is_gap[i] = prev;
+ is_gap[i] = t;
}
- if (! page_contents->words.is_equal_to_tail()) {
+ 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();
@@ -3870,18 +5295,29 @@ int html_printer::determine_row_limit (text_glob *start, int v)
do {
last = vpos;
vpos = t->minv;
- i = find_column_index(t);
- if (! is_on_same_line(t, last)) {
- prev = last;
+ 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_gap[i] != vpos) && (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( 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;
}
- is_gap[i] = vpos;
page_contents->words.move_right();
t = page_contents->words.get_data();
} while ((! page_contents->words.is_equal_to_head()) &&
@@ -3910,7 +5346,7 @@ void html_printer::assign_used_columns (text_glob *start)
if (! page_contents->words.is_empty()) {
do {
i = find_column_index(t);
- if (indentation.columns[i].left != 0) {
+ 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);
@@ -3935,6 +5371,32 @@ void html_printer::assign_used_columns (text_glob *start)
}
/*
+ * 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.
*/
@@ -3946,9 +5408,10 @@ void html_printer::foreach_column_include_text (text_glob *start)
int left, right;
int limit=-1;
- assign_used_columns(start);
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
@@ -3969,18 +5432,31 @@ void html_printer::foreach_column_include_text (text_glob *start)
if (right>indentation.columns[i].right) {
if (debug_on) {
fprintf(stderr, "assert calculated right column edge is greater than column\n"); fflush(stderr);
- stop();
+ // 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();
+ // 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(limit, left, right, indentation.columns[i].right);
+ column_display_word(i, limit, left, right, indentation.columns[i].right);
i++;
}
@@ -3996,8 +5472,8 @@ void html_printer::foreach_column_include_text (text_glob *start)
}
html.put_string("</tr>\n");
- } while ((limit < indentation.vertical_limit) && (start != 0) &&
- (! page_contents->words.is_empty()));
+ } while (((limit < indentation.vertical_limit) && (start != 0) &&
+ (! page_contents->words.is_empty())) || (limit == -1));
end_table();
if (start == 0) {
@@ -4023,8 +5499,9 @@ void html_printer::write_centered_line (text_glob *g)
move_vertical(g, center_alignment);
header.written_header = FALSE;
- output_vpos = g->minv;
- output_hpos = g->minh;
+ 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);
@@ -4032,7 +5509,7 @@ void html_printer::write_centered_line (text_glob *g)
if (g->is_raw_command) {
html.put_string((char *)g->text_string);
} else {
- html.html_write_string((char *)g->text_string);
+ translate_to_html(g);
}
if (postword != 0) {
html.put_string(postword);
@@ -4042,7 +5519,7 @@ void html_printer::write_centered_line (text_glob *g)
}
page_contents->words.move_right();
g = page_contents->words.get_data();
- } while ((! page_contents->words.is_equal_to_head()) && (g->minv == current_vpos));
+ } 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;
}
@@ -4079,7 +5556,9 @@ int html_printer::check_able_to_use_center (text_glob *g)
// 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];
- int limit = collect_columns(last_guess, 0, 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))) {
@@ -4115,12 +5594,12 @@ int html_printer::check_able_to_use_table (text_glob *g)
void html_printer::move_vertical (text_glob *g, paragraph_type p)
{
- int r =font::res;
+ 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 != para_type)) {
+ if ((more_than_line_break(output_vpos, g->minv, height)) || (p != current_paragraph->para_type)) {
end_paragraph();
begin_paragraph(p);
} else {
@@ -4156,7 +5635,7 @@ void html_printer::move_vertical (text_glob *g, paragraph_type p)
void html_printer::emit_space (text_glob *g, int force_space)
{
- if (! need_paragraph) {
+ 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();
@@ -4177,18 +5656,21 @@ char *html_printer::html_position_text (text_glob *g, int left_margin, int right
{
char *postword=0;
-#if 0
- if (strcmp(g->text_string, "increased.") == 0) {
- stop();
- }
-#endif
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 the font was reset after generating an image
+ /*
+ * 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();
@@ -4197,6 +5679,7 @@ char *html_printer::html_position_text (text_glob *g, int left_margin, int right
emit_space(g, TRUE);
}
+ // check whether the font was reset after generating an image
if (output_style.f == 0) {
change_font(g, TRUE);
}
@@ -4220,6 +5703,7 @@ char *html_printer::html_position_text (text_glob *g, int left_margin, int right
} else {
move_horizontal(g, left_margin);
}
+ supress_sub_sup = FALSE;
} else {
// we have found a new line
if (! header.written_header) {
@@ -4235,10 +5719,14 @@ char *html_printer::html_position_text (text_glob *g, int left_margin, int right
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;
@@ -4263,18 +5751,13 @@ int html_printer::html_position_region (void)
} else {
temp_vpos = output_vpos;
}
-
-#if 1
+ supress_sub_sup = TRUE;
if (need_one_newline) {
html_newline();
temp_vpos += height;
} else {
need_one_newline = TRUE;
}
-#else
- html_newline();
- temp_vpos += height;
-#endif
while ((temp_vpos < start_region_vpos) &&
(more_than_line_break(temp_vpos, start_region_vpos, height))) {
@@ -4286,29 +5769,15 @@ int html_printer::html_position_region (void)
if (auto_on && (is_in_middle(start_region_hpos, end_region_hpos))) {
is_center = TRUE;
} else {
- if (start_region_hpos > left_margin_indent) {
- html.put_string("<span style=\" text-indent: ");
- html.put_float(((double)(start_region_hpos-left_margin_indent)/((double)r)));
- html.put_string("in;\"></span>");
+ if (start_region_hpos > get_left()) {
+ make_html_indent(start_region_hpos-get_left());
}
}
-#if 0
- } else {
- // on the same line
- if (start_region_hpos > output_hpos) {
- html.put_string("<span style=\" text-indent: ");
- html.put_float(((double)(start_region_hpos-output_hpos)/((double)r)));
- html.put_string("in;\"></span>");
- }
- }
- }
-#endif
output_vpos = start_region_vpos;
output_hpos = start_region_hpos;
return( is_center );
}
-
/*
* gs_x - translate and scale the x axis
*/
@@ -4380,7 +5849,7 @@ void html_printer::end_of_line()
void html_printer::html_display_word (text_glob *g)
{
#if 0
- if (strcmp(g->text_string, "increased.") == 0) {
+ if (strcmp(g->text_string, "ot") == 0) {
stop();
}
#endif
@@ -4391,7 +5860,7 @@ void html_printer::html_display_word (text_glob *g)
if (g->is_raw_command) {
html.put_string((char *)g->text_string);
} else {
- html.html_write_string((char *)g->text_string);
+ translate_to_html(g);
}
if (postword != 0) {
html.put_string(postword);
@@ -4413,7 +5882,7 @@ void html_printer::troff_display_word (text_glob *g)
troff.put_string("\n");
} else if (l > 1) {
troff.put_string("C");
- troff.put_translated_char((char *)g->text_string);
+ troff.put_troffps_char((char *)g->text_string);
troff.put_string("\n");
}
} else {
@@ -4439,30 +5908,29 @@ void html_printer::display_word (text_glob *g, int is_to_html)
}
}
-
/*
- * this information may be better placed inside some of the font files
- * in devhtml - however one must bare in mind that we need the ability
- * to write out to TWO devices (image and html) and image
- * invokes ghostscript.
+ * translate_to_html - translates a textual string into html text
*/
-simple_output &simple_output::html_write_string (const char *s)
+void html_printer::translate_to_html (text_glob *g)
{
- int i=0;
+ char buf[MAX_STRING_LENGTH];
- while (s[i] != (char)0) {
- if (s[i] == '<') {
- put_string("&lt;");
- } else if (s[i] == '>') {
- put_string("&gt;");
- } else {
- fputc(s[i], fp);
- col++;
- }
- i++;
- }
- return *this;
+ 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 );
}
/*
@@ -4641,101 +6109,25 @@ void html_printer::display_line (graphic_glob *g, int is_to_html)
}
+/*
+ * 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 actually
+ 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);
+ sbuf_vpos , sbuf_end_hpos);
output_hpos = sbuf_end_hpos;
output_vpos = sbuf_vpos;
sbuf_len = 0;
+ sbuf_dmark_hpos = -1;
}
-
-#if 0
- 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) {
- 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)
- html.put_number(extra_space);
- if (sbuf_kern != 0)
- html.put_number(sbuf_kern);
-
- html.put_string(sbuf, sbuf_len);
-
- char sym[2];
- sym[0] = 'A' + motion*4 + space_flag + 2*(sbuf_kern != 0);
- sym[1] = '\0';
- switch (motion) {
- case NONE:
- break;
- case ABSOLUTE:
- html.put_number(sbuf_start_hpos)
- .put_number(sbuf_vpos);
- break;
- case RELATIVE_H:
- html.put_number(sbuf_start_hpos - output_hpos);
- break;
- case RELATIVE_V:
- html.put_number(sbuf_vpos - output_vpos);
- break;
- case RELATIVE_HV:
- html.put_number(sbuf_start_hpos - output_hpos)
- .put_number(sbuf_vpos - output_vpos);
- break;
- default:
- assert(0);
- }
-
- output_hpos = sbuf_end_hpos;
- output_vpos = sbuf_vpos;
- sbuf_len = 0;
-#endif
}
@@ -4893,7 +6285,7 @@ void html_printer::draw(int code, int *p, int np, const environment *env)
void html_printer::begin_page(int n)
{
page_number = n;
- html.begin_comment("Page: ").comment_arg(itoa(page_number)).end_comment();;
+ html.begin_comment("Page: ").comment_arg(i_to_a(page_number)).end_comment();;
no_of_printed_pages++;
output_style.f = 0;
@@ -4948,11 +6340,11 @@ html_printer::~html_printer()
write_title(FALSE);
header.write_headings(stdout);
{
- extern const char *version_string;
+ extern const char *Version_string;
html.begin_comment("Creator : ")
.comment_arg("groff ")
.comment_arg("version ")
- .comment_arg(version_string)
+ .comment_arg(Version_string)
.end_comment();
}
{
@@ -4966,10 +6358,7 @@ html_printer::~html_printer()
.comment_arg(ctime(&t))
.end_comment();
}
- for (font_pointer_list *f = font_list; f; f = f->next) {
- html_font *psf = (html_font *)(f->p);
- }
- html.begin_comment("Total number of pages: ").comment_arg(itoa(no_of_printed_pages)).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);
@@ -5042,29 +6431,63 @@ void html_printer::move_region_to_page (void)
}
}
+/*
+ * 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 (strcmp(s, "graphic-start") == 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 ((strcmp(s, "graphic-end") == 0) && (graphic_level > 0)) {
+ } 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 actually
+ int r=font::res; // resolution of the device
+ char buf[MAX_STRING_LENGTH];
+ font *f=sbuf_style.f;
- page_contents->add_html_command(&sbuf_style, &s[5], strlen(s)-5,
+ 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);
+ 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
@@ -5087,24 +6510,6 @@ void set_image_type (char *type)
}
}
-// 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;
-}
-
printer *make_printer()
{
return new html_printer;
@@ -5118,12 +6523,12 @@ int main(int argc, char **argv)
static char stderr_buf[BUFSIZ];
setbuf(stderr, stderr_buf);
int c;
- while ((c = getopt(argc, argv, "F:atvdgmx?I:r:")) != EOF)
+ 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);
+ extern const char *Version_string;
+ fprintf(stderr, "grohtml version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -5133,6 +6538,9 @@ int main(int argc, char **argv)
case 't':
table_on = FALSE;
break;
+ case 'T':
+ table_image_on = FALSE;
+ break;
case 'F':
font::command_line_font_dir(optarg);
break;
diff --git a/contrib/groff/grohtml/html.h b/contrib/groff/grohtml/html.h
index d61a391a1de6..370077517b6b 100644
--- a/contrib/groff/grohtml/html.h
+++ b/contrib/groff/grohtml/html.h
@@ -23,8 +23,7 @@ public:
simple_output(FILE *, int max_line_length);
simple_output &put_string(const char *, int);
simple_output &put_string(const char *s);
- simple_output &html_write_string(const char *s);
- simple_output &put_translated_char (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);
@@ -39,13 +38,14 @@ public:
simple_output &include_file(FILE *);
simple_output &copy_file(FILE *);
simple_output &end_line();
- simple_output &put_delimiter(char);
+ simple_output &put_raw_char(char);
simple_output &special(const char *);
+ simple_output &put_html_char (char);
FILE *get_file();
private:
FILE *fp;
- int col;
int max_line_length; // not including newline
+ int col;
int need_space;
int fixed_point;
};
diff --git a/contrib/groff/grohtml/html_chars.h b/contrib/groff/grohtml/html_chars.h
new file mode 100644
index 000000000000..76f094c83a7f
--- /dev/null
+++ b/contrib/groff/grohtml/html_chars.h
@@ -0,0 +1,27 @@
+// -*- 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
index 52fe1c9e605e..5f0c7e1d0c47 100644
--- a/contrib/groff/grohtml/ordered_list.h
+++ b/contrib/groff/grohtml/ordered_list.h
@@ -9,11 +9,11 @@
template <class T> class list_element
{
public:
- list_element *right;
- list_element *left;
+ list_element<T> *right;
+ list_element<T> *left;
- list_element (T *in);
- T *data;
+ list_element (T *in);
+ T *data;
};
template <class T> class ordered_list
diff --git a/contrib/groff/grohtml/output.cc b/contrib/groff/grohtml/output.cc
new file mode 100644
index 000000000000..d6dc18849baf
--- /dev/null
+++ b/contrib/groff/grohtml/output.cc
@@ -0,0 +1,257 @@
+// -*- 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
new file mode 100644
index 000000000000..d60008b297e9
--- /dev/null
+++ b/contrib/groff/grolbp/Makefile.sub
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 000000000000..adc76f4282d0
--- /dev/null
+++ b/contrib/groff/grolbp/charset.h
@@ -0,0 +1,69 @@
+// 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
new file mode 100644
index 000000000000..767197d4ca5c
--- /dev/null
+++ b/contrib/groff/grolbp/grolbp.man
@@ -0,0 +1,353 @@
+'\" 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
new file mode 100644
index 000000000000..fe06e1c41cf4
--- /dev/null
+++ b/contrib/groff/grolbp/lbp.cc
@@ -0,0 +1,772 @@
+// -*- 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
new file mode 100644
index 000000000000..04e6cecb7f14
--- /dev/null
+++ b/contrib/groff/grolbp/lbp.h
@@ -0,0 +1,512 @@
+
+// -*- 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
index 83b57127586d..bbb0cff0dc5a 100644
--- a/contrib/groff/grolj4/Makefile.sub
+++ b/contrib/groff/grolj4/Makefile.sub
@@ -3,4 +3,4 @@ MAN1=grolj4.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=lj4.o
-CCSRCS=lj4.cc
+CCSRCS=$(srcdir)/lj4.cc
diff --git a/contrib/groff/grolj4/grolj4.man b/contrib/groff/grolj4/grolj4.man
index 9a7c7fde70ef..e2d582647578 100644
--- a/contrib/groff/grolj4/grolj4.man
+++ b/contrib/groff/grolj4/grolj4.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc.
+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
@@ -26,24 +26,28 @@ the original English.
.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
-[
-.B \-lv
-] [
-.B \-d
-[\c
-.IR n ]
-] [
-.BI \-c n
-] [
-.BI \-p paper_size
-] [
-.BI \-w n
-] [
-.BI \-F dir
-] [
-.IR files \|.\|.\|.
-]
+.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
@@ -96,12 +100,34 @@ thousandths of an em.
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
-.B @FONTDIR@/devlj4/ F
+.BI @FONTDIR@/devlj4/ F
Font description file for font
.IR F .
.TP
@@ -113,7 +139,6 @@ Small dots.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
.BR groff_out (@MAN5EXT@),
.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@),
+.BR groff_char (@MAN7EXT@)
diff --git a/contrib/groff/grolj4/lj4.cc b/contrib/groff/grolj4/lj4.cc
index 002503abe899..0c23a456eb28 100644
--- a/contrib/groff/grolj4/lj4.cc
+++ b/contrib/groff/grolj4/lj4.cc
@@ -33,6 +33,7 @@ X command to include bitmap graphics
*/
#include "driver.h"
+#include "nonposix.h"
static struct {
const char *name;
@@ -567,11 +568,11 @@ printer *make_printer()
static
int lookup_paper_size(const char *s)
{
- for (int i = 0; i < sizeof(paper_table)/sizeof(paper_table[0]); i++)
- // FIXME Do this case-insensitively.
- // Perhaps allow unique prefix.
- if (strcmp(s, paper_table[i].name) == 0)
+ 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;
}
@@ -596,6 +597,8 @@ void handle_unknown_desc_command(const char *command, const char *arg,
static void usage();
+extern "C" int optopt, optind;
+
int main(int argc, char **argv)
{
program_name = argv[0];
@@ -603,7 +606,6 @@ int main(int argc, char **argv)
setbuf(stderr, stderr_buf);
font::set_unknown_desc_command_handler(handle_unknown_desc_command);
int c;
- extern int optopt, optind;
while ((c = getopt(argc, argv, ":F:p:d:lvw:c:")) != EOF)
switch(c) {
case 'l':
@@ -637,8 +639,8 @@ int main(int argc, char **argv)
}
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "grolj4 version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "grolj4 version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -675,6 +677,9 @@ int main(int argc, char **argv)
default:
assert(0);
}
+#ifdef SET_BINARY
+ SET_BINARY(fileno(stdout));
+#endif
if (optind >= argc)
do_file("-");
else {
diff --git a/contrib/groff/grops/Makefile.sub b/contrib/groff/grops/Makefile.sub
index 891472b746ef..4182527d514f 100644
--- a/contrib/groff/grops/Makefile.sub
+++ b/contrib/groff/grops/Makefile.sub
@@ -2,6 +2,11 @@ PROG=grops
MAN1=grops.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=ps.o psrm.o
-CCSRCS=ps.cc psrm.cc
-HDRS=ps.h
+OBJS=\
+ ps.o \
+ psrm.o
+CCSRCS=\
+ $(srcdir)/ps.cc \
+ $(srcdir)/psrm.cc
+HDRS=\
+ $(srcdir)/ps.h
diff --git a/contrib/groff/grops/grops.man b/contrib/groff/grops/grops.man
index 6ac082f36778..da422b4c2576 100644
--- a/contrib/groff/grops/grops.man
+++ b/contrib/groff/grops/grops.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -26,20 +26,27 @@ the original English.
.SH NAME
grops \- PostScript driver for groff
.SH SYNOPSIS
+.nr a \n(.j
+.ad l
+.nr i \n(.i
+.in +\w'\fBgrops 'u
+.ti \niu
.B grops
-[
-.B \-glmv
-] [
-.BI \-b n
-] [
-.BI \-c n
-] [
-.BI \-w n
-] [
-.BI \-F dir
-] [
-.IR files \|.\|.\|.
-]
+.de OP
+.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
+.el .RB "[\ " "\\$1" "\ ]"
+..
+.OP \-glmv
+.OP \-b n
+.OP \-c n
+.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 grops
translates the output of GNU
@@ -524,10 +531,8 @@ Conventions and contains a
.B %%BoundingBox
comment, then the bounding box can be automatically
extracted from within groff by using the
-.B sy
-request to run the
.B psbb
-command.
+request.
.RS
.LP
The
diff --git a/contrib/groff/grops/ps.cc b/contrib/groff/grops/ps.cc
index 053161a41688..c065dafae7c0 100644
--- a/contrib/groff/grops/ps.cc
+++ b/contrib/groff/grops/ps.cc
@@ -21,6 +21,7 @@ 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>
@@ -70,7 +71,7 @@ inline int is_ascii(char c)
}
ps_output::ps_output(FILE *f, int n)
-: fp(f), max_line_length(n), col(0), need_space(0), fixed_point(0)
+: fp(f), col(0), max_line_length(n), need_space(0), fixed_point(0)
{
}
@@ -289,7 +290,7 @@ ps_output &ps_output::put_number(int n)
ps_output &ps_output::put_fix_number(int i)
{
- const char *p = iftoa(i, fixed_point);
+ 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);
@@ -381,7 +382,7 @@ ps_font *ps_font::load_ps_font(const char *s)
}
ps_font::ps_font(const char *nm)
-: font(nm), encoding(0), reencoded_name(0), encoding_index(-1)
+: font(nm), encoding_index(-1), encoding(0), reencoded_name(0)
{
}
@@ -512,15 +513,15 @@ public:
};
ps_printer::ps_printer()
-: pages_output(0),
+: out(0, MAX_LINE_LENGTH),
+ pages_output(0),
sbuf_len(0),
output_hpos(-1),
output_vpos(-1),
- out(0, MAX_LINE_LENGTH),
- ndefined_styles(0),
- next_encoding_index(0),
line_thickness(-1),
fill(FILL_MAX + 1),
+ ndefined_styles(0),
+ next_encoding_index(0),
ndefs(0),
invis_count(0)
{
@@ -819,8 +820,13 @@ void ps_printer::flush_sbuf()
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] = 'A' + motion*4 + space_flag + 2*(sbuf_kern != 0);
+ sym[0] = command_array[motion*4 + space_flag + 2*(sbuf_kern != 0)];
sym[1] = '\0';
switch (motion) {
case NONE:
@@ -1066,8 +1072,8 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
void ps_printer::begin_page(int n)
{
- out.begin_comment("Page:").comment_arg(itoa(n));
- out.comment_arg(itoa(++pages_output)).end_comment();
+ 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;
@@ -1106,11 +1112,11 @@ ps_printer::~ps_printer()
putchar('\n');
out.set_file(stdout);
{
- extern const char *version_string;
+ extern const char *Version_string;
out.begin_comment("Creator:")
.comment_arg("groff")
.comment_arg("version")
- .comment_arg(version_string)
+ .comment_arg(Version_string)
.end_comment();
}
{
@@ -1128,7 +1134,7 @@ ps_printer::~ps_printer()
rm.need_font(psf->get_internal_name());
}
rm.print_header_comments(out);
- out.begin_comment("Pages:").comment_arg(itoa(pages_output)).end_comment();
+ 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",
@@ -1473,8 +1479,8 @@ int main(int argc, char **argv)
switch(c) {
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "grops version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "grops version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -1514,6 +1520,9 @@ int main(int argc, char **argv)
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 {
diff --git a/contrib/groff/grops/psrm.cc b/contrib/groff/grops/psrm.cc
index 140b154e70c5..91b7e6f131a9 100644
--- a/contrib/groff/grops/psrm.cc
+++ b/contrib/groff/grops/psrm.cc
@@ -51,6 +51,29 @@ const char *resource_table[] = {
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;
@@ -67,7 +90,7 @@ struct resource {
};
resource::resource(resource_type t, string &n, string &v, unsigned r)
-: type(t), revision(r), flags (0), filename(0), rank(-1), next(0)
+: next(0), type(t), flags(0), revision(r), filename(0), rank(-1)
{
name.move(n);
version.move(v);
@@ -96,14 +119,18 @@ void resource::print_type_and_name(FILE *outfp)
}
resource_manager::resource_manager()
-: resource_list(0), extensions(0), language_level(0)
+: 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, 0);
+ procset_version, revision_uint);
procset_resource->flags |= resource::SUPPLIED;
}
@@ -450,29 +477,6 @@ static int read_text_arg(const char **pp, string &res)
return 1;
}
-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;
-}
-
resource *resource_manager::read_file_arg(const char **ptr)
{
string arg;
@@ -695,7 +699,7 @@ int read_one_of(const char **ptr, const char **s, int n)
return -1;
const char *start = *ptr;
do {
- ++ptr;
+ ++(*ptr);
} while (**ptr != '\0' && !white_space(**ptr));
for (int i = 0; i < n; i++)
if (strlen(s[i]) == *ptr - start
@@ -940,13 +944,13 @@ void resource_manager::process_file(int rank, FILE *fp, const char *filename,
const char *ptr;
int i;
for (i = 0; i < NCOMMENTS; i++)
- if (ptr = matches_comment(buf, comment_table[i].name)) {
+ 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"))
+ if ((ptr = matches_comment(buf, "EndComments")))
in_header = 0;
else if (!had_extensions_comment
&& (ptr = matches_comment(buf, "Extensions:"))) {
diff --git a/contrib/groff/grotty/Makefile.sub b/contrib/groff/grotty/Makefile.sub
index b0002cb88f3f..91d3908c00fe 100644
--- a/contrib/groff/grotty/Makefile.sub
+++ b/contrib/groff/grotty/Makefile.sub
@@ -3,4 +3,4 @@ MAN1=grotty.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=tty.o
-CCSRCS=tty.cc
+CCSRCS=$(srcdir)/tty.cc
diff --git a/contrib/groff/grotty/grotty.man b/contrib/groff/grotty/grotty.man
index d8d6ebdeb0a1..51c6a498126f 100644
--- a/contrib/groff/grotty/grotty.man
+++ b/contrib/groff/grotty/grotty.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -28,6 +28,10 @@ grotty \- groff driver for typewriter-like devices
] [
.IR files \|.\|.\|.
]
+.PP
+It is possible to have whitespace between the
+.B \-F
+option and its parameter.
.SH DESCRIPTION
.B grotty
translates the output of GNU
@@ -39,10 +43,13 @@ should invoked by using the
.B groff
command
with a
-.B \-Tascii
-or
+.BR \-Tascii ,
.B \-Tlatin1
-option.
+or
+.B \-Tutf8
+option on ASCII based systems, and with
+.B \-Tcp1047
+on EBCDIC based hosts.
If no files are given,
.B grotty
will read the standard input.
@@ -118,9 +125,11 @@ Search the directory
for font and device description files;
.I name
is the name of the device, usually
-.B ascii
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
or
-.BR latin1 .
+.BR cp1047 .
.TP
.B \-h
Use horizontal tabs in the output.
@@ -172,22 +181,48 @@ Device description file for
.B ascii
device.
.TP
-.B @FONTDIR@/devascii/ F
+.BI @FONTDIR@/devascii/ F
Font description file for font
.I F
of
-.B ascii device.
+.B ascii
+device.
.TP
.B @FONTDIR@/devlatin1/DESC
Device description file for
.B latin1
device.
.TP
-.B @FONTDIR@/devlatin1/ F
+.BI @FONTDIR@/devlatin1/ F
+Font description file for font
+.I F
+of
+.B latin1
+device.
+.TP
+.B @FONTDIR@/devutf8/DESC
+Device description file for
+.B utf8
+device.
+.TP
+.BI @FONTDIR@/devutf8/ F
+Font description file for font
+.I F
+of
+.B utf8
+device.
+.TP
+.B @FONTDIR@/devcp1047/DESC
+Device description file for
+.B cp1047
+device.
+.TP
+.BI @FONTDIR@/devcp1047/ F
Font description file for font
.I F
of
-.B latin1 device.
+.B cp1047
+device.
.TP
.B @MACRODIR@/tmac.tty
Macros for use with
@@ -196,6 +231,10 @@ Macros for use with
.B @MACRODIR@/tmac.tty-char
Additional klugey character definitions for use with
.BR grotty .
+.LP
+Note that on EBCDIC hosts, only files for the
+.B cp1047
+device will be installed.
.SH BUGS
.LP
.B grotty
diff --git a/contrib/groff/grotty/tty.cc b/contrib/groff/grotty/tty.cc
index c44edc6c2040..63d8fb8fe527 100644
--- a/contrib/groff/grotty/tty.cc
+++ b/contrib/groff/grotty/tty.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2000 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -19,6 +19,7 @@ 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)
@@ -103,7 +104,7 @@ class glyph {
public:
glyph *next;
short hpos;
- unsigned char code;
+ unsigned int code;
unsigned char mode;
void *operator new(size_t);
void operator delete(void *);
@@ -136,23 +137,26 @@ void glyph::operator delete(void *p)
}
class tty_printer : public printer {
+ int is_utf8;
glyph **lines;
int nlines;
int cached_v;
int cached_vpos;
- void add_char(unsigned char, int, int, unsigned char);
+ void add_char(unsigned int, int, int, unsigned char);
public:
- tty_printer();
+ 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() : cached_v(0)
+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++)
@@ -171,7 +175,7 @@ void tty_printer::set_char(int i, font *f, const environment *env, int w, const
add_char(f->get_code(i), env->hpos, env->vpos, ((tty_font *)f)->get_mode());
}
-void tty_printer::add_char(unsigned char c, int h, int v, unsigned char mode)
+void tty_printer::add_char(unsigned int c, int h, int v, unsigned char mode)
{
#if 0
// This is too expensive.
@@ -266,6 +270,33 @@ void tty_printer::draw(int code, int *p, int np, const environment *env)
}
}
+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)
@@ -340,10 +371,10 @@ void tty_printer::end_page(int page_length)
putchar('\b');
}
if (p->mode & BOLD_MODE) {
- putchar(p->code);
+ put_char(p->code);
putchar('\b');
}
- putchar(p->code);
+ put_char(p->code);
hpos++;
}
putchar('\n');
@@ -365,7 +396,7 @@ font *tty_printer::make_font(const char *nm)
printer *make_printer()
{
- return new tty_printer;
+ return new tty_printer(device);
}
static void usage();
@@ -380,8 +411,8 @@ int main(int argc, char **argv)
switch(c) {
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "grotty version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "grotty version %s\n", Version_string);
fflush(stderr);
break;
}
diff --git a/contrib/groff/hpftodit/Makefile.sub b/contrib/groff/hpftodit/Makefile.sub
index 16744d9f5f4a..f5ff13e48654 100644
--- a/contrib/groff/hpftodit/Makefile.sub
+++ b/contrib/groff/hpftodit/Makefile.sub
@@ -3,4 +3,4 @@ MAN1=hpftodit.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
OBJS=hpftodit.o
-CCSRCS=hpftodit.cc
+CCSRCS=$(srcdir)/hpftodit.cc
diff --git a/contrib/groff/hpftodit/hpftodit.cc b/contrib/groff/hpftodit/hpftodit.cc
index c11f8cbb1cd3..2e5978c10f1e 100644
--- a/contrib/groff/hpftodit/hpftodit.cc
+++ b/contrib/groff/hpftodit/hpftodit.cc
@@ -39,6 +39,7 @@ put filename in error messages (or fix lib)
#include "errarg.h"
#include "error.h"
#include "cset.h"
+#include "nonposix.h"
#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
@@ -219,8 +220,8 @@ int main(int argc, char **argv)
break;
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "hpftodit version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "hpftodit version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -273,7 +274,9 @@ void usage()
File::File(const char *s)
{
- int fd = open(s, O_RDONLY);
+ // 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;
@@ -290,6 +293,24 @@ File::File(const char *s)
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)
@@ -774,6 +795,18 @@ int read_map(const char *file)
static
const char *xbasename(const char *s)
{
- const char *b = strrchr(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
index 75af154e2191..d107e8c8d549 100644
--- a/contrib/groff/hpftodit/hpftodit.man
+++ b/contrib/groff/hpftodit/hpftodit.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+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
@@ -36,6 +36,10 @@ hpftodit \- create font description files for use with groff \-Tlj4
.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
diff --git a/contrib/groff/include/Makefile.sub b/contrib/groff/include/Makefile.sub
index 35d34401c647..500f05974dc3 100644
--- a/contrib/groff/include/Makefile.sub
+++ b/contrib/groff/include/Makefile.sub
@@ -1,5 +1,25 @@
-HDRS=assert.h cmap.h cset.h device.h driver.h errarg.h error.h font.h index.h \
- lib.h macropath.h printer.h ptable.h refid.h search.h searchpath.h \
+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)
@@ -7,9 +27,11 @@ CLEANADD=$(GENHDRS)
all depend: $(GENHDRS)
defs.h: FORCE
- @$(SHELL) $(srcdir)/../gendef.sh defs.h \
- "PROG_PREFIX=\"$(g)\"" "DEVICE=\"$(DEVICE)\"" \
- "FONTPATH=\"$(fontpath)\"" "MACROPATH=\"$(tmacpath)\"" \
+ @$(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)\"" \
diff --git a/contrib/groff/include/driver.h b/contrib/groff/include/driver.h
index c18cdd422cc3..c0384c71d023 100644
--- a/contrib/groff/include/driver.h
+++ b/contrib/groff/include/driver.h
@@ -20,6 +20,9 @@ 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>
diff --git a/contrib/groff/include/font.h b/contrib/groff/include/font.h
index e981bc1d0680..099f97bea180 100644
--- a/contrib/groff/include/font.h
+++ b/contrib/groff/include/font.h
@@ -50,6 +50,7 @@ public:
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();
@@ -72,6 +73,8 @@ public:
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;
diff --git a/contrib/groff/include/getopt.h b/contrib/groff/include/getopt.h
new file mode 100644
index 000000000000..b0147e9d2ac3
--- /dev/null
+++ b/contrib/groff/include/getopt.h
@@ -0,0 +1,169 @@
+/* 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
new file mode 100644
index 000000000000..1807fc7ccfb9
--- /dev/null
+++ b/contrib/groff/include/groff-getopt.h
@@ -0,0 +1,68 @@
+// -*- 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
new file mode 100644
index 000000000000..96a63884d40e
--- /dev/null
+++ b/contrib/groff/include/htmlindicate.h
@@ -0,0 +1,41 @@
+// -*- 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/lib.h b/contrib/groff/include/lib.h
index 1c46089ac76a..2af894acca1e 100644
--- a/contrib/groff/include/lib.h
+++ b/contrib/groff/include/lib.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2000 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -22,50 +22,31 @@ extern "C" {
#ifndef strerror
char *strerror(int);
#endif
-#ifndef __BORLANDC__
- const char *itoa(int);
- const char *iftoa(int, int);
-#endif /* __BORLANDC__ */
+ const char *i_to_a(int);
+ const char *if_to_a(int, int);
}
-#ifdef STDLIB_H_DECLARES_GETOPT
-#include <stdlib.h>
-#else /* not STDLIB_H_DECLARES_GETOPT */
-#ifdef UNISTD_H_DECLARES_GETOPT
-#include <sys/types.h>
-#include <unistd.h>
-#else /* not UNISTD_H_DECLARES_GETOPT */
-extern "C" {
- int getopt(int, char *const *, const char *);
-}
-#endif /* not UNISTD_H_DECLARES_GETOPT */
-
-extern "C" {
- extern char *optarg;
- extern int optind;
- extern int opterr;
-}
-
-#endif /* not STDLIB_H_DECLARES_GETOPT */
+#include <groff-getopt.h>
char *strsave(const char *s);
int is_prime(unsigned);
#include <stdio.h>
-FILE *xtmpfile();
+FILE *xtmpfile(char **namep=0, char *postfix=0, int do_unlink=1);
+char *xtmptemplate(char *extension=0);
-#ifndef STDIO_H_DECLARES_POPEN
+#ifdef NEED_DECLARATION_POPEN
extern "C" { FILE *popen(const char *, const char *); }
-#endif /* not STDIO_H_DECLARES_POPEN */
+#endif /* NEED_DECLARATION_POPEN */
-#ifndef STDIO_H_DECLARES_PCLOSE
+#ifdef NEED_DECLARATION_PCLOSE
extern "C" { int pclose (FILE *); }
-#endif /* not STDIO_H_DECLARES_PCLOSE */
+#endif /* NEED_DECLARATION_PCLOSE */
int interpret_lf_args(const char *p);
@@ -76,6 +57,14 @@ 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 */
diff --git a/contrib/groff/include/nonposix.h b/contrib/groff/include/nonposix.h
new file mode 100644
index 000000000000..e4b02da3c2e0
--- /dev/null
+++ b/contrib/groff/include/nonposix.h
@@ -0,0 +1,137 @@
+/* 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
index 312e49b7f981..1b7d5cdc3424 100644
--- a/contrib/groff/include/posix.h
+++ b/contrib/groff/include/posix.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 2000 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -25,8 +25,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <osfcn.h>
#else
#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
+#endif
#ifndef S_IRUSR
#define S_IRUSR 0400
diff --git a/contrib/groff/indxbib/Makefile.sub b/contrib/groff/indxbib/Makefile.sub
index b23b425c566e..2c50e659af95 100644
--- a/contrib/groff/indxbib/Makefile.sub
+++ b/contrib/groff/indxbib/Makefile.sub
@@ -2,14 +2,20 @@ PROG=indxbib
MAN1=indxbib.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=indxbib.o dirnamemax.o signal.o
-CCSRCS=indxbib.cc
-CSRCS=dirnamemax.c signal.c
+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) || mkdir $(datadir)
- -test -d $(datasubdir) || mkdir $(datasubdir)
+ -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 \
diff --git a/contrib/groff/indxbib/indxbib.cc b/contrib/groff/indxbib/indxbib.cc
index fe310c35bb3b..3185fe2cda89 100644
--- a/contrib/groff/indxbib/indxbib.cc
+++ b/contrib/groff/indxbib/indxbib.cc
@@ -35,9 +35,13 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "index.h"
+#include "nonposix.h"
+
extern "C" {
- // Sun's stdlib.h fails to declare this.
+ // 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
@@ -169,8 +173,8 @@ int main(int argc, char **argv)
break;
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU indxbib version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU indxbib version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -197,7 +201,15 @@ int main(int argc, char **argv)
read_common_words_file();
if (!basename)
basename = optind < argc ? argv[optind] : DEFAULT_INDEX_NAME;
- const char *p = strrchr(basename, '/');
+ 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);
@@ -219,13 +231,19 @@ int main(int argc, char **argv)
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, "w");
+ indxfp = fdopen(fd, FOPEN_WB);
if (indxfp == 0)
fatal("fdopen failed");
if (fseek(indxfp, sizeof(index_header), 0) < 0)
@@ -274,7 +292,22 @@ int main(int argc, char **argv)
strcat(index_file, INDEX_SUFFIX);
#ifdef HAVE_RENAME
if (rename(temp_index_file, index_file) < 0)
- fatal("can't rename temporary index file: %1", strerror(errno));
+ {
+#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) {
@@ -422,7 +455,9 @@ static int do_whole_file(const char *filename)
static int do_file(const char *filename)
{
errno = 0;
- FILE *fp = fopen(filename, "r");
+ // 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;
@@ -452,6 +487,21 @@ static int do_file(const char *filename)
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:
diff --git a/contrib/groff/indxbib/indxbib.man b/contrib/groff/indxbib/indxbib.man
index 914cb6980489..ed84ccaec2c8 100644
--- a/contrib/groff/indxbib/indxbib.man
+++ b/contrib/groff/indxbib/indxbib.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -43,6 +43,9 @@ the original English.
.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
diff --git a/contrib/groff/libbib/Makefile.sub b/contrib/groff/libbib/Makefile.sub
index e9418288a492..482f01abcf66 100644
--- a/contrib/groff/libbib/Makefile.sub
+++ b/contrib/groff/libbib/Makefile.sub
@@ -1,4 +1,14 @@
LIB=bib
-OBJS=common.o index.o linear.o search.o map.o
-CCSRCS=common.cc index.cc linear.cc search.cc
-CSRCS=map.c
+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/index.cc b/contrib/groff/libbib/index.cc
index 2c11f06cdff1..55737717dcbe 100644
--- a/contrib/groff/libbib/index.cc
+++ b/contrib/groff/libbib/index.cc
@@ -35,6 +35,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "index.h"
#include "defs.h"
+#include "nonposix.h"
+
// Interface to mmap.
extern "C" {
void *mapread(int fd, int len);
@@ -105,9 +107,9 @@ public:
index_search_item::index_search_item(const char *filename, int fid)
-: search_item(filename, fid), out_of_date_files(0), key_buffer(0),
- filename_buffer(0), filename_buflen(0), common_words_table(0),
- map_addr(0), map_len(0), buffer(0)
+: 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)
{
}
@@ -274,7 +276,7 @@ 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);
+ 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);
@@ -297,9 +299,10 @@ search_item *make_index_search_item(const char *filename, int fid)
index_search_item_iterator::index_search_item_iterator(index_search_item *ind,
const char *q)
-: indx(ind), buf(0), buflen(0), temp_list(0), query(strsave(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),
- out_of_date_files_iter(0), next_out_of_date_file(0)
+ query(strsave(q))
{
found_list = indx->search(q, strlen(q), &temp_list);
if (!found_list) {
@@ -357,7 +360,7 @@ int index_search_item_iterator::get_tag(int tagno,
}
tag *tp = indx->tags + tagno;
const char *filename = indx->munge_filename(indx->pool + tp->filename_index);
- int fd = open(filename, O_RDONLY);
+ int fd = open(filename, O_RDONLY | O_BINARY);
if (fd < 0) {
error("can't open `%1': %2", filename, strerror(errno));
return 0;
@@ -375,7 +378,7 @@ int index_search_item_iterator::get_tag(int tagno,
return 0;
}
int res = 0;
- FILE *fp = fdopen(fd, "r");
+ FILE *fp = fdopen(fd, FOPEN_RB);
if (!fp) {
error("fdopen failed");
close(fd);
@@ -409,6 +412,20 @@ int index_search_item_iterator::get_tag(int tagno,
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)
@@ -423,10 +440,11 @@ int index_search_item_iterator::get_tag(int tagno,
const char *index_search_item::munge_filename(const char *filename)
{
- if (filename[0] == '/')
+ if (IS_ABSOLUTE(filename))
return filename;
const char *cwd = pool;
- int need_slash = (cwd[0] != 0 && strchr(cwd, '\0')[-1] != '/');
+ 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;
@@ -613,7 +631,7 @@ void index_search_item::check_files()
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);
+ int fd = open(path, O_RDONLY | O_BINARY);
if (fd < 0)
error("can't open `%1': %2", path, strerror(errno));
else
diff --git a/contrib/groff/libbib/linear.cc b/contrib/groff/libbib/linear.cc
index 3d2729af1523..a8c2a553735d 100644
--- a/contrib/groff/libbib/linear.cc
+++ b/contrib/groff/libbib/linear.cc
@@ -30,6 +30,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "error.h"
#include "cset.h"
#include "cmap.h"
+#include "nonposix.h"
#include "refid.h"
#include "search.h"
@@ -330,6 +331,19 @@ int file_buffer::load(int fd, const char *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';
@@ -345,7 +359,7 @@ int file_buffer::load(int fd, const char *filename)
linear_searcher::linear_searcher(const char *query, int query_len,
const char *ign, int trunc)
-: keys(0), nkeys(0), truncate_len(trunc), ignore_fields(ign)
+: ignore_fields(ign), truncate_len(trunc), keys(0), nkeys(0)
{
const char *query_end = query + query_len;
int nk = 0;
diff --git a/contrib/groff/libbib/search.cc b/contrib/groff/libbib/search.cc
index b5363b02d105..1e027c609711 100644
--- a/contrib/groff/libbib/search.cc
+++ b/contrib/groff/libbib/search.cc
@@ -27,6 +27,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "lib.h"
#include "errarg.h"
#include "error.h"
+#include "nonposix.h"
#include "refid.h"
#include "search.h"
@@ -53,7 +54,7 @@ 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);
+ int fd = open(filename, O_RDONLY | O_BINARY);
if (fd < 0) {
if (!silent)
error("can't open `%1': %2", filename, strerror(errno));
@@ -107,7 +108,7 @@ int search_list_iterator::next(const char **pp, int *lenp, reference_id *ridp)
}
search_item::search_item(const char *nm, int fid)
-: next(0), name(strsave(nm)), filename_id(fid)
+: name(strsave(nm)), filename_id(fid), next(0)
{
}
diff --git a/contrib/groff/libdriver/Makefile.sub b/contrib/groff/libdriver/Makefile.sub
index 1b3c09f1c815..d50f060bd917 100644
--- a/contrib/groff/libdriver/Makefile.sub
+++ b/contrib/groff/libdriver/Makefile.sub
@@ -1,3 +1,7 @@
LIB=driver
-OBJS=input.o printer.o
-CCSRCS=input.cc printer.cc
+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
index 41411dc83559..ba71a5b3e703 100644
--- a/contrib/groff/libdriver/input.cc
+++ b/contrib/groff/libdriver/input.cc
@@ -22,7 +22,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "device.h"
#include "cset.h"
-const char *current_filename;
+const char *current_filename=0;
int current_lineno;
const char *device = 0;
FILE *current_file;
@@ -49,11 +49,31 @@ 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') {
- current_filename = "<standard input>";
+ remember_filename(filename);
current_file = stdin;
}
else {
@@ -63,7 +83,7 @@ void do_file(const char *filename)
error("can't open `%1'", filename);
return;
}
- current_filename = filename;
+ remember_filename(filename);
}
environment env;
env.vpos = -1;
@@ -130,6 +150,9 @@ void do_file(const char *filename)
case 'f':
env.fontno = get_integer();
break;
+ case 'F':
+ remember_filename(get_string());
+ break;
case 'C':
{
if (npages == 0)
diff --git a/contrib/groff/libdriver/printer.cc b/contrib/groff/libdriver/printer.cc
index 7abe746246de..770aa50711be 100644
--- a/contrib/groff/libdriver/printer.cc
+++ b/contrib/groff/libdriver/printer.cc
@@ -28,7 +28,7 @@ font_pointer_list::font_pointer_list(font *f, font_pointer_list *fp)
}
printer::printer()
-: font_table(0), nfonts(0), font_list(0)
+: font_list(0), font_table(0), nfonts(0)
{
}
diff --git a/contrib/groff/libgroff/Makefile.sub b/contrib/groff/libgroff/Makefile.sub
index a3126bf047db..5ce0691af5a8 100644
--- a/contrib/groff/libgroff/Makefile.sub
+++ b/contrib/groff/libgroff/Makefile.sub
@@ -1,15 +1,84 @@
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 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 illegal.o $(LIBOBJS)
-CCSRCS=assert.cc change_lf.cc cmap.cc cset.cc device.cc errarg.cc error.cc \
- fatal.cc filename.cc font.cc fontfile.cc lf.cc lineno.cc macropath.cc \
- nametoindex.cc new.cc prime.cc progname.cc ptable.cc searchpath.cc \
- string.cc strsave.cc tmpfile.cc version.cc illegal.cc
-CSRCS=fmod.c getcwd.c iftoa.c itoa.c matherr.c strerror.c strtol.c putenv.c
-GENSRCS=version.cc
+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.cc: $(srcdir)/../VERSION
+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 = \"`cat $(srcdir)/../VERSION`\"\; >$@
+ @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/errarg.cc b/contrib/groff/libgroff/errarg.cc
index ea30c370b594..be4d3dc9d31b 100644
--- a/contrib/groff/libgroff/errarg.cc
+++ b/contrib/groff/libgroff/errarg.cc
@@ -57,14 +57,14 @@ int errarg::empty() const
}
extern "C" {
- const char *itoa(int);
+ const char *i_to_a(int);
}
void errarg::print() const
{
switch (type) {
case INTEGER:
- fputs(itoa(n), stderr);
+ fputs(i_to_a(n), stderr);
break;
case CHAR:
putc(c, stderr);
diff --git a/contrib/groff/libgroff/font.cc b/contrib/groff/libgroff/font.cc
index 40e49bde4cc2..c3bfa23ea479 100644
--- a/contrib/groff/libgroff/font.cc
+++ b/contrib/groff/libgroff/font.cc
@@ -41,6 +41,7 @@ struct font_char_metric {
int pre_math_space;
int italic_correction;
int subscript_correction;
+ char *special_device_coding;
};
struct font_kern_list {
@@ -80,7 +81,7 @@ struct text_file {
};
text_file::text_file(FILE *p, char *s)
-: lineno(0), buf(0), size(0), skip_comments(1), fp(p), path(s)
+: fp(p), path(s), lineno(0), size(0), skip_comments(1), buf(0)
{
}
@@ -147,8 +148,8 @@ void text_file::error(const char *format,
/* font functions */
font::font(const char *s)
-: special(0), ligatures(0), kern_hash_table(0), space_width(0),
- ch(0), ch_used(0), ch_size(0), ch_index(0), nindices(0), widths_cache(0)
+: ligatures(0), kern_hash_table(0), space_width(0), ch_index(0), nindices(0),
+ ch(0), ch_used(0), ch_size(0), special(0), widths_cache(0)
{
name = new char[strlen(s) + 1];
strcpy(name, s);
@@ -359,6 +360,12 @@ const char *font::get_internal_name()
return internalname;
}
+const char *font::get_special_device_encoding(int c)
+{
+ assert(c >= 0 && c < nindices && ch_index[c] >= 0);
+ return( ch[ch_index[c]].special_device_coding );
+}
+
void font::alloc_ch_index(int index)
{
if (nindices == 0) {
@@ -464,7 +471,7 @@ static char *trim_arg(char *p)
return p;
}
-// If the font can't be found, then if not_found is NULL it will be set
+// If the font can't be found, then if not_found is non-NULL, it will be set
// to 1 otherwise a message will be printed.
int font::load(int *not_found)
@@ -663,6 +670,20 @@ int font::load(int *not_found)
t.error("bad code `%1' for character `%2'", p, nm);
return 0;
}
+
+ p = strtok(0, WS);
+ if ((p == NULL) || (strcmp(p, "--") == 0)) {
+ metric.special_device_coding = NULL;
+ } else {
+ char *name=(char *)malloc(strlen(p)+1);
+
+ if (name == NULL) {
+ fatal("malloc failed while reading character encoding");
+ }
+ strcpy(name, p);
+ metric.special_device_coding = name;
+ }
+
if (strcmp(nm, "---") == 0) {
last_index = number_to_index(metric.code);
add_entry(last_index, metric);
@@ -750,6 +771,12 @@ int font::load_desc()
else if (strcmp("tcommand", p) == 0) {
tcommand = 1;
}
+ else if (strcmp("pass_filenames", p) == 0) {
+ pass_filenames = 1;
+ }
+ else if (strcmp("use_charnames_in_special", p) == 0) {
+ use_charnames_in_special = 1;
+ }
else if (strcmp("family", p) == 0) {
p = strtok(0, WS);
if (!p) {
diff --git a/contrib/groff/libgroff/fontfile.cc b/contrib/groff/libgroff/fontfile.cc
index e86579aee2a5..fa87b861f955 100644
--- a/contrib/groff/libgroff/fontfile.cc
+++ b/contrib/groff/libgroff/fontfile.cc
@@ -43,6 +43,8 @@ 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;
diff --git a/contrib/groff/libgroff/getopt.c b/contrib/groff/libgroff/getopt.c
new file mode 100644
index 000000000000..4744e43390ac
--- /dev/null
+++ b/contrib/groff/libgroff/getopt.c
@@ -0,0 +1,1055 @@
+/* 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
new file mode 100644
index 000000000000..3d264f2db4d5
--- /dev/null
+++ b/contrib/groff/libgroff/getopt1.c
@@ -0,0 +1,188 @@
+/* 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
new file mode 100644
index 000000000000..91e53a26b5ed
--- /dev/null
+++ b/contrib/groff/libgroff/htmlindicate.cc
@@ -0,0 +1,67 @@
+/* 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
index 75cd5e44dbd6..fa108337054d 100644
--- a/contrib/groff/libgroff/iftoa.c
+++ b/contrib/groff/libgroff/iftoa.c
@@ -19,7 +19,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define INT_DIGITS 19 /* enough for 64-bit integer */
-char *iftoa(i, decimal_point)
+char *if_to_a(i, decimal_point)
int i, decimal_point;
{
/* room for a -, INT_DIGITS digits, a decimal point, and a terminating '\0' */
diff --git a/contrib/groff/libgroff/illegal.cc b/contrib/groff/libgroff/illegal.cc
index 10f4d5bd7d54..c1bdbc507966 100644
--- a/contrib/groff/libgroff/illegal.cc
+++ b/contrib/groff/libgroff/illegal.cc
@@ -3,6 +3,7 @@
// Table of illegal input characters.
char illegal_char_table[256]= {
+#ifndef IS_EBCDIC_HOST
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19,4 +20,22 @@ char illegal_char_table[256]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#else
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#endif
};
diff --git a/contrib/groff/libgroff/itoa.c b/contrib/groff/libgroff/itoa.c
index 69f21cc88932..c811c7655249 100644
--- a/contrib/groff/libgroff/itoa.c
+++ b/contrib/groff/libgroff/itoa.c
@@ -19,7 +19,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define INT_DIGITS 19 /* enough for 64 bit integer */
-char *itoa(i)
+char *i_to_a(i)
int i;
{
/* Room for INT_DIGITS digits, - and '\0' */
diff --git a/contrib/groff/libgroff/nametoindex.cc b/contrib/groff/libgroff/nametoindex.cc
index 694cab94b83c..39a7b697a5a1 100644
--- a/contrib/groff/libgroff/nametoindex.cc
+++ b/contrib/groff/libgroff/nametoindex.cc
@@ -79,7 +79,7 @@ int character_indexer::numbered_char_index(int n)
// Not the most efficient possible implementation.
char buf[INT_DIGITS + 3];
buf[0] = ' ';
- strcpy(buf + 1, itoa(n));
+ strcpy(buf + 1, i_to_a(n));
return named_char_index(buf);
}
diff --git a/contrib/groff/libgroff/searchpath.cc b/contrib/groff/libgroff/searchpath.cc
index 730b5d9967f1..a857c258114a 100644
--- a/contrib/groff/libgroff/searchpath.cc
+++ b/contrib/groff/libgroff/searchpath.cc
@@ -25,6 +25,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "lib.h"
#include "searchpath.h"
+#include "nonposix.h"
search_path::search_path(const char *envvar, const char *standard)
{
@@ -32,7 +33,7 @@ search_path::search_path(const char *envvar, const char *standard)
if (e && standard) {
dirs = new char[strlen(e) + strlen(standard) + 2];
strcpy(dirs, e);
- strcat(dirs, ":");
+ strcat(dirs, PATH_SEP);
strcat(dirs, standard);
}
else
@@ -59,11 +60,11 @@ void search_path::command_line_dir(const char *s)
char *p = dirs;
p += old_len - init_len;
if (init_len == 0)
- *p++ = ':';
+ *p++ = PATH_SEP[0];
memcpy(p, s, slen);
p += slen;
if (init_len > 0) {
- *p++ = ':';
+ *p++ = PATH_SEP[0];
memcpy(p, old + old_len - init_len, init_len);
p += init_len;
}
@@ -75,7 +76,7 @@ void search_path::command_line_dir(const char *s)
FILE *search_path::open_file(const char *name, char **pathp)
{
assert(name != 0);
- if (*name == '/' || dirs == 0 || *dirs == '\0') {
+ if (IS_ABSOLUTE(name) || dirs == 0 || *dirs == '\0') {
FILE *fp = fopen(name, "r");
if (fp) {
if (pathp)
@@ -88,10 +89,10 @@ FILE *search_path::open_file(const char *name, char **pathp)
unsigned namelen = strlen(name);
char *p = dirs;
for (;;) {
- char *end = strchr(p, ':');
+ char *end = strchr(p, PATH_SEP[0]);
if (!end)
end = strchr(p, '\0');
- int need_slash = end > p && end[-1] != '/';
+ 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)
diff --git a/contrib/groff/libgroff/string.cc b/contrib/groff/libgroff/string.cc
index dd291769362e..4bcd4cccb047 100644
--- a/contrib/groff/libgroff/string.cc
+++ b/contrib/groff/libgroff/string.cc
@@ -77,7 +77,7 @@ static char *srealloc(char *ptr, int oldsz, int oldlen, int newlen, int *sizep)
}
}
-string::string() : len(0), ptr(0), sz(0)
+string::string() : ptr(0), len(0), sz(0)
{
}
diff --git a/contrib/groff/libgroff/tmpfile.cc b/contrib/groff/libgroff/tmpfile.cc
index 280d87c5e224..ffc165cedf7f 100644
--- a/contrib/groff/libgroff/tmpfile.cc
+++ b/contrib/groff/libgroff/tmpfile.cc
@@ -27,9 +27,11 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "lib.h"
#include "errarg.h"
#include "error.h"
+#include "nonposix.h"
extern "C" {
- // Sun's stdlib.h fails to declare this.
+ // Solaris 2.5.1 has these functions,
+ // but its stdlib.h fails to declare them.
char *mktemp(char *);
int mkstemp(char *);
}
@@ -38,62 +40,148 @@ extern "C" {
#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"
+# define DEFAULT_TMPDIR "/tmp"
+#endif
// Use this as the prefix for temporary filenames.
#define TMPFILE_PREFIX "groff"
-// Open a temporary file with fatal error on failure.
+/*
+ * 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.
+ */
-FILE *xtmpfile()
+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;
}
-
- const char *p = strrchr(dir, '/');
- int needs_slash = (!p || p[1]);
+
+ 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];
+ + 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, "w+");
+ 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, "w+");
+ FILE *fp = fopen(templ, FOPEN_RWB);
if (!fp)
fatal("cannot open `%1': %2", templ, strerror(errno));
#endif /* not HAVE_MKSTEMP */
- if (unlink(templ) < 0)
- error("cannot unlink `%1': %2", templ, strerror(errno));
- a_delete templ;
+ if (do_unlink)
+ add_tmp_file(templ);
+ if ((namep != 0) && ((*namep) != 0)) {
+ *namep = templ;
+ } else {
+ a_delete templ;
+ }
return fp;
}
-#if 0
+#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()
+FILE *xtmpfile(char **namep, char *postfix, int do_unlink)
{
FILE *fp = tmpfile();
if (!fp)
fatal("couldn't create temporary file");
return fp;
}
-#endif
+
+#endif /* _MSC_VER */
diff --git a/contrib/groff/lkbib/Makefile.sub b/contrib/groff/lkbib/Makefile.sub
index 30035bcf0514..8f31e10f5fad 100644
--- a/contrib/groff/lkbib/Makefile.sub
+++ b/contrib/groff/lkbib/Makefile.sub
@@ -3,4 +3,4 @@ MAN1=lkbib.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=lkbib.o
-CCSRCS=lkbib.cc
+CCSRCS=$(srcdir)/lkbib.cc
diff --git a/contrib/groff/lkbib/lkbib.cc b/contrib/groff/lkbib/lkbib.cc
index 6cba5e58e448..cfd099a53d46 100644
--- a/contrib/groff/lkbib/lkbib.cc
+++ b/contrib/groff/lkbib/lkbib.cc
@@ -73,8 +73,8 @@ int main(int argc, char **argv)
}
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU lkbib version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU lkbib version %s\n", Version_string);
fflush(stderr);
break;
}
diff --git a/contrib/groff/lkbib/lkbib.man b/contrib/groff/lkbib/lkbib.man
index f16a77ec6940..872313de0155 100644
--- a/contrib/groff/lkbib/lkbib.man
+++ b/contrib/groff/lkbib/lkbib.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -42,6 +42,9 @@ lkbib \- search bibliographic databases
.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
diff --git a/contrib/groff/lookbib/Makefile.sub b/contrib/groff/lookbib/Makefile.sub
index 1183812c5616..91b140453153 100644
--- a/contrib/groff/lookbib/Makefile.sub
+++ b/contrib/groff/lookbib/Makefile.sub
@@ -3,5 +3,5 @@ MAN1=lookbib.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=lookbib.o
-CCSRCS=lookbib.cc
+CCSRCS=$(srcdir)/lookbib.cc
NAMEPREFIX=$(g)
diff --git a/contrib/groff/lookbib/lookbib.cc b/contrib/groff/lookbib/lookbib.cc
index 7154a0178602..4240a47fe9b4 100644
--- a/contrib/groff/lookbib/lookbib.cc
+++ b/contrib/groff/lookbib/lookbib.cc
@@ -72,8 +72,8 @@ int main(int argc, char **argv)
}
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU lookbib version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU lookbib version %s\n", Version_string);
fflush(stderr);
break;
}
diff --git a/contrib/groff/lookbib/lookbib.man b/contrib/groff/lookbib/lookbib.man
index 465990bae475..846798dce02d 100644
--- a/contrib/groff/lookbib/lookbib.man
+++ b/contrib/groff/lookbib/lookbib.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -31,6 +31,9 @@ the original English.
.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,
diff --git a/contrib/groff/man/Makefile.sub b/contrib/groff/man/Makefile.sub
index 9b871148e856..020d20ff20f1 100644
--- a/contrib/groff/man/Makefile.sub
+++ b/contrib/groff/man/Makefile.sub
@@ -1,2 +1,7 @@
-MAN5=groff_font.n groff_out.n
-MAN7=groff_char.n
+MAN5=\
+ groff_font.n \
+ groff_out.n
+MAN7=\
+ groff_char.n \
+ groff.n \
+ roff.n
diff --git a/contrib/groff/man/groff.man b/contrib/groff/man/groff.man
new file mode 100644
index 000000000000..73c91889987a
--- /dev/null
+++ b/contrib/groff/man/groff.man
@@ -0,0 +1,2785 @@
+.\" st -*- nroff -*-
+.ig
+groff.7
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2000 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+
+Last update: 17 May 2000
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.if n \{\
+. mso tmac.tty-char
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \{\
+. ftr CB CW
+.\}
+.
+.\" a comment macro which does nothing
+.de c
+..
+.
+.\" a tab string
+.ds t "\t
+.
+.eo
+.
+.c text lines in macro definitions or bracketed sections \{...\}
+.de text
+. if 1 \&\$*\&
+..
+.
+.de option
+. ds @tmp@ \f(CB\$1\fP
+. shift 1
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.als shellcommand option
+.
+.c --------- characters ---------
+.
+.de character
+. ds @tmp@ \f(CB\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de 'char
+. ds @tmp@ \(oq\f(CB\$1\fP\(cq
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de ''char
+. ds @tmp@ \(lq\f(CB\$1\fP\(rq
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- requests ---------
+.
+.c request synopsis
+.de REQ
+. ds @tmp@ \&\$1
+. shift 1
+. IP "\f(CB\&\*[@tmp@] \fP\f(CI\&\$*\fP" 10n
+. rm @tmp@
+..
+.
+.de request
+. ds @tmp@ \f(CB\$1\fP
+. shift 1
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- macro or function arguments ---------
+.
+.de argument
+. ds @tmp@ \f(CI\$1\fP
+. shift 1
+. while (\n[.$] >= 2) \{\
+. as @tmp@ \/\f(CR\$1\fP\f(CI\,\$2\fP
+. shift 2
+. \}
+. if \n[.$] .as @tmp@ \/\f(CR\$1\fP
+. text \*[@tmp@]
+. rm @tmp@
+..
+.
+.c argument followed by a numerical expression
+.de argterm
+. ds @tmp@ \f(CI\$1\fP\|\f(CR\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- numerical elements ---------
+.
+.de number
+. ds @tmp@ \f(CR\$1\fP
+. shift 1
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de prefixednumber
+. ds @tmp@ \&\$1\ \f(CR\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.als scaleindicator request
+.
+.de scalednumber
+. ds @tmp@ \f(CR\$1\fP\f(CB\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de operator
+. ds @tmp@ \(oq\f(CB\$1\fP\(cq
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- escape sequences ---------
+.
+.de esc[arg]
+. ds @tmp@ \f(CB\(rs\$1[\fP\f(CI\$2\fP\f(CB]\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc(arg
+. ds @tmp@ \f(CB\(rs\$1(\fP\f(CI\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de escarg
+. ds @tmp@ \f(CB\(rs\$1\fP\f(CI\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc[]
+. ds @tmp@ \f(CB\(rs[\fP\f(CI\$1\fP\f(CB]\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc(
+. ds @tmp@ \f(CB\(rs(\fP\f(CI\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc
+. ds @tmp@ \f(CB\(rs\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de (esc
+. ds @tmp@ \f(CB\(rs(\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de [esc]
+. ds @tmp@ \f(CB\(rs[\$1]\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c escape sequence synopsis
+.de ESC
+. ds @tmp@ \&\$1
+. shift 1
+. IP "\f(CB\(rs\&\*[@tmp@]\fP\f(CI\&\$*\fP"
+. rm @tmp@
+..
+.
+.c synopsis for escape sequences with a long name
+.de ESC[]
+. ds @arg1@ \&\$1
+. ds @arg2@ \&\$2
+. shift 2
+. IP "\f(CB\(rs\&\*[@arg1@][\fP\f(CI\&\*[@arg2@]\fP\f(CB]\&\$*\fP"
+. rm @arg1@
+. rm @arg2@
+..
+.
+.c synopsis escape sequence with quoted argument
+. de ESCq
+. ds @tmp@ \&\$1
+. shift 1
+. IP "\f(CB\(rs\&\*[@tmp@]\(cq\fP\f(CI\h'-0.2m'\$*\/\fP\f(CB\(cq\fP"
+. rm @tmp@
+..
+.
+.c synopsis for 2-escapes (special characters)
+.de ESc
+. ds @tmp@ \$1
+. TP 14n
+. text \f(CB\(rs(\&\*[@tmp@]\ \ \ \fP\fR\(\*[@tmp@]\fP
+. shift 1
+. text \$*.
+. rm @tmp@
+..
+.
+.c --------- registers ---------
+.
+.c synopsis for registers
+.de REG
+. TP 10n
+. text \&\f(CR\(rsn[\fP\f(CB\$1\fP\f(CR]\fP
+. shift 1
+.if \n[.$] \&\$*
+..
+.
+.als register request
+.
+.c --------- warnings ---------
+.
+.als warning request
+.
+.c description of warnings
+.de Warning
+. ne (2v + 1)
+. TP 12n
+. text \f(CB\$1\fP
+. text \f(CI\$2\fP
+. br
+..
+.
+.ec
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.
+.TH GROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff \- a short reference for the GNU roff language
+.
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.I groff
+stands for
+.I GNU roff
+and is the free implementation of the roff type-setting system.
+See
+.BR roff (@MAN7EXT@)
+for a survey and the background of the groff system.
+.LP
+This document gives only short descriptions of the predefined roff
+language elements as used in groff.
+Both the classical features and the groff extensions are provided.
+.LP
+Historically, the
+.I roff language
+was called
+.IR troff .
+.I groff
+is compatible with the classical system and provides proper extensions.
+So in GNU, the terms
+.IR roff ,
+.IR troff ,
+and
+.I groff language
+could be used as synonyms.
+However
+.I troff
+slightly tends to refer more to the classical aspects, whereas
+.I groff
+emphasizes the GNU extensions, and
+.I roff
+is the general term for the language.
+.LP
+This file is only a short version of the complete documentation that is
+found in the
+.I groff
+.BR info (1)
+file, which contains more detailed, actual, and concise information.
+.LP
+The general syntax for writing groff documents is relatively easy, but
+writing extensions to the roff language can be a bit harder.
+.LP
+The roff language is line-oriented.
+There are only two kinds of lines, control lines and text lines.
+The control lines start with a control character, by default a period
+.''char .
+or a single quote
+.''char ' ;
+all other lines are text lines.
+.LP
+.B Control lines
+represent commands, optionally with arguments.
+They have the following syntax.
+The leading control character can be followed by a command name;
+arguments, if any, are separated by blanks from the command name and
+among themselves, for example,
+.RS
+.LP
+\&\.command_name arg1 arg2
+.RE
+.LP
+For indentation, any number of space or tab characters can be inserted
+between the leading control character and the command name, but the control
+character must be on the first position of the line.
+.LP
+.B Text lines
+represent the parts that will be printed.
+They can be modified by escape sequences, which are recognized by a
+leading backslash
+.'char \(rs .
+These are in-line or even in-word formatting elements or functions.
+Some of these take arguments separated by single quotes
+.''char ' ,
+others are regulated by a length encoding introduced by an open
+parenthesis
+.'char (
+or enclosed in brackets
+.'char [
+and
+.'char ] .
+.LP
+The roff language provides flexible instruments for writing language
+extension, such as macros.
+When interpreting macro definitions, the roff system enters a special
+operating mode, called the
+.BR "copy mode" .
+.LP
+The copy mode behavior can be quite tricky, but there are some rules
+that ensure a safe usage.
+.IP 1.
+Printable backslashes must be denoted as
+.esc e .
+To be more precise,
+.esc e
+represents the current escape character.
+To get a backslash glyph, use
+.esc (rs .
+.IP 2.
+Double all backslashes.
+.IP 3.
+Begin all text lines with the special non-spacing character
+.esc & .
+.LP
+This does not produce the most efficient code, but it should work as a
+first measure.
+For better strategies, see the groff info file and
+.BR groff_tmac (@MAN5EXT@).
+.LP
+Reading roff source files is easier, just reduce all double backslashes
+to a single one in all macro definitions.
+.
+.\" --------------------------------------------------------------------
+.SH "GROFF ELEMENTS"
+.\" --------------------------------------------------------------------
+The roff language elements add formatting information to a text file.
+The fundamental elements are predefined commands and variables that make
+roff a full-blown programming language.
+.LP
+There are two kinds of roff commands, possibly with arguments.
+.B Requests
+are written on a line of their own starting with a dot
+.'char .
+or a
+.''char ' ,
+whereas
+.B Escape sequences
+are in-line functions and in-word formatting elements starting with a
+backslash
+.'char \(rs .
+.LP
+The user can define her own formatting commands using the
+.request .de
+request. These commands are called
+.BR macros ,
+but they are used exactly like requests. Macro packages are pre-defined
+sets of macros written in the groff language.
+A user's possibilities to create escape sequences herself is very
+limited, only special characters can be mapped.
+.LP
+The groff language provides several kinds of variables with
+different interfaces.
+There are pre-defined variables, but the user can define her own
+variables as well.
+.LP
+.B String
+variables store character sequences.
+They are set with the
+.request .ds
+request and retrieved by the
+.esc *
+escape sequences.
+.LP
+.B Register
+variables can store numerical values, numbers with a scale unit, and
+occasionally string-like objects.
+They are set with the
+.request .nr
+request and retrieved by the
+.esc n
+escape sequences.
+.LP
+.B Environments
+allow the user to temporarily store global formatting parameters like
+line length, font size, etc. for later reuse.
+This is done by the
+.request .ev
+request.
+.LP
+.B Fonts
+are identified either by a name or by an internal number.
+The current font is chosen by the
+.request .ft
+request or by the
+.esc f
+escape sequences.
+Each device has special fonts, but the following fonts are available for
+all devices.
+.B R
+is the standard font Roman.
+.B B
+is its
+.B bold
+counterpart.
+The
+.I italic
+font is called
+.B I
+is everywhere available, but on text devices, it is displayed as an
+underlined Roman font.
+For the graphical output devices, there exist constant-width pendants of
+these font,
+.BR CR ,
+.BR CI ,
+and
+.BR CB .
+On text devices, all characters have a constant width anyway.
+.LP
+Moreover, there are some advanced roff elements.
+A
+.B diversion
+stores information into a macro for later usage.
+A
+.B trap
+is a positional condition like a certain number of lines from page top
+or in a diversion or in the input.
+Some action can be prescribed to be run automatically when the condition
+is met.
+.LP
+More detailed information can be found in the groff info file.
+.
+.\" --------------------------------------------------------------------
+.SH "CONTROL CHARACTERS"
+.\" --------------------------------------------------------------------
+There is a small set of characters that have a special controlling task
+in certain conditions.
+.TP
+.character .
+A dot is only special at the beginning of a line or after the
+condition in the requests
+.request .if ,
+.request .ie ,
+.request .el ,
+and
+.request .while .
+There it is the control character that introduces a request (or macro).
+The special behavior can be delayed by using the
+.esc .
+escape.
+By using the
+.request .cc
+request, the control character can be set to a different character,
+making the dot
+.'char .
+a non-special character.
+.IP ""
+In all other positions, it just means a dot character.
+In text paragraphs, it is advantageous to start each sentence at a line
+of its own.
+.TP
+.character '
+The single quote has two controlling tasks. At the beginning of a line
+and in the conditional requests it is the non-breaking control
+character.
+That means that it introduces a request like the dot, but with the
+additional property that this request doesn't cause a linebreak.
+By using the
+.request .c2
+request, the non-break control character can be set to a different
+character.
+.IP ""
+As a second task, it is the most commonly used argument separator in
+some functional escape sequences (but any pair of characters not part
+of the argument will work).
+In all other positions, it denotes the single quote or apostrophe
+character.
+Groff provides a printable representation with the
+.esc (cq
+escape sequence.
+.TP
+.character \(dq
+The double quote is used to enclose arguments in requests and macros.
+The escaped double quote
+.esc \(dq
+introduces a comment.
+Otherwise, it is not special.
+Groff provides a printable representation with the
+.esc (dq
+escape sequence.
+.TP
+.character \(rs
+The backslash usually introduces an escape sequence (this can be
+changed with the
+.request ec
+request).
+A printed version of the escape character is the
+.esc e
+escape; a backslash glyph can be obtained by
+.esc (rs .
+.TP
+.character (
+The open parenthesis is only special in escape sequences when
+introducing an escape name or argument consisting of exactly two
+characters.
+In groff, this behavior can be replaced by the \f(CB[]\fP construct.
+.TP
+.character [
+The opening bracket is only special in groff escape sequences; there it
+is used to introduce a long escape name or long escape argument.
+Otherwise, it is non-special, e.g. in macro calls.
+.TP
+.character ]
+The closing bracket is only special in groff escape sequences; there it
+terminates a long escape name or long escape argument.
+Otherwise, it is non-special.
+.TP
+\f(CIspace\fP
+Space characters are only functional characters. They separate the
+arguments in requests or macros, and the words in text lines.
+They are subject to groff's horizontal spacing calculations.
+To get a defined space width, escape sequences like
+.'char "\(rs\ "
+(this is the escape character followed by a space),
+.esc | ,
+.esc ^ ,
+or
+.esc h
+should be used.
+.IP \f(CInewline\fP
+In text paragraphs, newlines mostly behave like space characters.
+Continuation lines can be specified by an escaped newline, i.e., by
+specifying a backslash
+.'char \(rs
+as the last character of a line.
+.IP \f(CItab\fP
+If a tab character occurs during text the interpreter makes a horizontal
+jump to the next pre-defined tab position.
+There is a sophisticated interface for handling tab positions.
+.
+.\" --------------------------------------------------------------------
+.SH "NUMERICAL EXPRESSIONS"
+.\" --------------------------------------------------------------------
+A
+.B numerical value
+is a signed or unsigned integer or float with or without an appended
+scale indicator.
+A
+.B scale indicator
+is a one-character abbreviation for a unit of measurement.
+A number followed by a scale indicator signifies a size value.
+By default, numerical values do not have a scale indicator, i.e., they are
+normal numbers.
+.LP
+The roff language defines the following scale indicators.
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCB Lw(4i).
+c@Centimeter
+i@Inch
+P@Pica\ \(eq\ 1/6\ inch
+p@Point\ \(eq\ 1/72\ inch
+m@T{
+Em\ \(eq\ \fRthe font size in points (width of letter `\f(CRm\fR')
+T}
+M@100th \fRof an \f(CREm
+n@En\ \(eq\ Em/2
+u@\fRBasic unit for actual output device
+v@\fRVertical line space in basic units
+z@T{
+scaled point\ \(eq\ 1/\f(CIsizescale\fR of a point (defined in
+font \fIDESC\fP file)
+T}
+.TE
+.LP
+.ad
+.hy
+.B Numerical expressions
+are combinations of the numerical values defined above with
+the arithmetical operators
+.operator + ,
+.operator \- ,
+.operator * ,
+.operator / ,
+.operator %
+.RI ( modulo ),
+the comparative operators
+.operator ==
+(this is the same as
+.operator = ),
+.operator <= ,
+.operator >= ,
+.operator < ,
+.operator > ,
+the logical operators
+.operator &
+.RI ( and ),
+.operator :
+.RI ( or ),
+.operator !
+.RI ( not ),
+and the parentheses
+.operator (
+and
+.operator ) .
+.LP
+Moreover,
+.I groff
+added the following operators for numerical expressions:
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCB Lw(4i).
+e1\f(CB>?\fPe2@The maximum of \f(CIe1\fP and \f(CIe2\fP.
+e1\f(CB<?\fPe2@The minimum of \f(CIe1\fP and \f(CIe2\fP.
+\f(CB(\fPc\f(CB;\fPe\f(CB)@T{
+Evaluate \f(CIe\fP using \f(CIc\fP as the default scaling
+indicator.
+T}
+.TE
+.LP
+.ad
+.hy
+For details see the groff info file.
+.
+.\" --------------------------------------------------------------------
+.SH CONDITIONS
+.\" --------------------------------------------------------------------
+.B Conditions
+occur in tests raised by the
+.request .if ,
+.request .ie ,
+and the
+.request .while
+requests.
+The following table characterizes the different types of conditions.
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCB Lw(4i).
+\f(CIN\fP@T{
+A numerical expression \f(CIN\fP yields true if its value
+is\ \f(CR>0\fP.
+T}
+!\f(CIN\fP@T{
+True if the value of \f(CIN\fP is\ \f(CR\(<=0\fP.
+T}
+\&'\f(CIs1\fP'\f(CIs2\fP'@T{
+True if string\ \f(CIs1\fP is identical to string\ \f(CIs2\fP.
+T}
+!'\f(CIs1\fP'\f(CIs2\fP'@T{
+True if string\ \f(CIs1\fP is not identical to string\ \f(CIs2\fP.
+T}
+c\f(CIch@T{
+True if there is a character\ \f(CIch\fP available.
+T}
+d\f(CIname@T{
+True if there is a string, macro, diversion, or request
+called \f(CIname\fP.
+T}
+e@Current page number is even.
+o@Current page number is odd.
+n@Formatter is \fBnroff\fP.
+r\f(CIreg@T{
+True if there is a register named \f(CIreg\fP.
+T}
+t@Formatter is \fBtroff\fR.
+.TE
+.LP
+.ad
+.hy
+.
+.\" --------------------------------------------------------------------
+.SH REQUESTS
+.\" --------------------------------------------------------------------
+This section provides a short reference for the predefined requests.
+In groff, request and macro names can be arbitrarily long.
+No bracketing or marking of long names is needed.
+.LP
+Most requests take one or more arguments.
+The arguments are separated by space characters (no tabs!); there is no
+inherent limit for their length or number.
+An argument can be enclosed by a pair of double quotes: This is very handy
+if an argument contains space characters, e.g.,
+.argument "\(dqarg\ with\ space\(dq"
+denotes a single argument.
+.LP
+Some requests have optional arguments with a different behaviour.
+Not all of these details are outlined here.
+Refer to the groff info file for all details.
+.LP
+In the following request specifications, most argument names were chosen
+to be descriptive.
+Only the following denotations need clarification.
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCI Lw(4i).
+c@denotes a single character.
+font@T{
+a font either specified as a font name or a font number.
+T}
+anything@T{
+all characters up to the end of the line or within \f(CB\(rs{\fP
+and \f(CB\(rs}\fP.
+T}
+n@T{
+is a numerical expression that evaluates to an integer value.
+T}
+N@T{
+is an arbitrary numerical expression, signed or unsigned.
+T}
+\(+-N@T{
+has three meanings depending on its sign, described below.
+T}
+.TE
+.LP
+.ad
+.hy
+If an expression defined as
+.argument \(+-N
+starts with a
+.operator +
+sign the resulting value of the expression will be added to an already
+existing value inherent to the related request, e.g. adding to a number
+register.
+If the expression starts with a
+.operator -
+the value of the expression will be subtracted from the request value.
+.LP
+Without a sign,
+.argument N
+replaces the existing value directly.
+To assign a negative number either prepend\ \c
+.number 0
+or enclose the negative number in parentheses.
+.
+.\" --------------------------------------------------------------------
+.SS "REQUEST SHORT REFERENCE"
+.\" --------------------------------------------------------------------
+.PD 0
+.
+.REQ .
+Empty line, ignored. Useful for structuring documents.
+.
+.REQ .\(rs\(dq anything
+Complete line is a comment.
+.
+.REQ .ab string
+Print
+.argument string
+on standard error, exit program.
+.
+.REQ .ad
+Begin line adjustment for output lines in current adjust mode.
+.
+.REQ .ad c
+Start line adjustment in mode
+.argument c
+(\f(CIc\fP\f(CR\|\^\(eq\|l,r,b,n\fP).
+.
+.REQ .af register c
+Assign format
+.argument c
+to
+.argument register
+(\f(CIc\fP\f(CR\|\^\(eq\|l,i,I,a,A\fP).
+.
+.REQ .aln alias register
+Create alias name for
+.argument register .
+.
+.REQ .als alias object
+Create alias name for request, string, macro, or diversion
+.argument object .
+.
+.REQ .am macro
+Append to
+.argument macro
+until
+.request ..
+is called.
+.
+.REQ .am macro end
+Append to
+.argument macro
+until
+.request .end
+is called.
+.
+.REQ .as stringvar anything
+Append
+.argument anything
+to
+.argument stringvar .
+.
+.REQ .asciify diversion
+Unformat special ASCII characters in
+.argument diversion .
+.
+.REQ .backtrace
+Print a backtrace of the input on stderr.
+.
+.REQ .bd font N
+Embolden
+.argument font
+by
+.argterm N -1
+units.
+.
+.REQ .bd S font N
+Embolden Special Font
+.argument S
+when current font is
+.argument font .
+.
+.REQ .bp
+Eject current page and begin new page.
+.
+.REQ .bp \(+-N
+Eject current page; next page number
+.argument \(+-N .
+.
+.REQ .blm macro
+Set the blank line macro to
+.argument macro .
+.
+.REQ .br
+Line break.
+.
+.REQ .break
+Break out of a while loop.
+.
+.REQ .c2
+Reset no-break control character to
+.''char ' .
+.
+.REQ .c2 c
+Set no-break control character to
+.argument c .
+.
+.REQ .cc
+Reset control character to
+.'char . .
+.
+.REQ .cc c
+Set control character to
+.argument c .
+.
+.REQ .ce
+Center the next input line.
+.
+.REQ .ce N
+Center following
+.argument N
+input lines.
+.
+.REQ .cf filename
+Copy contents of file
+.argument filename
+unprocessed to stdout or to the diversion.
+.
+.REQ .cflags mode c1 c2 ...
+Treat characters
+.argument c1 ,
+.argument c2 ,
+.argument ...
+according to
+.argument mode
+number.
+.
+.REQ .ch trap N
+Change
+.argument trap
+location
+to
+.argument N .
+.
+.REQ .char c anything
+Define character
+.argument c
+to string
+.argument anything .
+.
+.REQ .chop object
+Chop the last character off macro, string, or diversion
+.argument object .
+.
+.REQ .close stream
+Close the
+.argument stream .
+.
+.REQ .continue
+Finish the current iteration of a while loop.
+.
+.REQ .cp
+Enable compatibility mode.
+.
+.REQ .cp N
+If
+.I N
+is zero disable compatibility mode, otherwise enable it.
+.
+.REQ .cs font N M
+Set constant character width mode for
+.argument font
+to
+.argterm N /36
+ems with em
+.argument M .
+.
+.REQ .cu N
+Continuous underline in nroff, like
+.request .ul
+in troff.
+.
+.REQ .da macro
+Divert and append to
+.argument macro .
+.
+.REQ .de macro
+Define or redefine
+.argument macro
+until
+.request ..
+is called.
+.
+.REQ .de macro end
+Define or redefine
+.argument macro
+until
+.request .end
+is called.
+.
+.REQ .di
+End current diversion.
+.
+.REQ .di macro
+Divert to
+.argument macro .
+.
+.REQ .do name
+Interpret
+.request .name
+with compatibility mode enabled.
+.
+.REQ .ds stringvar anything
+Set
+.argument stringvar
+to
+.argument anything .
+.
+.REQ .dt N trap
+Set diversion trap to position
+.argument N
+(default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .ec
+Reset escape character to
+.'char \(rs .
+.
+.REQ .ec c
+Set escape character to
+.argument c .
+.
+.REQ .el anything
+Else part for if-else (\c
+.argument .ie )
+request.
+.
+.REQ .em macro
+The
+.argument macro
+will be run after the end of input.
+.
+.REQ .eo
+Turn off escape character mechanism.
+.
+.REQ .ev
+Switch to previous environment.
+.
+.REQ .ev env
+Push down environment number or name
+.argument env
+and switch to it.
+.
+.REQ .evc env
+Copy the contents of environment
+.argument env
+to the current environment.
+No pushing or popping.
+.
+.REQ .ex
+Exit from roff processing.
+.
+.REQ .fam name
+Set the current font family to
+.argument name .
+.
+.REQ .fc
+Disable field mechanism.
+.
+.REQ .fc a
+Set field delimiter to
+.argument a
+and pad character to space.
+.REQ .fc a b
+Set field delimiter to
+.argument a
+and pad character to
+.argument b .
+.
+.REQ .fi
+Fill output lines.
+.
+.REQ .fl
+Flush output buffer.
+.
+.REQ .fp n font
+Mount
+.argument font
+on position
+.argument n .
+.
+.REQ .fp n internal external
+Mount font with long
+.argument external
+name to short
+.argument internal
+name on position
+.argument n .
+.
+.REQ .fspecial font s1 s2...
+When the current font is
+.argument font ,
+then the fonts
+.argument s1 ,
+.argument s2 ,
+.argument ...
+will be special.
+.
+.REQ .ft
+Return to previous font.
+Same as
+.request \(rsfP .
+.REQ .ft font
+Change to font name or number
+.argument font ;
+same as
+.esc[arg] f font
+escape sequence.
+.
+.REQ .ftr font1 font2
+Translate
+.argument font1
+to
+.argument font2 .
+.
+.REQ .hc
+Remove additional hyphenation indicator character.
+.
+.REQ .hc c
+Set up additional hyphenation indicator character\ \c
+.argument c .
+.
+.REQ .hcode c1 code1 c2 code2 ...
+Set the hyphenation code of character
+.argument c1
+to
+.argument code1 ,
+that of
+.argument c2
+to
+.argument code2 ,
+etc.
+.
+.REQ .hla lang
+Set the current hyphenation language to
+.argument lang .
+.
+.REQ .hlm n
+Set the maximum number of consecutive hyphenated lines to
+.argument n .
+.
+.REQ .hpf file
+Read hyphenation patterns from
+.argument file .
+.
+.REQ .hw words
+List of
+.argument words
+with exceptional hyphenation.
+.
+.REQ .hy N
+Switch to hyphenation mode
+.argument N .
+.
+.REQ .hym n
+Set the hyphenation margin to
+.argument n
+(default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .hys n
+Set the hyphenation space to
+.argument n .
+.
+.REQ .ie cond anything
+If
+.argument cond
+then
+.argument anything
+else goto
+.request .el .
+.
+.REQ .if cond anything
+If
+.argument cond
+then
+.argument anything ;
+otherwise do nothing.
+.
+.REQ .ig
+Ignore text until
+.request ..
+is called.
+.
+.REQ .ig end
+Ignore text until
+.request .end .
+.
+.REQ .in
+Change to previous indent value.
+.
+.REQ .in \(+-N
+Change indent according to
+.argument \(+-N
+(default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .it N trap
+Set an input-line count trap at position
+.argument N .
+.
+.REQ .kern
+Enable pairwise kerning.
+.
+.REQ .kern n
+If
+.argument n
+is zero, disable pairwise kerning, otherwise enable it.
+.
+.REQ .lc
+Remove leader repetition character.
+.
+.REQ .lc c
+Set leader repetition character to\ \c
+.argument c .
+.
+.REQ .length register anything
+Write the length of the string
+.argument anything
+in
+.argument register .
+.
+.REQ .lf N file
+Set input line number to
+.argument N
+and filename to
+.argument file .
+.
+.REQ .lg N
+Ligature mode on if
+.argterm N >0 .
+.
+.REQ .ll
+Change to previous line length.
+.
+.REQ .ll \(+-N
+Set line length according to
+.argument \(+-N
+(default size
+.scalednumber 6.5 i ,
+default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .ls
+Change to the previous value of additional intra-line skip.
+.
+.REQ .ls N
+Set additional intra-line skip value to
+.argument N ,
+i.e.,
+.argterm N -1
+blank lines are inserted after each text output line.
+.
+.REQ .lt \(+-N
+Length of title (default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .mc
+Margin character off.
+.
+.REQ .mc c
+Print character
+.argument c
+after each text line at actual distance from right margin.
+.
+.REQ .mc c N
+Set margin character to
+.argument c
+and distance to
+.argument N
+from right margin (default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .mk register
+Mark current vertical position in
+.argument register .
+.
+.REQ .mso file
+The same as the .so request except that
+.I file
+is also searched in the tmac directories.
+.
+.REQ .na
+No output-line adjusting.
+.
+.REQ .ne
+Need a one-line vertical space.
+.
+.REQ .ne N
+Need
+.argument N
+vertical space (default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .nf
+No filling or adjusting of output-lines.
+.
+.REQ .nh
+No hyphenation.
+.
+.REQ .nm
+Number mode off.
+.
+.REQ .nm \(+-N M S I
+In line number mode, set number, multiple, spacing, and indent.
+.
+.REQ .nn
+Do not number next line.
+.
+.REQ .nn N
+Do not number next
+.argument N
+lines.
+.
+.REQ .nr register \(+-N M
+Define or modify
+.argument register
+using
+.argument \(+-N
+with auto-increment
+.argument M .
+.
+.REQ .nroff
+Make the built-in condition
+.B n
+true and
+.B t
+false.
+.
+.REQ .ns
+Turn no-space mode on.
+.
+.REQ .nx filename
+Next file.
+.
+.REQ .open stream filename
+Open
+.register filename
+for writing and associate the stream named
+.register stream
+with it.
+.
+.REQ .opena stream filename
+Like
+.request .open
+but append to it.
+.
+.REQ .os
+Output vertical distance that was saved by the
+.request .sv
+request.
+.
+.REQ .pc
+Reset page number character to\ \c
+.'char % .
+.
+.REQ .pc c
+Page number character.
+.
+.REQ .pi program
+Pipe output to
+.argument program
+(nroff only).
+.
+.REQ .pl
+Set page length to default
+.scalednumber 11 i .
+The current page length is stored in
+.register .p .
+.
+.REQ .pl \(+-N
+Change page length to
+.argument \(+-N
+(default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .pm
+Print macro names and sizes (number of blocks of 128 bytes).
+.
+.REQ ".pm t"
+Print only total of sizes of macros (number of 128 bytes blocks).
+.
+.REQ .pn \(+-N
+Next page number
+.argument N .
+.
+.REQ .pnr
+Print the names and contents of all currently defined number registers
+on stderr.
+.
+.REQ .po
+Change to previous page offset. The current page offset is available in
+.register .o .
+.
+.REQ .po \(+-N
+Page offset
+.argument N .
+.
+.REQ .ps
+Return to previous point-size.
+.REQ .ps \(+-N
+Point size; same as
+.esc[arg] s \(+-N .
+.
+.REQ .psbb filename
+Get the bounding box of a PostScript image
+.argument filename .
+.
+.REQ .pso command
+This behaves like the
+.request .so
+request except that input comes from the standard output of
+.argument command .
+.
+.REQ .ptr
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on stderr.
+.
+.REQ .rchar c1 c2...
+Remove the definitions of characters
+.argument c1 ,
+.argument c2 ,
+.argument ...
+.
+.REQ .rd prompt
+Read insertion.
+.
+.REQ .rj n
+Right justify the next
+.argument n
+input lines.
+.
+.REQ .rm name
+Remove request, macro, or string
+.argument name .
+.
+.REQ .rn old new
+Rename request, macro, or string
+.argument old
+to
+.argument new .
+.
+.REQ .rnn reg1 reg2
+Rename register
+.argument reg1
+to
+.argument reg2 .
+.
+.REQ .rr register
+Remove
+.argument register .
+.
+.REQ .rs
+Restore spacing; turn no-space mode off.
+.
+.REQ .rt \(+-N
+Return
+.I (upward only)
+to marked vertical place (default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .shc
+Reset soft hyphen character to
+.esc (hy .
+.
+.REQ .shc c
+Set the soft hyphen character to
+.argument c .
+.
+.REQ .shift n
+In a macro, shift the arguments by
+.argument n \ \c
+positions.
+.
+.REQ .so filename
+Include source file.
+.
+.REQ .sp
+Skip one line vertically.
+.
+.REQ .sp N
+Space vertical distance
+.argument N
+up or down according to sign of
+.argument N
+(default scaling indicator\ \c
+.scaleindicator v ).
+.
+.REQ .special s1 s2 ...
+Fonts
+.argument s1 ,
+.argument s2 ,
+etc. are special and will be searched for characters not in the current font.
+.
+.REQ .ss N
+Space-character size set to
+.argument N /12
+of the spacewidth in the current font.
+.
+.REQ .ss N M
+Space-character size set to
+.argterm N /12
+and sentence space size set to
+.argterm M /12
+of the spacewidth in the current font (\f(CR\(eq1/3 em\fP).
+.
+.REQ .sty n style
+Associate
+.argument style
+with font position
+.argument n .
+.
+.REQ .substring register n1 n2
+Replace the string in
+.argument register
+with the substring defined by the indices
+.argument n1
+and
+.argument n2 .
+.
+.REQ .sv
+Save
+.scalednumber 1 v
+of vertical space.
+.
+.REQ .sv N
+Save the vertical distance
+.argument N
+for later output with
+.request .os
+request.
+.
+.REQ .sy command-line
+Execute program
+.argument command-line .
+.
+.REQ ".ta T" N
+Set tabs after every position that is a multiple of
+.argument N
+(default scaling indicator\ \c
+.scaleindicator m ).
+.REQ .ta n1 n2 ... nn \f(CBT\fP r1 r2 ... rn
+Set tabs at positions
+.argument n1 ,
+.argument n2 ,
+\&...,
+.argument nn ,
+then set tabs at
+.argument nn + r1 ,
+.argument nn + r2 ,
+\&...,
+.argument nn + rn ,
+then at
+.argument nn + rn + r1 ,
+.argument nn + rn + r2 ,
+\&...,
+.argument nn + rn + rn ,
+and so on.
+.
+.\".REQ .tar
+.\"Restore internally saved tab positions.
+.\".
+.\".REQ .tas
+.\"Save tab positions internally.
+.
+.REQ .tc
+Remove tab repition character.
+.REQ .tc c
+Set tab repetition character to\ \c
+.argument c .
+.
+.REQ .ti \(+-N
+Temporary indent next line (default scaling indicator\ \c
+.scaleindicator m ).
+.
+.REQ .tkf font s1 n1 s2 n2
+Enable track kerning for
+.argument font .
+.
+.REQ .tl \f(CB\(cq\fPleft\f(CB\(cq\fPcenter\f(CB\(cq\fPright\f(CB\(cq\fP
+Three-part title.
+.
+.REQ .trf filename
+Transparently output the contents of file
+.argument filename .
+.
+.REQ .tm anything
+Print
+.argument anything
+on terminal (UNIX standard message output).
+.
+.REQ .tr abcd....
+Translate
+.argument a
+to
+.argument b ,
+.argument c
+to
+.argument d ,
+etc. on output.
+.
+.REQ .trnt abcd....
+This is the same as the
+.request .tr
+request except that the translations do not apply to text that is
+transparently throughput into a diversion with
+.esc ! .
+.
+.REQ .troff
+Make the built-in condition
+.B t
+true and
+.B n
+false.
+.
+.REQ .uf font
+Underline font set to
+.argument font
+(to be switched to by
+.request .ul ).
+.
+.REQ .ul N
+Underline (italicize in troff)
+.argument N
+input lines.
+.
+.REQ .vpt n
+Enable vertical position traps if
+.argument n
+is non-zero, disable them otherwise.
+.
+.REQ .vs
+Change to previous vertical base line spacing.
+.
+.REQ .vs N
+Set vertical base line spacing to
+.argument N .
+Default value is
+.scalednumber 12 p .
+.
+.REQ .warn n
+Set warnings code to
+.argument n .
+.
+.REQ .wh N trap
+Set location trap; negative means from page bottom.
+.
+.REQ .while cond anything
+While condition
+.argument cond
+is true, accept
+.argument anything
+as input.
+.
+.REQ .write stream anything
+Write
+.argument anything
+to the stream named
+.argument stream .
+.
+.PD
+.LP
+Besides these standard groff requests, there might be further macro
+calls.
+They can originate from a macro package (see
+.BR roff (@MAN7EXT@)
+for an overview) or from a preprocessor.
+.LP
+Preprocessor macros are easy to be recognized. They enclose their code
+into a pair of characteristic macros.
+.LP
+.TS
+box, center, tab (@);
+c | c | c
+CfCB | CfCB | CfCB.
+preprocessor@start macro@ end macro
+=
+eqn@.PS@.PE
+grap@.G1@.G2
+grn@.GS@.GE
+pic@.PS@.PE
+refer@.R1@.R2
+soelim@\fInone@\fInone
+tbl@.TS@.TE
+.TE
+.LP
+.
+.\" --------------------------------------------------------------------
+.SH "ESCAPE SEQUENCES"
+.\" --------------------------------------------------------------------
+.
+Escape sequences are in-line language elements usually introduced by
+a backslash
+.'char \(rs
+and followed by an escape name and sometimes by a required argument.
+Input processing is continued directly after the escaped character or
+the argument resp. without an intervening separation character.
+So there must be a way to determine the end of the escape name and the end
+of the argument.
+.LP
+This is done by enclosing names (escape name and arguments consisting of
+a variable name) by a pair of brackets
+.esc[] name
+and constant arguments (number expressions and characters) by apostrophes
+(ASCII 0x27) like
+.IR \(cqconstant\(cq .
+.LP
+There are abbreviations for short names.
+Two character escape names can be specified by an opening parenthesis like
+.esc( xy
+without a closing counterpart.
+And all one-character names different from the special characters
+.'char [
+and
+.'char (
+can even be specified without a marker in the form
+.esc \fP\f(CIc .
+.LP
+Constant arguments of length
+.number 1
+can omit the marker apostrophes, too, but there is no two-character
+analogue.
+.LP
+While 1-character escape sequences are mainly used for in-line functions
+and system related tasks, the 2-letter names following the
+.esc( ""
+construct are used for special characters predefined by the roff system.
+Names with more than two characters
+.esc[] name
+mostly denote user defined named characters (see the
+.request .char
+request).
+.
+.\" --------------------------------------------------------------------
+.SS "SINGLE CHARACTER ESCAPES"
+.\" --------------------------------------------------------------------
+.
+.PD 0
+.
+.\" --------- comments ---------
+.
+.ESC \(dq
+Beginning of a comment.
+Everything up to the end of the line is ignored.
+.
+.ESC #
+Everything up to and including the next newline is ignored.
+This is interpreted in copy mode.
+This is like
+.esc \(dq
+except the ignoring of the terminating newline.
+.
+.\" --------- strings ---------
+.
+.ESC * s
+The string stored in the string variable with 1-character name
+.argument s .
+.
+.ESC *( st
+The string stored in the string variable with 2-character name
+.argument st .
+.
+.ESC[] * stringvar
+The string stored in the string variable with arbitrary length name
+.argument stringvar .
+.
+.\" --------- macro arguments ---------
+.
+.ESC $0
+The name by which the current macro was invoked. The
+.request .als
+request can make a macro have more than one name.
+.
+.ESC $ x
+Macro argument with 1-place number
+.argument x ,
+where
+.argument x
+is a digit between 1 and 9.
+.
+.ESC $( xy
+Macro argument with 2-digit number
+.argument xy .
+.
+.ESC[] $ nexp
+Macro argument with number
+.argument nexp ,
+where
+.argument nexp
+is a numerical expression evaluating to an integer \(>=1.
+.
+.ESC $*
+In a macro, the concatenation of all the arguments separated by spaces.
+.
+.ESC $@
+In a macro, the concatenation of all the arguments with each surrounded
+by double quotes, and separated by spaces.
+.
+.\" --------- escaped characters ---------
+.
+.ESC \(rs
+reduces to a single backslash; useful to delay its interpretation as
+escape character in copy mode.
+For a printable backslash, use
+.esc e .
+.
+.ESC \(cq
+The acute accent \(aa; same as
+.esc( aa .
+Unescaped: apostrophe, right quotation mark, single quote (ASCII 0x27).
+.
+.ESC `
+The grave accent \(ga; same as
+.esc( ga .
+Unescaped: left quote, backquote (ASCII 0x60).
+.
+.ESC \-
+The \- sign in the current font.
+.
+.ESC .
+An uninterpreted dot (period), even at start of line.
+.
+.ESC %
+Default optional hyphenation character.
+.
+.ESC !
+Transparent line indicator.
+.
+.ESC ? anything\fB?\fP
+In a diversion, this will transparently embed
+.argument anything
+in the diversion.
+.argument anything
+is read in copy mode.
+See also the escape sequences
+.esc !
+and
+.esc ? .
+.
+.
+.\" --------- spacing ---------
+.
+.ESC \& space
+Unpaddable space-size space character (no line break).
+.
+.ESC 0
+Digit width.
+.
+.ESC |
+1/6\ em narrow space character; zero width in nroff.
+.
+.ESC ^
+1/12\ em half-narrow space character; zero width in nroff.
+.
+.ESC &
+Non-printable, zero width character.
+.
+.ESC )
+Like
+.esc &
+except that it behaves like a character declared with the cflags
+request to be transparent for the purposes of end of sentence
+recognition.
+.
+.ESC /
+Increases the width of the preceding character so that the spacing
+between that character and the following character will be correct if
+the following character is a roman character.
+.
+.ESC ,
+Modifies the spacing of the following character so that the spacing
+between that character and the preceding character will correct if the
+preceding character is a roman character.
+.
+.ESC ~
+Unbreakable space that stretches like a normal inter-word space when a
+line is adjusted.
+.
+.ESC \& newline
+Ignored newline, for continuation lines.
+.
+.\" --------- structuring ---------
+.
+.ESC {
+Begin conditional input.
+.
+.ESC }
+End conditional input.
+.
+.\" --------- longer escape names ---------
+.
+.ESC ( st
+The special character with 2-character name
+.argument st ,
+see section
+.BR "SPECIAL CHARACTERS" .
+.
+.ESC[] \& name
+The named character with arbitrary length name
+.argument name .
+.
+.\" --------- alphabetical escapes ---------
+.
+.ESC a
+Non-interpreted leader character.
+.
+.ESCq A anything
+If
+.argument anything
+acceptable as name of a string, macro, diversion, register,
+environment or font it is
+.number 1
+otherwise
+.number 0 .
+.
+.ESCq b abc...
+Bracket building function.
+.
+.ESC c
+Interrupt text processing.
+.
+.ESCq C char
+The character called
+.argument char ;
+same as
+.esc[] char ,
+but compatible to other roff versions.
+.
+.ESC d
+Forward (down) 1/2 em vertical unit (1/2 line in nroff).
+.
+.ESCq D charseq
+Draw a graphical element defined by the characters in
+.argument charseq ;
+see groff info file for details.
+.
+.ESC e
+Printable version of the current escape character.
+.
+.ESC E
+Equivalent to an escape character, but is not interpreted in copy-mode.
+.
+.ESC f F
+Change to font with 1-character name or 1-digit number
+.argument F .
+.
+.ESC f( fo
+Change to font with 2-characer name or 2-digit number
+.argument fo .
+.
+.ESC[] f font
+Change to font with arbitrary length name or number expression
+.argument font .
+.
+.ESC[] g reg
+Return format of register with name
+.argument reg
+suitable for
+.request .af .
+Alternative forms
+.esc(arg g xy
+and
+.escarg g x .
+.
+.ESCq h N
+Local horizontal motion; move right
+.argument N
+(left if negative).
+.
+.ESCq H N
+Set height of current font to
+.argument N .
+.
+.ESC[] k reg
+Mark horizontal input place in register with arbitrary length name
+.argument reg .
+Alternative forms
+.esc(arg k xy
+and
+.escarg k x .
+.
+.ESCq l Nc
+Horizontal line drawing function (optionally using character
+.argument c ).
+.
+.ESCq L Nc
+Vertical line drawing function (optionally using character
+.argument c ).
+.
+.ESC n r
+The numerical value stored in the register variable with the 1-character
+name
+.argument r .
+.
+.ESC n( re
+The numerical value stored in the register variable with the 2-character
+name
+.argument re .
+.
+.ESC[] n reg
+The numerical value stored in the register variable with arbitrary
+lenght name
+.argument reg .
+.
+.ESCq N n
+Typeset the character with code
+.argument n
+in the current font, no special fonts are searched. Useful for adding
+characters to a font using the
+.request .char
+request.
+.
+.ESCq o abc...
+Overstrike characters
+.argument a ,
+.argument b ,
+.argument c ,
+etc.
+.
+.ESC p
+Break and spread output line.
+.
+.ESC r
+Reverse 1\ em vertical motion (reverse line in nroff).
+.
+.ESCq R name \(+-n
+The same as
+.request .nr
+.argument name
+.argument \(+-n .
+.
+.ESC[] s \(+-N
+Set the point size to
+.I N
+scaled points. Note the alternative forms
+.BI \(rss \(+- [ N ]\c
+,
+.BI \(rss' \(+-N '\c
+,
+.BI \(rss \(+- ' N '\c
+,
+.esc(arg s \(+-xy ,
+.BI \(rss \(+- ( xy\c
+,
+.escarg s \(+-x .
+Same as
+.request .ps
+request.
+.
+.ESCq S N
+Slant output
+.argument N
+degrees.
+.
+.ESC t
+Non-interpreted horizontal tab.
+.
+.ESC u
+Reverse (up) 1/2 em vertical motion (1/2 line in nroff).
+.
+.ESCq v N
+Local vertical motion; move down
+.argument N
+(up if negative).
+.
+.ESC[] V env
+The contents of the environment variable
+.argument env .
+Alternative forms
+.esc(arg V xy
+and
+.escarg V x .
+.
+.ESCq w string
+The width of the character sequence
+.argument string .
+.
+.ESCq x N
+Extra line-space function (negative before, positive after).
+.
+.ESCq X string
+Output
+.argument string
+as device control function.
+.
+.ESC[] Y name
+Output string variable or macro
+.argument name
+uninterpreted as device control function.
+Alternative forms
+.esc(arg Y xy
+and
+.escarg Y x .
+.
+.ESC z c
+Print
+.argument c
+with zero width (without spacing).
+.
+.ESCq Z anything
+Print
+.argument anything
+and then restore the horizontal and vertical position;
+.argument anything
+may not contain tabs or leaders.
+.PD
+.LP
+The escape sequences
+.esc e ,
+.esc . ,
+.esc \(dq ,
+.esc $ ,
+.esc * ,
+.esc a ,
+.esc n ,
+.esc t ,
+.esc g ,
+and
+.escarg \& newline
+are interpreted in copy mode.
+.LP
+Escape sequences starting with
+.esc (
+or
+.esc [
+do not represent single character escape sequences, but introduce escape
+names with two or more characters.
+.LP
+If a backslash is followed by a character that does not constitute a
+defined escape sequence the backslash is silently ignored and the
+character maps to itself.
+.
+.\" --------------------------------------------------------------------
+.SS "SPECIAL CHARACTERS"
+.\" --------------------------------------------------------------------
+Common special characters are predefined by escape sequences of the form
+.(esc \fP\f(CIxy
+with characters
+.argument x
+and
+.argument y .
+Some of these exist in the usual font while most of them are only
+available in the special font. Below you'll find a selection of the most
+important glyphs; a complete list can be found in
+.BR groff_char (@MAN7EXT@).
+.RS
+.LP
+.PD 0
+.
+.ESc bu Bullet sign
+.ESc co Copyright
+.ESc ct Cent
+.ESc dd Double dagger
+.ESc de Degree
+.ESc dg Dagger
+.ESc em Em-dash
+.ESc hy Hyphen
+.ESc rg Registered sign
+.ESc sc Section sign
+.ESc ul Underline character
+.ESc == Identical
+.ESc >= Larger or equal
+.ESc <= Less or equal
+.ESc != Not equal
+.ESc -> Right arrow
+.ESc <- Left arrow
+.ESc +- Plus-minus sign
+.PD
+.RE
+.
+.\" --------------------------------------------------------------------
+.SH REGISTERS
+.\" --------------------------------------------------------------------
+Registers are variables that store a value.
+In groff, most registers store numerical values (see section
+.B NUMERICAL EXPRESSIONS
+above), but some can also hold a string value.
+.LP
+Each register is given a name.
+Arbitrary registers can be defined and set with the request
+.request .nr
+.argument register .
+.LP
+The value stored in a register can be retrieved by the escape sequences
+introduced by
+.esc n .
+.LP
+Most useful are predefined registers.
+In the following the notation
+.argument name
+is used to refer to a register called
+.register name
+to make clear that we speak about registers.
+Please keep in mind that the
+.esc en[]
+decoration is not part of the register name.
+.
+.\" --------------------------------------------------------------------
+.SS "READ-ONLY REGISTERS"
+.\" --------------------------------------------------------------------
+The following registers have predefined values that should not be
+modified by the user (usually, registers starting with a dot a read-only).
+Mostly, they provide information on the current settings or store results
+from request calls.
+.LP
+.PD 0
+.REG .$ Number of arguments in the current macro.
+.REG .A
+Set to
+.number 1
+in
+.B troff
+if option
+.B \-A
+is used; always
+.number 1
+in
+.BR nroff .
+.REG .H Available horizontal resolution in basic units.
+.REG .T
+Set to
+.number 1
+if option
+.B \-T
+is used.
+.REG .V Available vertical resolution in basic units.
+.REG .a
+Post-line extra line-space most recently utilized using
+.escarg x 'N' .
+.REG .C 1 if compatibility mode is in effect, 0 otherwise.
+.REG .c Current input line number.
+.REG .cdp
+The depth of the last character added to the current environment.
+It is positive if the character extends below the baseline.
+.REG .ce
+The number of lines remaining to be centered, as set by the
+.request .ce
+request.
+.REG .cht
+The height of the last character added to the current environment.
+It is positive if the character extends above the baseline.
+.REG .csk
+The skew of the last character added to the current environment.
+The skew of a character is how far to the right of the center of a character
+the center of an accent over that character should be placed.
+.REG .d
+Current vertical place in current diversion; equal to register
+.register nl .
+.REG .ev The name or number of the current environment (string-valued).
+.REG .f Current font number.
+.REG .fam The current font family (string-valued).
+.REG .fp The number of the next free font position.
+.REG .g
+Always 1 in GNU troff.
+Macros should use it to test if running under groff.
+.REG .h Text base-line high-water mark on current page or diversion.
+.REG .hla
+The current hyphenation language as set by the
+.B .hla
+request.
+.REG .hlc
+The number of immediately preceding consecutive hyphenated lines.
+.REG .hlm
+The maximum allowed number of consecutive hyphenated lines, as set by
+the
+.request .hlm
+request.
+.REG .hy
+The current hyphenation flags (as set by the
+.request .hy
+request).
+.REG .hym
+The current hyphenation margin (as set by the
+.request .hym
+request).
+.REG .hys
+The current hyphenation space (as set by the
+.request .hys
+request).
+.REG .i Current ident.
+.REG .in The indent that applies to the current output line.
+.REG .kern
+.number 1
+if pairwise kerning is enabled,
+.number 0
+otherwise.
+.REG .l Current line length.
+.REG .lg
+The current ligature mode (as set by the
+.request .lg
+request).
+.REG .ll The line length that applies to the current output line.
+.REG .lt
+The title length (as set by the
+.request .lt
+request).
+.REG .n Length of text portion on previous output line.
+.REG .ne
+The amount of space that was needed in the last
+.request .ne
+request that caused a trap to be sprung.
+Useful in conjunction with
+.register .trunc .
+.REG .o Current page offset.
+.REG .p Current page length.
+.REG .pn
+The number of the next page: either the value set by a
+.request .pn
+request, or the number of the current page plus\ 1.
+.REG .ps The current pointsize in scaled points.
+.REG .psr The last-requested pointsize in scaled points.
+.REG .rj
+The number of lines to be right-justified as set by the rj request.
+.REG .s Current point size as a decimal fraction.
+.REG .sr
+The last requested pointsize in points as a decimal fraction
+(string-valued).
+.REG .t Distance to the next trap.
+.REG .tabs
+A string representation of the current tab settings suitable for use as
+an argument to the
+.request .ta
+request.
+.REG .trunc
+The amount of vertical space truncated by the most recently sprung
+vertical position trap, or, if the trap was sprung by a
+.request .ne
+request, minus the amount of vertical motion produced by
+.request .ne .
+request.
+In other words, at the point a trap is sprung, it represents the difference
+of what the vertical position would have been but for the trap, and what the
+vertical position actually is.
+Useful in conjunction with the
+.register .ne
+register.
+.REG .ss
+The value of the parameters set by the first argument of the
+.request .ss
+request.
+.REG .sss
+The value of the parameters set by the second argument of the
+.request .ss
+request.
+.REG .u Equal to 1 bin fill mode and 0 in nofill mode.
+.REG .v Current vertical line spacing.
+.REG .vpt
+.number 1
+if vertical position traps are enabled,
+.number 0
+otherwise.
+.REG .w Width of previous character.
+.REG .warn
+The sum of the number codes of the currently enabled warnings.
+.REG .x The major version number.
+.REG .y The minor version number.
+.REG .Y The revision number of groff.
+.REG .z Name of current diversion.
+.REG llx
+Lower left x-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.REG lly
+Lower left y-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.REG rsb Like
+.register sb ,
+but takes account of the heights and depths of characters.
+.REG rst
+Like
+.register st ,
+but takes account of the heights and depths of characters.
+.REG sb
+Depth of string below base line (generated by width function
+.esc w ).
+.REG skw
+Right skip width from the center of the last character in the
+.esc w
+argument.
+.REG ssc
+The amount of horizontal space (possibly negative) that should be added
+to the last character before a subscript (generated by width function
+.esc w ).
+.REG st
+Height of string above base line (generated by width function
+.esc w ).
+.REG urx
+Upper right x-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.REG ury
+Upper right y-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.PD
+.
+.\" --------------------------------------------------------------------
+.SS "WRITABLE REGISTERS"
+.\" --------------------------------------------------------------------
+The following registers can be read and written by the user.
+They have predefined default values, but these can be modified for
+customizing a document.
+.LP
+.PD 0
+.REG % Current page number.
+.REG c. Current input line number.
+.REG ct Character type (set by width function
+.esc w ).
+.REG dl Maximal width of last completed diversion.
+.REG dw Current day of week (1-7).
+.REG dy Current day of month (1-31).
+.REG hp Current horizontal position at input line.
+.REG ln Output line number.
+.REG mo Current month (1-12).
+.REG nl Vertical position of last printed text base-line.
+.REG slimit
+If greater than 0, the maximum number of objects on the input stack.
+If \(<=0 there is no limit, i.e., recursion can continue until virtual
+memory is exhausted.
+.REG systat
+The return value of the
+.I system()
+function executed by the last
+.request .sy
+request.
+.REG year The current year (year 2000 compliant).
+.REG yr
+Current year minus 1900. For Y2K compliance use register
+.register year
+instead.
+.PD
+.
+.\" --------------------------------------------------------------------
+.SH WARNINGS
+.\" --------------------------------------------------------------------
+Each warning generated by groff is identified by a name and a code
+number. The codes are powers of 2 to allow bit-encoding with a single
+integer. There are also names that can be used to refer to groups of
+warnings.
+.LP
+The name associated with a warning is used by the
+.option \-w
+and
+.option \-W
+options;
+the number code is used by the
+.request .warn
+request and by the
+.esc[arg] n warn
+register.
+.LP
+.PD 0
+.Warning all group
+All warnings except
+.warning di ,
+.warning mac
+and
+.warning reg .
+Intended to cover all warnings with traditional macro packages.
+.Warning break 4
+In fill mode, lines which could not be broken so that their length was
+less than the line length. This is enabled by default.
+.Warning char 1
+Non-existent characters. This is enabled by default.
+.Warning delim 8
+Missing or mismatched closing delimiters.
+.Warning di 256
+Use of
+.request .di
+or
+.request .da
+without an argument when there is no current diversion.
+.Warning el 16
+Use of the
+.request .el
+request with no matching
+.request .ie
+request.
+.Warning escape 32768
+Unrecognized escape sequence. Then the escape character is ignored.
+.Warning font 131072
+Non-existent fonts. This is enabled by default.
+.Warning ig 262144
+Illegal escapes in text ignored with the
+.request \.ig
+request. These are conditions that are errors when they occur outside
+of ignored text.
+.Warning mac 512
+Use of undefined strings, macros, and diversions. Automatically handled
+as empty. Usually, only one warning per name.
+.Warning missing 8192
+Request that is missing non-optional arguments.
+.Warning input 16384
+Illegal input character.
+.Warning number 2
+Invalid numeric expressions. This is enabled by default.
+.Warning range 64
+Out of range arguments.
+.Warning reg 1024
+Use of undefined number register. Automatically defined as having
+value 0. Usually, only one warning per name.
+.Warning right-brace 4096
+Use of
+.esc }
+where a number was expected.
+.Warning scale 32
+Meaningless scaling indicators.
+.Warning space 65536
+Missing space between a request or macro and its argument. Then no
+macro is automatically defined. This is enabled by default. This
+warning will never occur in compatibility mode.
+.Warning syntax 128
+Dubious syntax in numeric expressions.
+.Warning tab 2048
+Inappropriate use of a tab character (either in an unquoted macro
+argument or where a number was expected).
+.Warning w group
+All warnings.
+.PD
+.LP
+.TS
+tab(@), box, expand;
+c c c | c c c | c c c
+R RI CB | R RI CB | R RI CB.
+Bit@Code@Warning@Bit@Code@Warning@Bit@Code@Warning
+_
+0@1@char@8@256@di@16@65536@space
+1@2@number@9@512@mac@17@131072@font
+2@4@break@10@1024@reg@18@262144@ig
+3@8@delim@11@2048@tab
+4@16@el@12@4096@right-brace
+5@32@scale@13@8192@missing
+6@64@range@14@16384@input
+7@128@syntax@15@32768@escape
+.TE
+.LP
+.
+.\" --------------------------------------------------------------------
+.SH COMPATIBILITY
+.\" --------------------------------------------------------------------
+.I groff
+provides a
+.B compatibility mode
+that allows to process roff code written for classical
+.troff
+or for other implementations of roff in a consistent way.
+.LP
+Compatibility mode can be turned on with the
+.option \-C
+command line option, and turned on or off with the
+.request .cp
+request. The number register
+.esc(arg n .C
+is
+.number 1
+if compatibility mode is on,
+.number 0
+otherwise.
+.LP
+This became necessary because the GNU concept for long names causes some
+incompatibilities.
+.I Classical troff
+will interpret
+.IP
+.B
+\&.dsabcd
+.LP
+as defining a string
+.B ab
+with contents
+.BR cd .
+Normally,
+.I groff
+will interpret this as a call of a macro named
+.request dsabcd .
+.LP
+Also
+.I classical troff
+will interpret
+.esc *[
+or
+.esc n[
+as references to a string or number register called
+.register [ .
+In
+.I GNU native
+.IR mode ,
+however, this will normally be interpreted as the start of a long name.
+.LP
+In
+.I compatibility
+.IR mode ,
+groff will interpret these things in the traditional way, but long names
+are not recognized.
+.LP
+On the other hand, groff in
+.I GNU native mode
+does not allow to use the escape sequences
+.esc e ,
+.esc | ,
+.esc ^ ,
+.esc & ,
+.esc } ,
+.esc { ,
+.esc "\ " (space),
+.esc ' ,
+.esc ` ,
+.esc - ,
+.esc _ ,
+.esc ! ,
+.esc % ,
+and
+.esc c
+in names of strings, macros, diversions, number registers, fonts or
+environments, whereas
+.I classical troff
+does. The
+.esc A
+escape sequence can be helpful in avoiding these escape sequences in
+names.
+.LP
+Fractional pointsizes cause one noteworthy incompatibility.
+In
+.I classical
+.IR troff ,
+the
+.request .ps
+request ignores scale indicators and so
+.RS
+.LP
+.B .ps\ 10u
+.RE
+.LP
+will set the pointsize to 10 points, whereas in groff native mode the
+pointsize will be set to 10 scaled points.
+.LP
+In
+.I groff
+mode, there is a fundamental difference between unformatted input
+characters, and formatted output characters.
+Everything that affects how an output character will be output is stored
+with the character; once an output character has been constructed it is
+unaffected by any subsequent requests that are executed, including the
+.request .bd ,
+.request .cs ,
+.request .tkf ,
+.request .tr ,
+or
+.request .fp
+requests.
+.LP
+Normally output characters are constructed from input characters at the
+moment immediately before the character is added to the current output
+line.
+Macros, diversions and strings are all, in fact, the same type of object;
+they contain lists of input characters and output characters in any
+combination.
+.LP
+An output character does not behave like an input character for the
+purposes of macro processing; it does not inherit any of the special
+properties that the input character from which it was constructed might
+have had.
+The following example will make things clearer.
+.LP
+.RS
+.nf
+.ft B
+\&.di x
+\(rs\(rs\(rs\(rs
+\&.br
+\&.di
+\&.x
+.ft
+.fi
+.RE
+.LP
+In
+.I GNU mode
+this will be printed as
+.esc \(rs .
+So each pair of input backslashes
+.'char \(rs\(rs
+is turned into a single output backslash
+.'char \(rs
+and the resulting output backslashes are not interpreted as escape
+characters when they are reread.
+.LP
+.I Classical troff
+would interpret them as escape characters when they were reread and
+would end up printing a single backslash
+.'char \(rs .
+.LP
+The correct way to get a printable
+.'char \(rs
+is to use the
+.esc e
+escape sequence. This will always print a single instance of the
+current escape character, regardless of whether or not it is used in a
+diversion. It will also work in both GNU mode and compatibility mode.
+.LP
+To store an escape sequence in a diversion that will be interpreted when
+the diversion is reread, either the traditional
+.esc !
+transparent output facility or the
+new
+.esc ?
+escape sequence can be used.
+.
+.\" --------------------------------------------------------------------
+.SH BUGS
+.\" --------------------------------------------------------------------
+At the moment, the documentation of the groff system is in a state of
+change and evolution. It is possible that there are small
+inconsistencies between different documents temporarily.
+.LP
+The
+.B WARNINGS
+section belongs to
+.BR troff (@MAN1EXT@).
+.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+This document is part of groff, the GNU roff distribution. It was
+written by Bernd Warken <bwarken@mayn.de>.
+.LP
+It is distributed under the terms of the FDL (GNU Free Documentation
+License) version 1.1 or later. You should have received a copy of the
+FDL on your system, it is also available on-line under
+.RS
+.LP
+.IR http://www.gnu.org/copyleft/fdl.html .
+.RE
+.LP
+Formerly, the extensions of the groff language were kept in the manual
+page
+.BR troff (@MAN1EXT@).
+This document contains the essential parts of that documentation, but
+the gory details are found in the groff info file.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+The main source of information for the groff language is the
+.B groff
+.BR info (1)
+file.
+.LP
+For a survey of roff and the groff system and further documentation
+pointers see
+.BR roff (@MAN7EXT@).
+.LP
+The formatter programs are described in
+.BR groff (@MAN1EXT@)
+and
+.BR troff (@MAN1EXT@);
+a complete of all predefined glyph names can be found in
+.BR groff_char (@MAN7EXT@).
+.LP
+The classical
+.I troff
+documentation is available on-line at
+.RS
+.LP
+.I http://cm.bell-labs.com/cm/cs/cstr.html
+.RE
+and
+.RS
+.IR http://www.kohala.com/start/troff/ .
diff --git a/contrib/groff/man/groff_char.man b/contrib/groff/man/groff_char.man
index 18085dce7abf..fd9f4ceb577b 100644
--- a/contrib/groff/man/groff_char.man
+++ b/contrib/groff/man/groff_char.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -45,7 +45,9 @@ This manual page lists the standard
.B groff
input characters.
Only the characters that are available for the device that
-is being used to print this manual page will be displayed.
+is being used to print or view this manual page will be
+.ie \n(.g displayed (the device currently used is `\*(.T').
+.el displayed.
The
.I "Input code"
column applies to characters which can be
@@ -379,6 +381,7 @@ Output Input Input PostScript Notes
.C2 OK \& "check mark, tick"
.C2 Of ordfeminine
.C2 Om ordmasculine
+.C2 pc periodcentered
.C2 S1 onesuperior
.C2 S2 twosuperior
.C2 S3 threesuperior
@@ -399,7 +402,7 @@ Output Input Input PostScript Notes
.C2 br br "box rule with traditional troff metrics"
.C2 ru ru "baseline rule"
.C2 ul ul "underline with traditional troff metrics"
-.C2 bv bv "bold vertical"
+.C2 bv bv "bar vertical"
.C2 bs bell
.C2 ci circle
.C2 bu bullet
@@ -436,7 +439,9 @@ Output Input Input PostScript Notes
.C2 lq quotedblleft
.C2 rq quotedblright
.C2 oq quoteleft "single open quote"
+.C2 cq quoteright "single closing quote (ASCII 39)"
.C2 aq quotesingle "apostrophe quote"
+.C2 dq quotedbl "double quote (ASCII 34)"
.C2 or bar
.C2 at at
.C1 - minus "minus sign from current font"
@@ -533,6 +538,9 @@ Output Input Input PostScript Notes
.C2 ib reflexsubset
.C2 ip reflexsuperset
.C2 ap similar
+.C2 is integral
+.C2 sr radical "square root"
+.C2 rn \& overline
.C2 pd partialdiff "partial differentiation sign"
.C2 c* circlemultiply "multiply sign in a circle"
.C2 c+ circleplus "plus sign in a circle"
@@ -549,8 +557,8 @@ Output Input Input PostScript Notes
.C2 CR carriagereturn "carriage return symbol"
.C2 st suchthat
.C2 /_ angle
-.C2 << "" "much less"
-.C2 >> "" "much greater"
+.C2 << \& "much less"
+.C2 >> \& "much greater"
.C2 wp weierstrass "Weierstrass p"
.C2 lz lozenge
.C2 an arrowhorizex "horizontal arrow extension"
diff --git a/contrib/groff/man/groff_font.man b/contrib/groff/man/groff_font.man
index 97b6480274b3..8b9e3b40793c 100644
--- a/contrib/groff/man/groff_font.man
+++ b/contrib/groff/man/groff_font.man
@@ -130,6 +130,16 @@ will cause no font to be mounted on the corresponding font position.
The default font family is
.IR fam .
.TP
+.B use_charnames_in_special
+This command indicates that troff should encode named characters inside
+special commands.
+.TP
+.B pass_filenames
+requests that troff tells the driver the source file name being processed.
+This is achieved by another tcommand:
+.B F
+.IR filename .
+.TP
.B charset
This line and everything following in the file are ignored.
It is allowed for the sake of backwards compatibility.
@@ -139,6 +149,13 @@ Other commands are ignored by
.B troff
but may be used by postprocessors to store arbitrary information
about the device in the DESC file.
+.LP
+Here a list of obsolete keywords which are recognized by
+.B groff
+but completely ignored:
+.BR spare1 ,
+.BR spare2 ,
+.BR biggestfont .
.SS Font file format
A font file has two sections. The first section is a sequence
of lines each containing a sequence of blank delimited
@@ -165,7 +182,8 @@ Characters
are ligatures; possible ligatures are
.BR ff ,
.BR fi ,
-.BR fl
+.BR fl ,
+.B ffi
and
.BR ffl .
For backwards compatibility, the list of ligatures may be terminated
@@ -209,8 +227,10 @@ Each line gives information for one character.
A line comprises a number of fields separated
by blanks or tabs. The format is
.IP
-.I
-name metrics type code comment
+.I name metrics type code
+.RI [ entity_name ]
+.RB [ --
+.IR comment ]
.LP
.I name
identifies the character:
@@ -279,7 +299,16 @@ or
.B 0X
it will be intepreted as hexadecimal.
.LP
-Anything on the line after the code field will be ignored.
+The
+.I entity_name
+field gives an ascii string identifying the glyph which the postprocessor
+uses to print the character.
+This field is optional and has been introduced so that the html device driver
+can encode its character set.
+For example, the character `\e[Po]' is represented as `&pound;' in html 4.0.
+.LP
+Anything on the line after the encoding field resp. after `-\&-' will
+be ignored.
.LP
The
.I metrics
diff --git a/contrib/groff/man/groff_out.man b/contrib/groff/man/groff_out.man
index 090982320386..5e4c90684ec1 100644
--- a/contrib/groff/man/groff_out.man
+++ b/contrib/groff/man/groff_out.man
@@ -1,6 +1,7 @@
'\" e
-.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 Free Software Foundation, Inc.
+.\" The above line should force the use of eqn as a preprocessor
+.ig
+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
@@ -230,3 +231,7 @@ should be treated like the part of the line following the
command.
.SH "SEE ALSO"
.BR groff_font (@MAN5EXT@)
+.\"
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/man/roff.man b/contrib/groff/man/roff.man
new file mode 100644
index 000000000000..793ce61e880d
--- /dev/null
+++ b/contrib/groff/man/roff.man
@@ -0,0 +1,520 @@
+.\" -*- nroff -*-
+.ig
+roff.7
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2000 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+
+Last update: 17 May 2000
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.if n \{\
+. mso tmac.tty-char
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.\" text lines in macro definitions or bracketed sections \{...\}
+.de text
+. if 1 \&\\$*\&
+..
+.
+.de option
+. ds @tmp@ \f(CB\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de 'char
+. ds @tmp@ `\f(CB\\$1\fP'
+. shift
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de esc
+. ds @tmp@ \f(CB\e\\$1\fP
+. shift
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de argname
+. ds @tmp@ \f(CI\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de prefixednumber
+. ds @tmp@ \&\\$1\ \f(CR\\$2\fP
+. shift 2
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.TH ROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+roff \- a survey of the roff typesetting system
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.I roff
+is the general name for a set of type-setting programs, known under
+names like
+.IR troff ,
+.IR nroff ,
+.IR groff ,
+etc.
+.LP
+The roff type-setting system consists of a formatting language, macro
+packages, preprocessors, postprocessors for output devices, user
+front-end programs, and conversion tools.
+.LP
+The most common roff system today is the free software implementation
+.I groff
+(from `GNU\ roff').
+The pre-groff implementations are referred to as `classical' (dating
+back as long as 1973).
+.LP
+.I groff
+is backward-compatible to its classical ancestors, but has many
+extensions, and is still evolving.
+As it is available for almost every computer system it is the de-facto
+roff standard today.
+.LP
+In spite of its age, roff is in wide use today, e.g., the manual pages
+on UNIX systems
+.RI ( man-pages )
+are written in roff.
+The roff output for text devices is still unmatched, and its graphical
+output has the same quality as the other free type-setting programs and
+is better than some of the commercial systems.
+.LP
+This document gives only an overview and provides pointers to further
+documentation.
+
+This document is not maintained and might be out of date. For the real
+documentation refer to the groff info file that contains the detailed,
+actual and concise reference information.
+.\" --------------------------------------------------------------------
+.SH "FORMATTING LANGUAGE"
+.\" --------------------------------------------------------------------
+There are three terms that refer to the language of the
+.I roff
+system.
+The term
+.I troff language
+is used when the classical aspects of
+.I roff
+are stressed, the term
+.I groff language
+includes the GNU extensions, whereas
+.I roff language
+is the general term.
+.LP
+The main source of documentation for all aspects of the
+.I groff language
+is the groff info file. The manual page
+.BR groff (@MAN7EXT@)
+gives a short description of all predefined language elements.
+.LP
+Documents using roff are normal text files decorated by formatting
+elements.
+It is very easy to write high-quality documents by using one of the
+macro packages.
+These are like high-level programming languages, while the bare roff
+language compares to a low-level language like C or assembler.
+.LP
+The roff language is a full programming language providing low-level
+requests, definition of macros, escape sequences, string variables,
+number or size registers, and C-like flow controls.
+.ig /
+In the 1980s, it was even possible to write the common utilities for
+system administration by only using troff.
+There were contests on writing the most unreadable program fake by
+exclusively using troff.
+Because of security impacts, these dangerous features were removed in
+.IR groff .
+./
+.LP
+Some clarification on the language elements seems to be wanted.
+Requests are basic formatting commands defined by programming languages
+like C, C++, etc., whereas macros are formatting commands that are
+written in the roff language.
+A document writer will not note any difference in usage for requests or
+macros, both are written on a line on their own starting with a dot
+.'char . .
+But the user may define her own macros if desired.
+.LP
+Escape sequences are in-line elements starting with a backslash
+.'char \e .
+They are used to implement various features, including the insertion of
+non-ASCII characters with
+.esc ( ,
+the content of strings with
+.esc *
+and register variables with
+.esc n ,
+font changes with
+.esc f ,
+in-line comments with
+.esc \(dq ,
+the escaping of special control characters like
+.esc \e ,
+and many other features.
+.\" --------------------------------------------------------------------
+.SH FORMATTERS
+.\" --------------------------------------------------------------------
+Formatters are the front-end programs that analyze a groff document and
+translate it into a form that is suitable for a special device.
+The traditional
+.I roff
+had two formatters,
+.B nroff
+for text devices and
+.B troff
+for graphical devices.
+.LP
+These programs still exist in the
+.I groff
+implementation, but usually they are accessed through a program called
+.BR groff .
+This combined and extended the old functionality into a single program.
+It has many command-line options, most of them herited from
+.BR troff .
+To ease the option jungle, the user-friendly utility
+.B grog
+(from `groff guess') was created.
+It tries to guess from the document which arguments should be used and
+displays a suitable command line.
+Though not being perfect, it is a good starting point.
+.\" --------------------------------------------------------------------
+.SH PREPROCESSORS
+.\" --------------------------------------------------------------------
+The classical preprocessors that are still available in groff.
+.RS
+.LP
+.PD 0
+.TP
+.I eqn
+for including mathematical equations.
+.TP
+.I grap
+for constructing graphical elements (this preprocessor doesn't come with
+groff; it is an extra package).
+.TP
+.I grn
+for including gremlin pictures.
+.TP
+.I pic
+for creating diagrams.
+.TP
+.I refer
+for bibliographic references.
+.TP
+.I soelim
+for including other roff files.
+.TP
+.I tbl
+for rectangular tables.
+.PD
+.RE
+.LP
+Each of these preprocessors defines its own language that is translated
+into roff code when run through the preprocessor program.
+So parts written in these languages may be included within a roff
+document.
+Such an enhanced document is run through one or more corresponding
+preprocessors before it is fed into the actual formatter.
+.LP
+The preprocessor programs extract and transform the document parts
+determined for them.
+They can be called either in a UNIX pipeline with their program name or
+automatically with a groff option.
+.LP
+.TS
+center, box, tab (@);
+C | C
+CfCB | CfCB.
+preprocessor@groff option
+=
+eqn@\-e
+grap@\-G
+grn@\-g
+pic@\-p
+refer@\-R
+tbl@\-r
+soelim@\-s
+.TE
+.LP
+.
+.\" --------------------------------------------------------------------
+.SH "MACRO PACKAGES"
+.\" --------------------------------------------------------------------
+Macro packages are collections of macros that are suitable to format a
+special kind of documents in a convenient way.
+This greatly eases the usage of roff.
+The macro definitions of a package are kept in a file called
+.BI tmac. name
+where
+.I name
+is the internal roff name for this package.
+All tmac files are stored in a single or few directories at standard
+positions.
+.LP
+A macro package that is used in a document is specified by the command line
+option
+.option \-m
+for the formatter like
+.option "troff\ \-m"
+.argname name
+or
+.option "groff\ \-m"
+.argname name .
+General details on the naming of macro packages and their placement is
+found in
+.BR tmac (@MAN5EXT@).
+.LP
+Famous classical macro packages are
+.IR man ,
+.IR mandoc ,
+and
+.I mdoc
+for manual pages and
+.IR me ,
+.IR ms ,
+and
+.I mm
+for books, articles, and letters.
+Besides these collections, groff provides an increasing number of new
+macro packages for various applications, for example integration of or
+conversion into other file formats.
+.\" --------------------------------------------------------------------
+.SH "FILE NAME EXTENSIONS"
+.\" --------------------------------------------------------------------
+Manual pages (man-pages) take the section number as a file name
+extension, e.g., the filename for this document is
+.IR roff.7 ,
+i.e., it is kept in
+.prefixednumber section 7
+of the man-pages.
+.LP
+The classical macro packages take the package name as an extension, e.g.
+.IB file. me
+for a document using the
+.I me
+macro package,
+.IB file. mm
+for
+.IR mm ,
+.IB file. ms
+for
+.IR ms ,
+.IB file. pic
+for
+.I pic
+files,
+etc.
+.ig
+.LP
+But there is no general naming scheme for roff documents, though
+.IB file. roff
+or
+.IB file. rof
+seems to be a good choice.
+.LP
+File name extensions can be very handy in conjunction with the
+.BR less (1)
+pager.
+It provides the possibility to feed all input into a command-line pipe that
+is specified in the shell environment variable
+.B LESSOPEN
+This process is not well documented, so here an example
+.B LESSOPEN='|lesspipe %s'
+where
+.B lesspipe
+is either a system supplied command or a shell script of your own.
+..
+.\" --------------------------------------------------------------------
+.SH EDITING
+.\" --------------------------------------------------------------------
+Most text editors provide support for editing documents using roff.
+Especially useful is the
+.B nroff-mode
+in all flavors of the Emacs editor.
+.\" --------------------------------------------------------------------
+.SH ENVIRONMENT
+.\" --------------------------------------------------------------------
+.TP
+.SM
+.B GROFF_TMAC_PATH
+A colon separated list of directories in which to search for
+macro files, see
+.BR tmac (@MAN5EXT@).
+.TP
+.SM
+.B GROFF_TYPESETTER
+Default device.
+.TP
+.SM
+.B GROFF_FONT_PATH
+A colon separated list of directories in which to search for the
+.BI dev name
+directory.
+.B troff
+will search in directories given in the
+.option \-F
+option before these, and in standard directories
+.RB ( .:/usr/local/share/groff/font:/usr/lib/font )
+after these.
+.\" --------------------------------------------------------------------
+.SH FILES
+.\" --------------------------------------------------------------------
+By default,
+.I groff
+installs all of its library files in a directory tree under
+.IR /usr/local/share/groff .
+This location might vary for different systems.
+In the following, this directory is referred to as
+.IR <groff_dir> .
+.LP
+.TP
+.IB <groff_dir> /tmac/troffrc
+Initialization file for troff.
+.TP
+.IB <groff_dir> /tmac/tmac. name
+Macro files.
+.TP
+.IB <groff_dir> /font/dev name /DESC
+Device description file for device
+.IR name .
+.TP
+.IB <groff_dir> /font/dev name / F
+Font file for font
+.I F
+of device
+.IR name .
+.\" --------------------------------------------------------------------
+.SH BUGS
+.\" --------------------------------------------------------------------
+The groff documentation is in evolution at the moment.
+It is possible that small inconsistencies between different documents exist
+temporarily.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+This document is part of groff, the GNU roff distribution. It was
+written by Bernd Warken <bwarken@mayn.de>.
+.LP
+It is distributed under the terms of the FDL (GNU Free Documentation
+License) version 1.1 or later. You should have received a copy of the
+FDL on your system, it is also available on-line under
+.RS
+.LP
+.IR <http://www.gnu.org/copyleft/fdl.html> .
+.RE
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+The main source of information is the
+.I groff
+.BR info (1)
+file.
+.LP
+The predefined elements of the
+.I groff
+language are also documented in the manual page
+.BR groff (@MAN7EXT@).
+.LP
+Formatters and their wrappers:
+.BR groff (@MAN1EXT@),
+.BR grog (@MAN1EXT@),
+.BR nroff (@MAN1EXT@),
+and
+.BR troff (@MAN1EXT@).
+.LP
+Postprocessors for the output devices:
+.BR grodvi (@MAN1EXT@),
+.BR grohtml (@MAN1EXT@),
+.BR grolbp (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
+.BR grops (@MAN1EXT@),
+and
+.BR grotty (@MAN1EXT@).
+.LP
+Standard preprocessors:
+.BR eqn (@MAN1EXT@),
+.BR grn (@MAN1EXT@),
+.BR grap (1),
+.BR pic (@MAN1EXT@),
+.BR refer (@MAN1EXT@),
+.BR soelim (@MAN1EXT@),
+and
+.BR tbl (@MAN1EXT@).
+.LP
+The man pages for macro packages include
+.BR groff_tmac (@MAN5EXT@),
+.BR groff_man (@MAN7EXT@),
+.BR groff_markup (@MAN7EXT@),
+.BR groff_mdoc (@MAN7EXT@),
+.BR groff_mdoc.samples (@MAN7EXT@),
+.BR groff_me (@MAN7EXT@),
+.BR groff_mm (@MAN7EXT@),
+.BR groff_mmroff (@MAN7EXT@),
+.BR groff_ms (@MAN7EXT@),
+and
+.BR groff_msafer (@MAN7EXT@).
+.LP
+The following utilities are available:
+.BR addftinfo (@MAN1EXT@),
+.BR afmtodif (@MAN1EXT@),
+.BR hpftodit (@MAN1EXT@),
+.BR indxbib (@MAN1EXT@),
+.BR lookbib (@MAN1EXT@),
+.BR pfbtops (@MAN1EXT@),
+.BR tfmtodit (@MAN1EXT@),
+and
+.BR gxditview (@MAN1EXT@).
+.LP
+For details on the GNU implementation of the
+.I roff
+system see
+.BR groff_char (@MAN7EXT@),
+.BR groff_font (@MAN7EXT@),
+.BR groff_out (@MAN7EXT@),
+and the file
+.I README
+in the main directory of the groff source distribution.
+These also give details on how to contact or join the
+.I groff
+developer group.
+.LP
+Many classical
+.troff
+documents are still available on-line.
+Especially informative are the original Bell Labs proceedings for the old,
+free UNIX 7 found at
+.I http://cm.bell-labs.com/cm/cs/cstr.html
+and the collection of the late Richard S. Stevens at
+.IR http://www.kohala.com/start/troff/ .
diff --git a/contrib/groff/mkinstalldirs b/contrib/groff/mkinstalldirs
new file mode 100755
index 000000000000..a4f0e9872736
--- /dev/null
+++ b/contrib/groff/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.1.1.1 2000/02/06 09:34:43 wlemb Exp $
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/contrib/groff/mm/ChangeLog b/contrib/groff/mm/ChangeLog
index fb0d4fe1db22..09d7b07994d3 100644
--- a/contrib/groff/mm/ChangeLog
+++ b/contrib/groff/mm/ChangeLog
@@ -1,3 +1,38 @@
+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. :-)
diff --git a/contrib/groff/mm/Makefile.sim b/contrib/groff/mm/Makefile.sim
index 2ac0892ec14a..7775c79bc46b 100644
--- a/contrib/groff/mm/Makefile.sim
+++ b/contrib/groff/mm/Makefile.sim
@@ -1,5 +1,5 @@
#
-# $Id: Makefile.sim,v 1.32 1999/09/03 05:33:14 jh Exp $
+# $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=. \
@@ -41,26 +41,26 @@ install: groff_mm.n groff_mmse.n
.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" \
+ @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
index 08d6b55bedc6..c706d711f42b 100644
--- a/contrib/groff/mm/Makefile.sub
+++ b/contrib/groff/mm/Makefile.sub
@@ -1,15 +1,19 @@
#
-# $Id: Makefile.sub,v 1.32 1999/09/03 05:33:12 jh Exp $
+# $Id: Makefile.sub,v 1.3 2000/03/07 22:17:58 wlemb Exp $
#
-MAN7=groff_mm.n groff_mmse.n
+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_m
- -test -d $(tmacdir)/mm || mkdir $(tmacdir)/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; \
@@ -19,12 +23,20 @@ install_mm: install_m
done
install_m:
- -test -d $(tmacdir) || mkdir $(tmacdir)
- -rm -f $(tmacdir)/tmac.$(tmac_m)
- $(INSTALL_DATA) $(srcdir)/tmac.m $(tmacdir)/tmac.$(tmac_m)
- @sed -e "s;^.mso tmac.m;.mso $(tmac_m);g" $(srcdir)/tmac.mse \
- > $(tmacdir)/tmac.$(tmac_m)se
+ -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:
@@ -32,6 +44,7 @@ uninstall_sub:
-for f in $(LOCALE); do \
test -s $(tmacdir)/mm/$$f || rm -f $(tmacdir)/mm/$$f; \
done
- -rm -f $(tmacdir)/tmac.$(tmac_m)
- -rm -f $(tmacdir)/tmac.$(tmac_m)se
+ -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/examples/APP b/contrib/groff/mm/examples/APP
new file mode 100644
index 000000000000..82352e58c3e4
--- /dev/null
+++ b/contrib/groff/mm/examples/APP
@@ -0,0 +1,352 @@
+.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
new file mode 100644
index 000000000000..a2bb3add57d9
--- /dev/null
+++ b/contrib/groff/mm/examples/B1B2
@@ -0,0 +1,91 @@
+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
new file mode 100644
index 000000000000..d23597f0a897
--- /dev/null
+++ b/contrib/groff/mm/examples/COVER
@@ -0,0 +1,235 @@
+.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
new file mode 100644
index 000000000000..fbf6c43a031a
--- /dev/null
+++ b/contrib/groff/mm/examples/IND
@@ -0,0 +1,4191 @@
+.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
new file mode 100644
index 000000000000..cf063897371c
--- /dev/null
+++ b/contrib/groff/mm/examples/LT
@@ -0,0 +1,1058 @@
+.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
new file mode 100644
index 000000000000..bfbd77f5543e
--- /dev/null
+++ b/contrib/groff/mm/examples/LT.se
@@ -0,0 +1,1062 @@
+.\" 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
new file mode 100644
index 000000000000..bbfca3def549
--- /dev/null
+++ b/contrib/groff/mm/examples/ML
@@ -0,0 +1,169 @@
+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
new file mode 100644
index 000000000000..0f0399cc7a35
--- /dev/null
+++ b/contrib/groff/mm/examples/MOVE
@@ -0,0 +1,175 @@
+.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
new file mode 100644
index 000000000000..ae91fae0d404
--- /dev/null
+++ b/contrib/groff/mm/examples/MUL
@@ -0,0 +1,535 @@
+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
new file mode 100644
index 000000000000..82c6f8d50812
--- /dev/null
+++ b/contrib/groff/mm/examples/NCOL
@@ -0,0 +1,196 @@
+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
new file mode 100644
index 000000000000..4b3694a37261
--- /dev/null
+++ b/contrib/groff/mm/examples/ND
@@ -0,0 +1,17 @@
+.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
new file mode 100644
index 000000000000..cb6980f85327
--- /dev/null
+++ b/contrib/groff/mm/examples/README
@@ -0,0 +1,32 @@
+
+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
new file mode 100644
index 000000000000..72f648220903
--- /dev/null
+++ b/contrib/groff/mm/examples/References
@@ -0,0 +1,975 @@
+.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
new file mode 100644
index 000000000000..0a922415895e
--- /dev/null
+++ b/contrib/groff/mm/examples/SETR
@@ -0,0 +1,109 @@
+.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
index 6398b1ee6535..a6de21b52383 100644
--- a/contrib/groff/mm/groff_mm.man
+++ b/contrib/groff/mm/groff_mm.man
@@ -1,5 +1,5 @@
.\"
-.\" $Id: groff_mm.man,v 1.32 1999/09/03 05:33:12 jh Exp $
+.\" $Id: groff_mm.man,v 1.3 2000/06/04 21:47:19 wlemb Exp $
.\"
.de T2
.ne 2v
@@ -18,7 +18,7 @@
groff_mm \- groff mm macros
.SH SYNOPSIS
.B groff
-.B \-m@TMAC_M@
+.B \-m@TMAC_M_PREFIX@m
[
.IR options .\|.\|.
]
@@ -38,9 +38,9 @@ the macros OK and PM is not implemented.
.B \(bu
groff mm does not support cut marks
.LP
-\fBm@TMAC_M@\fP is intended to be international. Therefore it is
+\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@se\fP as an example.
+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
@@ -72,6 +72,7 @@ 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:
@@ -119,7 +120,7 @@ Abstract end, see \fBAS\fP.
.B "AF [name of firm]"
Authors firm, should be called before \fBAU\fP, see also \fBCOVER\fP.
.TP
-.B "AL [type [text-indent [1]]]]"
+.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
@@ -186,8 +187,8 @@ The title will show up after the name in the signature block.
.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 appear before \fBTL\fP. The author information
-can contain intials, location, department, telephone extension,
+\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]]"
@@ -198,14 +199,14 @@ with variable \fBLetapp\fP, and the string \fBDate\fP in \fBLetdate\fP.
.B "AVL [name]"
Letter signature, generates a line with place for signature.
.TP
-.B "B [bold-text [prev-font-tex [bold...]]]"
-Begin boldface
+.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)
+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
@@ -215,7 +216,7 @@ End box. Finish the box started by \fBB1\fP.
.B BE
End bottom block, see \fBBS\fP.
.TP
-.B "BI [bold-text [italic-text [bold-text [...]]]"
+.B "BI [bold-text [italic-text [bold-text [...]]]]"
Bold-italic.
No limit on the number of arguments, see \fBB\fP.
.TP
@@ -228,15 +229,15 @@ 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 [...]]]"
+.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 wich is
+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
+.B "BVL text-indent [mark-indent [1]]"
Start of
broken variable-item list.
Broken variable-item list has no fixed mark, it assumes that
@@ -299,7 +300,7 @@ one display per page and no text following it.
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 is there is enough
+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
@@ -322,8 +323,6 @@ 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 third argument will prohibit printing of a blank line before each
-item.
A second argument prevents the empty line between each list item
to be printed. See \fBLI\fP.
.TP
@@ -460,7 +459,7 @@ 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, wich
+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.
@@ -499,8 +498,8 @@ justification (ljust).
.sp
.fi
.DT
-Argument greater than or equal to 11 is considered as arg 0.
-Default for m@TMAC_M@m is 10.
+Argument greater than 11 is considered as arg 0.
+Default for m@TMAC_M_PREFIX@m is 10.
.TP
.B FE
Footnote end.
@@ -534,13 +533,13 @@ is controlled by number register \fBFs\fP, default value is 1.
.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 varname is used, \fBGETHN\fP sets the stringvariable \fIvarname\fP to the
+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 varname is used, \fBGETPN\fP sets the stringvariable \fIvarname\fP
+If \fIvarname\fP is used, \fBGETPN\fP sets the stringvariable \fIvarname\fP
to the pagenumber.
.TP
.B "GETR refname"
@@ -600,6 +599,7 @@ than both \fBHb\fP and \fBHs\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
@@ -620,7 +620,7 @@ is centerered.
\fBFont control of the heading\fP
.br
The font of each heading level is controlled by string \fBHF\fP.
-It contains a fontnumber or fontnam for each level. Default
+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.
@@ -641,7 +641,7 @@ 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 ar concatenated before printing. To avoid this, set
+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
@@ -693,6 +693,7 @@ and the needed space after the heading.
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.
@@ -701,7 +702,7 @@ Could be used to change the page header according to the section heading.
Set hyphenation character.
Default value is \e%.
Resets to the default if called without argument.
-Hyphenation can be turned by setting number
+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]]]]"
@@ -747,7 +748,7 @@ Userdefined heading exit.
Called just after printing the header.
See \fBH\fP.
.TP
-.B "I [italic-text [prev-font-text [italic-text [...]]]"
+.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.
@@ -755,26 +756,30 @@ 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]]
+.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
+.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 filename [type]"
+.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
-teh type of index, page number, header marks or both.
+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
@@ -786,6 +791,15 @@ Header marks
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.
@@ -814,19 +828,15 @@ user-defined macros \fBTXIND\fP, \fBTYIND\fP and \fBTZIND\fP if defined.
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 "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.
+.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
+.B "IR [italic-text [roman-text [italic-text [...]]]]"
+Italic-roman.
Even arguments is printed in italic, odd in roman.
See \fBI\fP.
.TP
@@ -878,7 +888,7 @@ before them. Default is 1.
\fBLB\fP itself will print \fILB-space\fP blank lines. Default is 0.
.TP
.B "LC [list-level]"
-List-status clear
+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.
@@ -889,7 +899,7 @@ 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 \fBLS\fP
+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
@@ -940,7 +950,7 @@ See also \fBINTERNALS\fP.
Style\fP
.T2 BL
Blocked. Date line, return address, writer's address and closing
-begins at the center of the line. All other lines begins at the left margin.
+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.
@@ -948,7 +958,7 @@ paragraph is indented five spaces.
Full-blocked. All lines begin at the left margin.
.T2 SP
Simplified. Almost the same as the full-blocked style. Subject and
-the writer'sidentification is printed in all-capital.
+the writer's identification are printed in all-capital.
.in
.TP
.B "LO type [arg]"
@@ -956,8 +966,8 @@ Specify options in letter (see \fB.LT\fP).
This is a list of the standard options:
.in +.5i
.T2 CN
-Confidential notation. Prints \fBRESTRICTED\fP on the second line
-below the date line. Any argument replaces \fBRESTRICTED\fP.
+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
@@ -996,7 +1006,7 @@ item.
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.
-\fIAddresse\fP just sets a variable, used in the AT&T macros.
+\fIAddressee\fP just sets a variable, used in the AT&T macros.
.br
\fBarg\fP
.in +.5i
@@ -1024,11 +1034,11 @@ Use \fBPGFORM\fP without arguments to return to normal.
.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. MULB starts a diversion and MULE
+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 MULB accepts all
+The unit for width and space is 'n', but \fBMULB\fP accepts all
normal unitspecifications like 'c' and 'i'.
-MULB operates in a separate environment.
+\fBMULB\fP operates in a separate environment.
.TP
.B "MULN"
Begin the next column. This is the only way to switch column.
@@ -1037,7 +1047,11 @@ Begin the next column. This is the only way to switch column.
End the multi-column mode and print the columns.
.TP
.B "nP [type]"
-Print numbered paragraph with header level two. Se \fB.P\fP.
+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
@@ -1135,21 +1149,21 @@ 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 off
-the header in letters or other special texts
+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 \fBmgm_ref\fP and \fBINITR\fP.
+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@pic\fP, see the manual for \fB@TMAC_M@pic\fP.
+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.
@@ -1177,7 +1191,7 @@ in \fIno-space\fP mode.
Roman.
Return to roman font, see also \fBI\fP.
.TP
-.B "RB [roman-text [bold-text [roman-text [...]]]"
+.B "RB [roman-text [bold-text [roman-text [...]]]]"
Roman-bold.
Even arguments is printed in roman, odd in boldface.
See \fBI\fP.
@@ -1194,16 +1208,16 @@ be empty ("").
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 is printed in roman, odd in italic.
+.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
+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
+\fIText-indent\fP changes the default indentation.
.TP
.B "RP [arg1 [arg2]]"
Produce reference page.
@@ -1211,7 +1225,7 @@ Produce reference page.
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 resetted if \fIarg1\fP is 1.
+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
@@ -1258,7 +1272,7 @@ 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 refname.
+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.
@@ -1268,10 +1282,11 @@ 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, otherwise at the last.
+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 \fBLetter internals\fP.
+See \fBINTERNALS\fP.
.TP
.B "SK [pages]"
Skip pages.
@@ -1341,7 +1356,7 @@ 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 contains
+\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
@@ -1354,10 +1369,10 @@ Table header. See \fBTS\fP.
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)]
+.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 is saved
+\fICharging-case number\fP and \fIfiling-case\fP are saved
for use in the front page processing.
.TP
.B TM [num1 [num2 [...]]]
@@ -1395,7 +1410,7 @@ 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 control several special features.
+\fIflag\fP controls several special features.
It contains the sum of all wanted features.
.in +.5i
.T2 Value
@@ -1404,9 +1419,9 @@ Description
Disable the escape-character (\e). This is normally turned on during
verbose output.
.T2 2
-Add en empty line before the verbose text.
+Add an empty line before the verbose text.
.T2 4
-Add en empty line after the verbose text.
+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
@@ -1431,7 +1446,7 @@ item.
.B "VM [top [bottom]]"
Vertical margin.
.TP
-.B "WA [writer-name [title]]
+.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.
@@ -1465,7 +1480,7 @@ Floating displays does not generate line break.
.LP
.\"########################################################################
.LP
-.B "Strings used in m@TMAC_M@:"
+.B "Strings used in m@TMAC_M_PREFIX@m:"
.TP
.B App
A string containing the word "APPENDIX".
@@ -1525,10 +1540,10 @@ Contains "LIST OF EQUATIONS".
Contains "Yours very truly,", used in \fB.FC\fP.
.TP
.B Letapp
-Contains "APPROVED:", used in \fB.AV.\fP.
+Contains "APPROVED:", used in \fB.AV\fP.
.TP
.B Letdate
-Contains "Date", used in \fB.AV.\fP.
+Contains "Date", used in \fB.AV\fP.
.TP
.B LetCN
Contains "CONFIDENTIAL", used in \fB.LO CN\fP.
@@ -1609,7 +1624,7 @@ Contains \e(tm, trade mark.
Argument to \fB.nm\fP in \fB.VERBON\fP, default: \fB1\fP.
.\"-----------------------------------
.LP
-.B "Number variables used in m@TMAC_M@:"
+.B "Number variables used in m@TMAC_M_PREFIX@m:"
.TP
.B Aph
Print an appendix-page for every new appendix
@@ -1712,6 +1727,11 @@ Hyphenation in body, default 1.
.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
@@ -1735,7 +1755,6 @@ List space, if current listlevel > Ls then no spacing will occur around lists.
Default 99.
.TP
.B Lsp
-.TP
The size of an empty line. Normally 0.5v, but it is 1v
if \fBn\fP is set (\fB.nroff\fP).
.TP
@@ -1753,7 +1772,7 @@ Numbering style [0:5], default 0.
4\ ==\ page header is removed on the first page.
.br
5\ ==\ "section-page" and "section-figure" numbering enabled.
-Se also the number-register Sectf and Sectp.
+See also the number-register Sectf and Sectp.
.TP
.B Np
Numbered paragraphs, default 0.
@@ -1804,11 +1823,11 @@ Paragraph type, default 0.
.TP
.B Sectf
Flag controlling "section-figures". A non-zero value enables this.
-Se also register N.
+See also register N.
.TP
.B Sectp
Flag controlling "section-page-numbers". A non-zero value enables this.
-Se also register N.
+See also register N.
.TP
.B Si
Display indent, default 5.
@@ -1824,7 +1843,7 @@ 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 5 and 0.
+\&\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
@@ -1858,7 +1877,7 @@ variable \fBlet*lo-\fP\fItype\fP.
Jörgen Hägg, Lund, Sweden <jh@axis.se>.
.SH FILES
.TP
-.B @MACRODIR@/tmac.@TMAC_M@
+.B @MACRODIR@/tmac.@TMAC_M_PREFIX@m
.TP
.B @TMAC_MDIR@/*.cov
.TP
@@ -1873,4 +1892,4 @@ Jörgen Hägg, Lund, Sweden <jh@axis.se>.
.BR @g@eqn (@MAN1EXT@)
.br
.BR mm (@MAN7EXT@)
-.BR m@TMAC_M@se (@MAN7EXT@)
+.BR m@TMAC_M_PREFIX@mse (@MAN7EXT@)
diff --git a/contrib/groff/mm/groff_mmse.man b/contrib/groff/mm/groff_mmse.man
index e27d0aefdaec..45ae7221794f 100644
--- a/contrib/groff/mm/groff_mmse.man
+++ b/contrib/groff/mm/groff_mmse.man
@@ -1,5 +1,5 @@
.\"
-.\" $Id: groff_mmse.man,v 1.32 1999/09/03 05:33:12 jh Exp $
+.\" $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@"
@@ -7,7 +7,7 @@
groff_mmse \- svenska mm makro för groff
.SH SYNTAX
.B groff
-.B \-m@TMAC_M@se
+.B \-m@TMAC_M_PREFIX@mse
[
.IR flaggor .\|.\|.
]
@@ -15,7 +15,7 @@ groff_mmse \- svenska mm makro för groff
.IR filer .\|.\|.
]
.SH BESKRIVNING
-\fBm@TMAC_M@se\fP är en svensk variant av \fBm@TMAC_M@\fP. Alla texter
+\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
@@ -70,7 +70,7 @@ 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@se
+.B @MACRODIR@/tmac.@TMAC_M_PREFIX@mse
.B @TMAC_MDIR@/se_*.cov
.SH "SE OCKSÅ"
.BR groff (@MAN1EXT@),
@@ -79,4 +79,4 @@ Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se>
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@)
.br
-.BR m@TMAC_M@ (@MAN7EXT@)
+.BR m@TMAC_M_PREFIX@m (@MAN7EXT@)
diff --git a/contrib/groff/mm/mm/0.MT b/contrib/groff/mm/mm/0.MT
index aa26cd3dad48..8c93108fcd51 100644
--- a/contrib/groff/mm/mm/0.MT
+++ b/contrib/groff/mm/mm/0.MT
@@ -1,5 +1,5 @@
.\"------------
-.\" $Id: 0.MT,v 1.32 1999/09/03 05:33:13 jh Exp $
+.\" $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
diff --git a/contrib/groff/mm/mm/4.MT b/contrib/groff/mm/mm/4.MT
index 15895ff99ef8..330d2838db85 100644
--- a/contrib/groff/mm/mm/4.MT
+++ b/contrib/groff/mm/mm/4.MT
@@ -1,5 +1,5 @@
.\"------------
-.\" $Id: 4.MT,v 1.32 1999/09/03 05:33:13 jh Exp $
+.\" $Id: 4.MT,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
.\" Cover sheet. Memorandum type 4
.\"------------
.de cov@print-title
@@ -61,7 +61,9 @@
. cov@print-title
. cov@print-authors
. cov@print-firm
-. if !\n[cov*abs-arg] .cov@print-abstract
+. if d cov*abstract \{\
+. if !\n[cov*abs-arg] .cov@print-abstract
+. \}
. SP 3
. nr hd*cur-bline \n[nl]
. ds cov*mt-printed
diff --git a/contrib/groff/mm/mm/5.MT b/contrib/groff/mm/mm/5.MT
index 687a9e1b3354..ee0ac1160e48 100644
--- a/contrib/groff/mm/mm/5.MT
+++ b/contrib/groff/mm/mm/5.MT
@@ -1,5 +1,5 @@
.\"------------
-.\" $Id: 5.MT,v 1.32 1999/09/03 05:33:13 jh Exp $
+.\" $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
diff --git a/contrib/groff/mm/mm/ms.cov b/contrib/groff/mm/mm/ms.cov
index 1fea393a6499..699ca44000c7 100644
--- a/contrib/groff/mm/mm/ms.cov
+++ b/contrib/groff/mm/mm/ms.cov
@@ -1,5 +1,5 @@
.\"------------
-.\" $Id: ms.cov,v 1.32 1999/09/03 05:33:13 jh Exp $
+.\" $Id: ms.cov,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
.\" Cover sheet. Mostly like ms cover.
.\"------------
.de cov@print-title
diff --git a/contrib/groff/mm/mm/se_ms.cov b/contrib/groff/mm/mm/se_ms.cov
index ec4432cdfad6..64e7c1176cad 100644
--- a/contrib/groff/mm/mm/se_ms.cov
+++ b/contrib/groff/mm/mm/se_ms.cov
@@ -1,3 +1,3 @@
-.\" $Id: se_ms.cov,v 1.32 1999/09/03 05:33:13 jh Exp $
+.\" $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
new file mode 100644
index 000000000000..e6aa5eb459b6
--- /dev/null
+++ b/contrib/groff/mm/mmroff.man
@@ -0,0 +1,48 @@
+.\"
+.\" $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
new file mode 100755
index 000000000000..69b6105b2925
--- /dev/null
+++ b/contrib/groff/mm/mmroff.pl
@@ -0,0 +1,134 @@
+#!/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
index f96f6158c8ec..cf7d8e112dc5 100644
--- a/contrib/groff/mm/tmac.m
+++ b/contrib/groff/mm/tmac.m
@@ -3,11 +3,11 @@
.ds RE \\$2
..
.\"
-.\" $Id: tmac.m,v 1.32 1999/09/03 05:33:12 jh Exp $
-.@revision $Revision: 1.32 $
+.\" $Id: tmac.m,v 1.2 2000/02/21 20:32:58 jhaegg Exp $
+.@revision $Revision: 1.2 $
.ig
-Copyright (C) 1991-1998 Free Software Foundation, Inc.
+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
@@ -167,6 +167,7 @@ Index array!index
.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 \{\
@@ -539,10 +540,12 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\" 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 @ll \\n[.l]
. nr @cur-ll \\n[@ll]
. lt \\n[@ll]u
.\}
@@ -553,17 +556,23 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\"
.ie !''\\$2' \{\
. pl \\$2
-. nr @pl \n[.p]
+. nr @pl \\n[.p]
.\}
.el .pl \\n[@pl]u
.\"
.ie !''\\$3' \{\
. po \\$3
-. nr @po \n[.o]
+. 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]
@@ -911,8 +920,14 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.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.
-.nr H1h \\n[H1] 1
+.\" 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
@@ -1105,6 +1120,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.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
@@ -2923,13 +2939,27 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
..
.de AE
..
-.\" I am planning to use mgm for some time :-)
-.nr cov*year 1900+\n[yr]
-.ds cov*new-date \*[MO\n[mo]] \n[dy], \n[cov*year]
+.\" 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
@@ -2981,21 +3011,20 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\"
.\" init reference system
.de INITR
-.ds qrf*file \\$1
+.ds qrf*file \\$1.qrf
.nr qrf*pass 2
.if \\n[D]>1 .tm INITR: source \\*[qrf*file]
-.if \\n[Ref] \{\
-. tm .\\\\" Filename: \\$1
-.\}
-'so \\*[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"
-.ie !r qrf*pass .tm "SETR: No .INITR in this file"
-.el \{\
+.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
@@ -3011,7 +3040,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\}
..
.\"---------------
-.\" get misc-string, output <->42<-> in pass 1
+.\" get misc-string
.\" If two arg -> set var. arg to misc-string.
.de GETST
.if \\n[.$]<1 .@error "GETST:reference name missing"
@@ -3024,7 +3053,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\}
..
.\"---------------
-.\" get header-number, output X.X.X. in pass 1
+.\" get header-number
.\" If two arg -> set var. arg to header-number.
.de GETHN
.if \\n[.$]<1 .@error "GETHN:reference name missing"
@@ -3036,13 +3065,13 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\}
..
.\"---------------
-.\" get page-number, output 9999 in pass 1
+.\" 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
+.if d \\*[qrf*name]-pn \{\
. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-pn]
. el \\*[\\*[qrf*name]-pn]\c
.\}
@@ -3066,53 +3095,64 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
..
.\"--------------------
.\" Another type of index system
-.\" INITI filename [type]
+.\" INITI type filename [macro]
.de INITI
-.if \\n[.$]<1 .@error "INITI:filename missing"
+.if \\n[.$]<1 .@error "INITI:type missing"
.\" ignore if INITI has already been used
-.if r ind*pass .@error "INITI:already initialyzed"
-.nr ind*pass 1
-.ds ind*file \\$1.ind
-.ie \\n[.$]<2 .ds ind*type N
-.el .ds ind*type \\$2
+.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 !r ind*pass .@error "IND: No .INITI in this file"
+.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]"
.\"
-.if \\n[.$] .ds ind*line \\$1
+.ds ind*line \\$1
.while \\n[.$]>0 \{\
. shift
. as ind*line \t\\$1
.\}
.as ind*line \\*[ind*ref]
-.tm \\*[ind*line]
+.if \\n[Ref] .tm .\\\\" IND \\*[ind*line]
..
.\" print index
.de INDP
-.\" sort the index
-.if !\\n[Cp] .pg@next-page
-.\" print INDEX
-.\" execute user-defined macros
-.if d TXIND .TXIND
-.ie d TYIND .TYIND
+.ie \\n[Ref] .tm .\\\\" Index: \\*[ind*file]
.el \{\
-. SK
-. ce
+. 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
-.\}
-.pso \\*[Indcmd] \\*[ind*file]
-.ie d TZIND .TZIND
-.el \{\
-. fi
-. 1C
+. SP 3
+. 2C
+. nf
+. \}
+' so \\*[ind*file]
+. ie d TZIND .TZIND
+. el \{\
+. fi
+. 1C
+. \}
.\}
+.rm ind*file
..
.\"########################### module let ############################
.\" Letter macros
diff --git a/contrib/groff/mm/tmac.mse b/contrib/groff/mm/tmac.mse
index 2b1e8eed1fd6..39f137eae92b 100644
--- a/contrib/groff/mm/tmac.mse
+++ b/contrib/groff/mm/tmac.mse
@@ -1,9 +1,10 @@
-.\" $Id: tmac.mse,v 1.32 1999/09/03 05:33:12 jh Exp $
+.\" $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
@@ -66,8 +67,6 @@
.ds MO10 oktober
.ds MO11 november
.ds MO12 december
-.nr cov*year 1900+\n[yr]
-.ds cov*new-date \n[dy] \*[MO\n[mo]] \n[cov*year]
.nr pg*footer-size 4\" 1v+footer+even/odd footer+1v
.\"------------------------------------------------
.\" Dokumentnamn
diff --git a/contrib/groff/nroff/Makefile.sub b/contrib/groff/nroff/Makefile.sub
index 096c046c81c9..fa6bc4dcc491 100644
--- a/contrib/groff/nroff/Makefile.sub
+++ b/contrib/groff/nroff/Makefile.sub
@@ -10,8 +10,9 @@ nroff: nroff.sh
chmod +x $@
install_data: nroff
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/$(NAMEPREFIX)nroff
- $(INSTALL_PROGRAM) nroff $(bindir)/$(NAMEPREFIX)nroff
+ $(INSTALL_SCRIPT) nroff $(bindir)/$(NAMEPREFIX)nroff
uninstall_sub:
-rm -f $(bindir)/$(NAMEPREFIX)nroff
diff --git a/contrib/groff/nroff/nroff.man b/contrib/groff/nroff/nroff.man
index 4087ebe53a56..a01ea59d8333 100644
--- a/contrib/groff/nroff/nroff.man
+++ b/contrib/groff/nroff/nroff.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 Free Software Foundation, Inc.
+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
@@ -20,31 +20,26 @@ the original English.
.SH NAME
@g@nroff \- emulate nroff command with groff
.SH SYNOPSIS
+.nr a \n(.j
+.ad l
+.nr i \n(.i
+.in +\w'\fB@g@nroff 'u
+.ti \niu
.B @g@nroff
-[
-.B \-h
-]
-[
-.B \-i
-]
-[
-.BI \-m name
-]
-[
-.BI \-n num
-]
-[
-.BI \-o list
-]
-[
-.BI \-r cn
-]
-[
-.BI \-T name
-]
-[
-.I file\|.\|.\|.
-]
+.de OP
+.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
+.el .RB "[\ " "\\$1" "\ ]"
+..
+.OP \-h
+.OP \-i
+.OP \-m name
+.OP \-n num
+.OP \-o list
+.OP \-r cn
+.OP \-T name
+.RI "[\ " file\|.\|.\|. "\ ]"
+.br
+.ad \na
.SH DESCRIPTION
The
.B @g@nroff
@@ -54,9 +49,11 @@ command using groff.
The
.B \-T
option with an argument other than
-.B ascii
-and
-.B latin1
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
+or
+.B cp1047
will be ignored.
The
.B \-h
@@ -85,9 +82,16 @@ Options
.B \-S
(safer) and
.B \-U
-(unsafe) are passed to groff.
+(unsafe) are passed to
+.BR groff .
.B \-S
is passed by default.
+.SH NOTES
+This shell script is basically intended for use with
+.BR man (1),
+so warnings are suppressed.
+nroff-style character definitions (in the file tmac.tty-char) are also
+loaded to emulate unrepresentable glyphs.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
diff --git a/contrib/groff/nroff/nroff.sh b/contrib/groff/nroff/nroff.sh
index ee4e332c9108..b1cab83612a2 100755
--- a/contrib/groff/nroff/nroff.sh
+++ b/contrib/groff/nroff/nroff.sh
@@ -3,66 +3,81 @@
prog="$0"
# Default device.
-if test "X$LC_CTYPE" = "Xiso_8859_1" || test "X$LESSCHARSET" = "Xlatin1"
-then
- T=-Tlatin1
-else
- T=-Tascii
-fi
+# First try the "locale charmap" command, because it's most reliable.
+# On systems where it doesn't exist, look at the environment variables.
+case "`locale charmap 2>/dev/null`" in
+ UTF-8)
+ T=-Tutf8 ;;
+ ISO-8859-1)
+ T=-Tlatin1 ;;
+ IBM-1047)
+ T=-Tcp1047 ;;
+ *)
+ case "${LC_ALL-${LC_CTYPE-${LANG}}}" in
+ *.UTF-8)
+ T=-Tutf8 ;;
+ iso_8859_1 | *.ISO-8859-1)
+ T=-Tlatin1 ;;
+ *.IBM-1047)
+ T=-Tcp1047 ;;
+ *)
+ case "$LESSCHARSET" in
+ utf-8)
+ T=-Tutf8 ;;
+ latin1)
+ T=-Tlatin1 ;;
+ cp1047)
+ T=-Tcp1047 ;;
+ *)
+ T=-Tascii ;;
+ esac ;;
+ esac ;;
+esac
opts=
safer=-S
-for i
-do
- case $1 in
- -h)
- opts="$opts -P-h"
- ;;
- -[eq]|-s*)
- # ignore these options
- ;;
- -[mrnoT])
- echo "$prog: option $1 requires an argument" >&2
- exit 1
- ;;
- -i|-[mrno]*)
- opts="$opts $1";
- ;;
+# `for i; do' doesn't work with some versions of sh
- -Tascii|-Tlatin1)
- T=$1
- ;;
- -T*)
- # ignore other devices
- ;;
- -S)
- # safer behaviour
- safer=-S
- ;;
- -U)
- # unsafe behaviour
- safer=-U
- ;;
- -u*)
- # Solaris 2.2 `man' uses -u0; ignore it,
- # since `less' and `more' can use the emboldening info.
- ;;
- --)
- shift
- break
- ;;
- -)
- break
- ;;
- -*)
- echo "$prog: invalid option $1" >&2
- exit 1
- ;;
- *)
- break
- ;;
- esac
- shift
+for i
+ do
+ case $1 in
+ -h)
+ opts="$opts -P-h" ;;
+ -[eq] | -s*)
+ # ignore these options
+ ;;
+ -[mrnoT])
+ echo "$prog: option $1 requires an argument" >&2
+ exit 1 ;;
+ -i | -[mrno]*)
+ opts="$opts $1" ;;
+ -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047)
+ T=$1 ;;
+ -T*)
+ # ignore other devices
+ ;;
+ -S)
+ # safer behaviour
+ safer=-S ;;
+ -U)
+ # unsafe behaviour
+ safer=-U ;;
+ -u*)
+ # Solaris 2.2 `man' uses -u0; ignore it,
+ # since `less' and `more' can use the emboldening info.
+ ;;
+ --)
+ shift
+ break ;;
+ -)
+ break ;;
+ -*)
+ echo "$prog: invalid option $1" >&2
+ exit 1 ;;
+ *)
+ break ;;
+ esac
+ shift
done
# This shell script is intended for use with man, so warnings are
diff --git a/contrib/groff/pfbtops/Makefile.sub b/contrib/groff/pfbtops/Makefile.sub
index aa464ddd2b3e..f731ff578ba2 100644
--- a/contrib/groff/pfbtops/Makefile.sub
+++ b/contrib/groff/pfbtops/Makefile.sub
@@ -1,6 +1,6 @@
PROG=pfbtops
MAN1=pfbtops.n
OBJS=pfbtops.o
-CSRCS=pfbtops.c
+CSRCS=$(srcdir)/pfbtops.c
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
diff --git a/contrib/groff/pfbtops/pfbtops.c b/contrib/groff/pfbtops/pfbtops.c
index fb370ab79dfc..9aaeeccfe8e8 100644
--- a/contrib/groff/pfbtops/pfbtops.c
+++ b/contrib/groff/pfbtops/pfbtops.c
@@ -1,6 +1,9 @@
/* 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)
@@ -34,8 +37,8 @@ int main(argc, argv)
switch (opt) {
case 'v':
{
- extern char *version_string;
- fprintf(stderr, "pfbtops groff version %s\n", version_string);
+ extern char *Version_string;
+ fprintf(stderr, "pfbtops groff version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -51,6 +54,9 @@ int main(argc, argv)
perror(argv[optind]);
exit(1);
}
+#ifdef SET_BINARY
+ SET_BINARY(fileno(stdin));
+#endif
for (;;)
{
int type, c, i;
diff --git a/contrib/groff/pic/Makefile.sub b/contrib/groff/pic/Makefile.sub
index 06d19750dff6..f1e292731c14 100644
--- a/contrib/groff/pic/Makefile.sub
+++ b/contrib/groff/pic/Makefile.sub
@@ -2,10 +2,30 @@ 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=lex.cc main.cc object.cc common.cc troff.cc tex.cc
-HDRS=common.h object.h output.h pic.h position.h text.h
-GRAM=pic.y
-YTABC=pic.cc
-YTABH=pic.tab.h
+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/lex.cc b/contrib/groff/pic/lex.cc
index 920938d538e1..329578a53deb 100644
--- a/contrib/groff/pic/lex.cc
+++ b/contrib/groff/pic/lex.cc
@@ -21,7 +21,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "pic.h"
#include "ptable.h"
#include "object.h"
-#include "pic.tab.h"
+#include "pic_tab.h"
declare_ptable(char)
implement_ptable(char)
@@ -65,9 +65,8 @@ int input::get_location(const char **, int *)
}
file_input::file_input(FILE *f, const char *fn)
-: lineno(0), ptr(""), filename(fn)
+: fp(f), filename(fn), lineno(0), ptr("")
{
- fp = f;
}
file_input::~file_input()
@@ -174,7 +173,7 @@ char *process_body(const char *body)
argument_macro_input::argument_macro_input(const char *body, int ac, char **av)
-: argc(ac), ap(0)
+: ap(0), argc(ac)
{
for (int i = 0; i < argc; i++)
argv[i] = av[i];
@@ -496,6 +495,7 @@ int lookup_keyword(const char *str, int len)
{ "spline", SPLINE },
{ "sprintf", SPRINTF },
{ "sqrt", SQRT },
+ { "srand", SRAND },
{ "start", START },
{ "the", THE },
{ "then", THEN },
@@ -1328,7 +1328,7 @@ public:
};
for_input::for_input(char *vr, double t, int bim, double b, char *bd)
-: var(vr), to(t), by_is_multiplicative(bim), by(b), body(bd), p(body),
+: var(vr), body(bd), to(t), by_is_multiplicative(bim), by(b), p(body),
done_newline(0)
{
}
@@ -1441,7 +1441,7 @@ public:
copy_file_thru_input::copy_file_thru_input(input *i, const char *b,
const char *u)
-: in(i), copy_thru_input(b, u)
+: copy_thru_input(b, u), in(i)
{
}
@@ -1604,7 +1604,7 @@ public:
};
simple_file_input::simple_file_input(FILE *p, const char *s)
-: filename(s), fp(p), lineno(1)
+: filename(s), lineno(1), fp(p)
{
}
diff --git a/contrib/groff/pic/main.cc b/contrib/groff/pic/main.cc
index cb4444f8f9b6..1536513a706b 100644
--- a/contrib/groff/pic/main.cc
+++ b/contrib/groff/pic/main.cc
@@ -563,8 +563,8 @@ int main(int argc, char **argv)
break;
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU pic version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU pic version %s\n", Version_string);
fflush(stderr);
break;
}
diff --git a/contrib/groff/pic/object.cc b/contrib/groff/pic/object.cc
index 860e1bc64531..6b346330e4e2 100644
--- a/contrib/groff/pic/object.cc
+++ b/contrib/groff/pic/object.cc
@@ -29,7 +29,7 @@ line_type::line_type()
{
}
-output::output() : desired_height(0.0), desired_width(0.0), args(0)
+output::output() : args(0), desired_height(0.0), desired_width(0.0)
{
}
@@ -391,12 +391,12 @@ place *object::find_label(const char *)
}
segment::segment(const position &a, int n, segment *p)
-: pos(a), is_absolute(n), next(p)
+: is_absolute(n), pos(a), next(p)
{
}
text_item::text_item(char *t, const char *fn, int ln)
-: filename(fn), lineno(ln), text(t), next(0)
+: next(0), text(t), filename(fn), lineno(ln)
{
adj.h = CENTER_ADJUST;
adj.v = NONE_ADJUST;
@@ -855,7 +855,7 @@ public:
block_object::block_object(const position &d, const object_list &ol,
PTABLE(place) *t)
-: oblist(ol), tbl(t), rectangle_object(d)
+: rectangle_object(d), oblist(ol), tbl(t)
{
}
@@ -1194,7 +1194,7 @@ public:
};
linear_object::linear_object(const position &s, const position &e)
-: strt(s), en(e), arrow_at_start(0), arrow_at_end(0)
+: arrow_at_start(0), arrow_at_end(0), strt(s), en(e)
{
}
@@ -1214,7 +1214,7 @@ void linear_object::add_arrows(int at_start, int at_end,
line_object::line_object(const position &s, const position &e,
position *p, int i)
-: v(p), n(i), linear_object(s, e)
+: linear_object(s, e), v(p), n(i)
{
}
@@ -1743,7 +1743,7 @@ 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)
-: label_list(0), crn(c), ypath(0)
+: crn(c), label_list(0), ypath(0)
{
}
diff --git a/contrib/groff/pic/pic.cc b/contrib/groff/pic/pic.cc
index c75d6bbc4104..1130fdce5add 100644
--- a/contrib/groff/pic/pic.cc
+++ b/contrib/groff/pic/pic.cc
@@ -1,27 +1,15 @@
-#if defined(__STDC__) || defined(__cplusplus)
-#define YYCONST const
-#define YYPARAMS(x) x
-#define YYDEFUN(name, arglist, args) name(args)
-#define YYAND ,
-#define YYPTR void *
-#else
-#define YYCONST
-#define YYPARAMS(x) ()
-#define YYDEFUN(name, arglist, args) name arglist args;
-#define YYAND ;
-#define YYPTR char *
-#endif
#ifndef lint
-YYCONST static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley +Cygnus.28) 01/20/91";
+/*static char yysccsid[] = "from: @(#)yaccpar 1.9 (Berkeley) 02/21/93";*/
+static char yyrcsid[] = "$Id: pic.cc,v 1.2 2000/05/31 14:18:50 wlemb Exp $";
#endif
#define YYBYACC 1
-#ifndef YYDONT_INCLUDE_STDIO
-#include <stdio.h>
-#endif
-#ifdef __cplusplus
-#include <stdlib.h> /* for malloc/realloc/free */
-#endif
-#line 20 "pic.y"
+#define YYMAJOR 1
+#define YYMINOR 9
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING (yyerrflag!=0)
+#define YYPREFIX "yy"
+#line 20 "/home/cjk/groff/pic/pic.y"
#include "pic.h"
#include "ptable.h"
#include "object.h"
@@ -42,8 +30,14 @@ extern "C" {
#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") */
@@ -75,7 +69,7 @@ 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);
-#line 73 "pic.y"
+#line 78 "/home/cjk/groff/pic/pic.y"
typedef union {
char *str;
int n;
@@ -94,7 +88,7 @@ typedef union {
graphics_state state;
object_type obtype;
} YYSTYPE;
-#line 95 "y.tab.c"
+#line 88 "y.tab.c"
#define LABEL 257
#define VARIABLE 258
#define NUMBER 259
@@ -170,43 +164,44 @@ typedef union {
#define K_MIN 329
#define INT 330
#define RAND 331
-#define COPY 332
-#define THRU 333
-#define TOP 334
-#define BOTTOM 335
-#define UPPER 336
-#define LOWER 337
-#define SH 338
-#define PRINT 339
-#define CW 340
-#define CCW 341
-#define FOR 342
-#define DO 343
-#define IF 344
-#define ELSE 345
-#define ANDAND 346
-#define OROR 347
-#define NOTEQUAL 348
-#define EQUALEQUAL 349
-#define LESSEQUAL 350
-#define GREATEREQUAL 351
-#define LEFT_CORNER 352
-#define RIGHT_CORNER 353
-#define CENTER 354
-#define END 355
-#define START 356
-#define RESET 357
-#define UNTIL 358
-#define PLOT 359
-#define THICKNESS 360
-#define FILL 361
-#define ALIGNED 362
-#define SPRINTF 363
-#define COMMAND 364
-#define DEFINE 365
-#define UNDEF 366
+#define SRAND 332
+#define COPY 333
+#define THRU 334
+#define TOP 335
+#define BOTTOM 336
+#define UPPER 337
+#define LOWER 338
+#define SH 339
+#define PRINT 340
+#define CW 341
+#define CCW 342
+#define FOR 343
+#define DO 344
+#define IF 345
+#define ELSE 346
+#define ANDAND 347
+#define OROR 348
+#define NOTEQUAL 349
+#define EQUALEQUAL 350
+#define LESSEQUAL 351
+#define GREATEREQUAL 352
+#define LEFT_CORNER 353
+#define RIGHT_CORNER 354
+#define CENTER 355
+#define END 356
+#define START 357
+#define RESET 358
+#define UNTIL 359
+#define PLOT 360
+#define THICKNESS 361
+#define FILL 362
+#define ALIGNED 363
+#define SPRINTF 364
+#define COMMAND 365
+#define DEFINE 366
+#define UNDEF 367
#define YYERRCODE 256
-static YYCONST short yylhs[] = { -1,
+short yylhs[] = { -1,
0, 0, 16, 17, 17, 28, 28, 29, 29, 30,
30, 30, 30, 30, 30, 30, 30, 30, 31, 30,
30, 32, 33, 30, 34, 35, 30, 36, 30, 30,
@@ -230,9 +225,9 @@ static YYCONST short yylhs[] = { -1,
9, 9, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
};
-static YYCONST short yylen[] = { 2,
+short yylen[] = { 2,
1, 1, 3, 1, 3, 0, 1, 1, 2, 3,
4, 1, 1, 1, 1, 1, 2, 2, 0, 3,
2, 0, 0, 7, 0, 0, 6, 0, 10, 1,
@@ -255,10 +250,10 @@ static YYCONST short yylen[] = { 2,
2, 2, 2, 1, 1, 2, 2, 2, 2, 1,
1, 1, 1, 1, 2, 2, 2, 2, 2, 3,
3, 3, 3, 3, 3, 2, 3, 4, 4, 6,
- 4, 4, 4, 6, 6, 4, 4, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 2,
+ 4, 4, 4, 6, 6, 4, 4, 3, 4, 3,
+ 3, 3, 3, 3, 3, 3, 3, 2,
};
-static YYCONST short yydefred[] = { 0,
+short yydefred[] = { 0,
8, 0, 2, 0, 0, 0, 0, 125, 16, 12,
13, 14, 15, 71, 72, 73, 74, 75, 76, 77,
78, 0, 19, 0, 0, 0, 0, 0, 0, 0,
@@ -266,1694 +261,1777 @@ static YYCONST short yydefred[] = { 0,
0, 0, 0, 0, 25, 0, 146, 203, 204, 149,
151, 188, 189, 145, 175, 176, 177, 178, 179, 180,
181, 182, 183, 184, 185, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 186, 187, 0, 0, 194,
- 195, 200, 202, 201, 0, 0, 0, 0, 0, 131,
- 129, 147, 0, 0, 0, 0, 0, 0, 41, 0,
- 38, 0, 0, 0, 0, 0, 0, 0, 0, 35,
- 0, 0, 0, 0, 0, 31, 3, 0, 113, 114,
- 115, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 102, 0, 0, 0, 111, 112,
- 119, 120, 121, 122, 116, 117, 0, 0, 124, 0,
- 118, 36, 0, 0, 10, 0, 22, 0, 20, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 190,
- 192, 196, 198, 191, 193, 197, 199, 0, 0, 0,
- 0, 0, 0, 0, 0, 137, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 205, 206, 207, 208, 209, 0,
- 142, 0, 0, 163, 155, 156, 157, 158, 159, 160,
- 161, 0, 154, 152, 153, 39, 0, 0, 57, 0,
- 0, 0, 43, 0, 0, 0, 0, 81, 127, 0,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 166, 100, 0, 169, 0, 0, 101, 0, 0,
- 0, 0, 0, 37, 0, 0, 0, 0, 0, 0,
- 62, 0, 11, 0, 26, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 228, 0, 217, 140, 0, 150,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 148,
- 132, 133, 162, 0, 0, 53, 0, 0, 0, 0,
- 0, 51, 0, 0, 50, 49, 0, 66, 83, 32,
- 174, 0, 0, 0, 0, 164, 0, 168, 0, 0,
- 23, 0, 218, 219, 0, 221, 222, 223, 0, 0,
- 226, 227, 0, 0, 0, 0, 0, 44, 0, 126,
- 0, 0, 173, 172, 0, 165, 0, 0, 27, 0,
- 0, 0, 134, 138, 0, 0, 0, 0, 70, 67,
- 171, 0, 24, 46, 220, 224, 225, 136, 0, 0,
- 170, 0, 0, 28, 0, 0, 29,
+ 0, 0, 0, 0, 0, 0, 186, 187, 0, 0,
+ 194, 195, 200, 202, 201, 0, 0, 0, 0, 0,
+ 131, 129, 147, 0, 0, 0, 0, 0, 0, 41,
+ 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 31, 3, 0, 113,
+ 114, 115, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 102, 0, 0, 0, 111,
+ 112, 119, 120, 121, 122, 116, 117, 0, 0, 124,
+ 0, 118, 36, 0, 0, 10, 0, 22, 0, 20,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 190, 192, 196, 198, 191, 193, 197, 199, 0,
+ 0, 0, 0, 0, 0, 0, 0, 137, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 205, 206, 207, 208,
+ 209, 0, 142, 0, 0, 163, 155, 156, 157, 158,
+ 159, 160, 161, 0, 154, 152, 153, 39, 0, 0,
+ 57, 0, 0, 0, 43, 0, 0, 0, 0, 81,
+ 127, 0, 0, 0, 0, 5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 166, 100, 0, 169, 0, 0, 101,
+ 0, 0, 0, 0, 0, 37, 0, 0, 0, 0,
+ 0, 0, 62, 0, 11, 0, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 228, 0, 0, 217,
+ 140, 0, 150, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 148, 132, 133, 162, 0, 0, 53, 0,
+ 0, 0, 0, 0, 51, 0, 0, 50, 49, 0,
+ 66, 83, 32, 174, 0, 0, 0, 0, 164, 0,
+ 168, 0, 0, 23, 0, 218, 219, 0, 221, 222,
+ 223, 0, 0, 226, 227, 229, 0, 0, 0, 0,
+ 0, 44, 0, 126, 0, 0, 173, 172, 0, 165,
+ 0, 0, 27, 0, 0, 0, 134, 138, 0, 0,
+ 0, 0, 70, 67, 171, 0, 24, 46, 220, 224,
+ 225, 136, 0, 0, 170, 0, 0, 28, 0, 0,
+ 29,
};
-static YYCONST short yydgoto[] = { 2,
- 105, 179, 107, 400, 90, 91, 33, 92, 93, 263,
- 264, 265, 108, 95, 34, 3, 35, 36, 96, 223,
- 97, 98, 379, 337, 109, 100, 101, 241, 5, 38,
- 46, 284, 377, 158, 352, 406, 243, 39, 330, 114,
- 390, 371, 115, 202,
+short yydgoto[] = { 2,
+ 106, 181, 108, 404, 91, 92, 33, 93, 94, 265,
+ 266, 267, 109, 96, 34, 3, 35, 36, 97, 225,
+ 98, 99, 383, 340, 110, 101, 102, 243, 5, 38,
+ 46, 286, 381, 159, 355, 410, 245, 39, 333, 115,
+ 394, 375, 116, 204,
};
-static YYCONST short yysindex[] = { -52,
- 0, 0, 0, 5205, -46, 7, -12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -249, 0,10894, -198,11035, -186,11441, 51,10894,
- 0, 0, -251, 0, -52,10595, 0, 0, -42, 0,
- -52,11035, 35, -236, 0, -145, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 79, 80, 85, 87, 91,
- 94, 98, 101, 102, 107, 0, 0, -126, -67, 0,
- 0, 0, 0, 0,11136,11035,11441,11441, 1187, 0,
- 0, 0, -71, -250, 2230, -10, 575, 426, 0,10894,
- 0, 71,11035,11035, 1220, -141, -305, -250, -291, 0,
- -28, -101,10894, -52, -52, 0, 0, 9974, 0, 0,
- 0,11746,11746,11746,11746,11441,11441,11441,11441,11542,
-11542,11542, 4851,11645, 0,11746,11746,11746, 0, 0,
- 0, 0, 0, 0, 0, 0,11441,11746, 0, 1647,
- 0, 0, -98,10233, 0,11035, 0, -100, 0,11035,
-11035,11035,11035,11035,11035,11035,11035,11035,10736, 0,
- 0, 0, 0, 0, 0, 0, 0, 1626, 141, 146,
- 42, -73, 99, 99, -105, 0,11441,11441,11441,11441,
-11441,11441,11441,11542,11441,11441,11441,11441,11441,11441,
-11441,11542, -18, 152, 0, 0, 0, 0, 0, -56,
- 0,11645,11645, 0, 0, 0, 0, 0, 0, 0,
- 0, 120, 0, 0, 0, 0,11441, 99, 0,11035,
-11035,11441, 0,11035,11035, -242, -242, 0, 0, 89,
- 5205, 125, -41, 0, 1647, 1647, 1647, 1647, 1647, 1647,
- 1647, 1647, 1187, -10, -10, -10, 2121, 455, 575, 2121,
- -33, 0, 0, 2134, 0,11237, 781, 0, 1647, 1647,
- 1647, 1647, 1647, 0, 7, -12, 0, 0, 0, -250,
- 0, -10, 0, -32, 0, 202, 203, 189, 207, 208,
- 210, 209, 217, 235, 0, 243, 0, 0,11542, 0,
- -1, 1117, 1180, 739, 739, 357, 357, 1647, -21, 192,
- 357, 46, 46, 99, 99, 99, 99, -35, 152, 0,
- 0, 0, 0, 1076, 1117, 0, 1659, -44, 357, 47,
- 1117, 0, 1659, -44, 0, 0, 10, 0, 0, 0,
- 0, 575, 2121, 2121, 264, 0, 67, 0, 1208, 146,
- 0, -27, 0, 0,11035, 0, 0, 0,11035,11035,
- 0, 0, 2, 13,11542,11542,11441, 0,11441, 0,
- 5205, 2121, 0, 0, 2121, 0, -27, 65, 0, 285,
- 292, 293, 0, 0, -14, -10, 1619, 1647, 0, 0,
- 0, 299, 0, 0, 0, 0, 0, 0,11340, 1,
- 0,11441, 1647, 0, 1647, 86, 0,
+short yysindex[] = { -44,
+ 0, 0, 0,11792, -40, -37, -14, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -246, 0,10742, -229,10874, -218,11317, 6,10742,
+ 0, 0, -296, 0, -44,10435, 0, 0, -39, 0,
+ -44,10874, 13, -280, 0, -195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 45, 47, 54, 76, 87,
+ 92, 109, 120, 142, 146, 158, 0, 0, -262, -219,
+ 0, 0, 0, 0, 0,10985,10874,11317,11317, 350,
+ 0, 0, 0, -76, -162, 1981, 18, -35, 734, 0,
+10742, 0, 139,10874,10874, 1064, -153, -269, -162, -156,
+ 0, 623, -59,10742, -44, -44, 0, 0,11764, 0,
+ 0, 0,11649,11649,11649,11649,11317,11317,11317,11317,
+11428,11428,11428, 1994,11538, 0,11649,11649,11649, 0,
+ 0, 0, 0, 0, 0, 0, 0,11317,11649, 0,
+ 1477, 0, 0, -55,10076, 0,10874, 0, -48, 0,
+10874,10874,10874,10874,10874,10874,10874,10874,10874,10574,
+10874, 0, 0, 0, 0, 0, 0, 0, 0, 1517,
+ 166, 174, 97, -46, 127, 127, -79, 0,11317,11317,
+11317,11317,11317,11317,11317,11428,11317,11317,11317,11317,
+11317,11317,11317,11428, -7, 180, 0, 0, 0, 0,
+ 0, -29, 0,11538,11538, 0, 0, 0, 0, 0,
+ 0, 0, 0, 136, 0, 0, 0, 0,11317, 127,
+ 0,10874,10874,11317, 0,10874,10874, -252, -252, 0,
+ 0, 106,11792, 141, -26, 0, 1477, 1477, 1477, 1477,
+ 1477, 1477, 1477, 1477, 350, 18, 18, 18, 1649, 1192,
+ -35, 1649, -8, 0, 0, 1661, 0,11095, 266, 0,
+ 1477, 1477, 1477, 1477, 1477, 0, -37, -14, 0, 0,
+ 0, -162, 0, 18, 0, -16, 0, 210, 212, 211,
+ 216, 218, 228, 232, 233, 231, 0, 238, 239, 0,
+ 0,11428, 0, -15, 1414, 1484, 595, 595, 507, 507,
+ 1477, 190, 251, 507, -19, -19, 127, 127, 127, 127,
+ -42, 180, 0, 0, 0, 0, -11, 1414, 0, 1505,
+ -57, 507, 30, 1414, 0, 1505, -57, 0, 0, 28,
+ 0, 0, 0, 0, -35, 1649, 1649, 254, 0, 43,
+ 0, 634, 174, 0, -52, 0, 0,10874, 0, 0,
+ 0,10874,10874, 0, 0, 0, 14, -1,11428,11428,
+11317, 0,11317, 0,11792, 1649, 0, 0, 1649, 0,
+ -52, 52, 0, 273, 274, 280, 0, 0, -21, 18,
+ 1075, 1477, 0, 0, 0, 281, 0, 0, 0, 0,
+ 0, 0,11207, -20, 0,11317, 1477, 0, 1477, 71,
+ 0,
};
-static YYCONST short yyrindex[] = { 20,
- 0, 0, 0, 347, 150, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 23, 0, 0, 0,
- 0, 0, 59, 0, 109, 212, 0, 0, 268, 0,
-10487, 0, 0, 287, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+short yyrindex[] = { 202,
+ 0, 0, 0, 332, 93, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0, 0, 58, 0, 161, 60, 0, 0, 70, 0,
+10326, 0, 0, 204, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8932, 0,
- 0, 0, 0, 4221, 8476, 9124, 0, 0, 0, 589,
- 0, 0, 0, 0, 181, 0, 721, 0, 0, 0,
-10102, 0, 615, 5629, 5629, 0, 0, 122, 0, 0,
- 0, 9441, 9481, 9223, 9331, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 9580, 9690, 9789, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 9829, 0, 4977,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 308, 0, 213,
- 0, 0, 270, 602, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 8870,
+ 0, 0, 0, 0, 4424, 8570, 8999, 0, 0, 0,
+ 376, 0, 0, 0, 0, 1390, 0, 2313, 0, 0,
+ 0, 9969, 0, 465,11903,11903, 0, 0, 206, 0,
+ 0, 0, 9151, 9360, 9110, 9239, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 9460, 9545, 9669, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9786, 0,
+ 4973, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2904, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 293,
+ 0, 261, 0, 0, 455, 563, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8437, 0, 0,
+ 0, 0, 0, 0, 0, 3101, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5084, 5401, 5508, 5825, 5932, 6249,
- 6356, 6673, 0, 6780, 7097, 7204, 0, 0, 0, 0,
- 0, 0, 0, 8782, 0, 0, 0, 0, 7521, 7628,
- 7945, 8052, 8369, 0,10163, 2065, 135, 1861, 36, 591,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 223,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5273, 5381, 5681, 5789,
+ 6089, 6197, 6497, 6605, 0, 6905, 7013, 7313, 0, 0,
+ 0, 0, 0, 0, 0, 8656, 0, 0, 0, 0,
+ 7421, 7721, 7829, 8129, 8237, 0, 9547, 2399, 2602, 3043,
+ 37, 411, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3782, 4114, 3236, 3343, 2026, 2358, 4660, 8825, 0,
- 2465, 1587, 1919, 709, 1041, 1148, 1480, 0, 3675, 0,
- 0, 0, 0, 0, 390, 0, 8929, 179, 2797, 0,
- 92, 0, 614, 720, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 308, 0,
- 0, 652, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3983, 4091, 3209, 3542, 2219, 2327,
+ 4865, 8699, 0, 2660, 1778, 1886, 896, 1004, 1337, 1445,
+ 0, 3650, 0, 0, 0, 0, 0, 27, 0, 230,
+ 466, 2768, 0, 95, 0, 908, 1015, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 679, 0, 0, 0, 0, 0, 652, 0, 0, 0,
- 0, 0, 0, 0, 0, 4553, 8, 11, 0, 0,
+ 0, 293, 0, 0, 468, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 14, 0, 0,
+ 0, 0, 0, 0, 484, 0, 0, 0, 0, 0,
+ 468, 0, 0, 0, 0, 0, 0, 0, 0, 4532,
+ -9, 32, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 33, 0, 34, 0,
+ 0,
};
-static YYCONST short yygindex[] = { 0,
- -24, 627, -77, 0, -57, 196, 0, 0, -5, 0,
- 0, 265, 1084, -88, -117, -40, 0, 0, 134, -59,
- 0, 0, -23, 0, 26, 323, -60, 3, 325, 0,
+short yygindex[] = { 0,
+ -24, 919, -89, 0, -69, 188, 0, 0, 768, 0,
+ 0, 327, 187, -83, -117, -18, 0, 0, 2276, -64,
+ 0, 0, -23, 0, 9, 314, -71, 7, 322, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
};
-#define YYTABLESIZE 12102
-static YYCONST short yytable[] = { 89,
- 244, 153, 4, 111, 204, 89, 1, 212, 200, 213,
- 44, 150, 40, 198, 196, 200, 197, 8, 199, 6,
- 198, 196, 34, 197, 86, 199, 229, 180, 212, 37,
- 213, 232, 212, 195, 213, 63, 281, 117, 225, 226,
- 234, 235, 383, 154, 212, 43, 213, 398, 42, 99,
- 370, 128, 226, 369, 128, 99, 236, 237, 30, 102,
- 178, 151, 183, 184, 41, 201, 205, 206, 207, 208,
- 209, 110, 201, 240, 242, 89, 268, 86, 129, 228,
- 129, 34, 200, 45, 212, 299, 213, 198, 89, 211,
- 112, 52, 199, 116, 63, 156, 157, 245, 246, 247,
- 248, 249, 250, 251, 252, 253, 253, 253, 6, 267,
- 6, 269, 270, 271, 319, 34, 159, 30, 160, 161,
- 29, 7, 272, 273, 162, 99, 163, 262, 63, 253,
- 164, 227, 52, 165, 14, 52, 238, 166, 99, 201,
- 167, 168, 6, 37, 170, 171, 169, 34, 233, 7,
- 52, 30, 326, 328, 321, 322, 332, 334, 239, 274,
- 63, 285, 302, 303, 304, 305, 306, 307, 308, 309,
- 311, 312, 313, 314, 315, 316, 317, 253, 56, 37,
- 47, 297, 7, 30, 52, 47, 298, 267, 267, 7,
- 300, 50, 201, 14, 7, 301, 51, 210, 343, 344,
- 320, 6, 324, 174, 175, 325, 327, 329, 350, 331,
- 333, 61, 323, 338, 7, 152, 52, 339, 181, 56,
- 340, 47, 56, 346, 47, 172, 173, 14, 203, 351,
- 188, 8, 355, 6, 212, 365, 213, 56, 47, 47,
- 7, 349, 353, 354, 50, 7, 7, 356, 357, 51,
- 358, 262, 359, 389, 262, 131, 131, 131, 348, 14,
- 360, 335, 336, 254, 255, 256, 37, 33, 366, 216,
- 61, 56, 7, 47, 253, 361, 6, 6, 185, 6,
- 6, 186, 372, 362, 176, 177, 21, 282, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 364, 234, 216, 56, 61, 47, 216, 375, 368, 216,
- 216, 216, 216, 216, 216, 384, 216, 187, 188, 189,
- 190, 191, 192, 376, 394, 395, 33, 310, 216, 216,
- 378, 216, 396, 397, 29, 318, 61, 262, 262, 401,
- 253, 253, 387, 404, 388, 21, 1, 407, 47, 279,
- 58, 6, 113, 393, 59, 52, 60, 6, 6, 118,
- 33, 6, 216, 6, 0, 216, 262, 0, 0, 262,
- 0, 0, 0, 0, 403, 0, 6, 405, 6, 21,
- 0, 52, 6, 6, 0, 0, 0, 0, 0, 235,
- 0, 188, 33, 200, 216, 0, 37, 188, 198, 196,
- 0, 197, 188, 199, 0, 0, 7, 7, 7, 7,
- 7, 21, 7, 0, 0, 0, 0, 7, 7, 7,
+#define YYTABLESIZE 12268
+short yytable[] = { 90,
+ 214, 246, 215, 112, 154, 90, 4, 8, 172, 173,
+ 206, 151, 37, 44, 1, 231, 182, 202, 40, 87,
+ 41, 214, 200, 215, 34, 202, 236, 201, 103, 228,
+ 200, 198, 100, 199, 227, 201, 63, 283, 100, 111,
+ 402, 118, 228, 43, 152, 113, 42, 155, 234, 117,
+ 197, 176, 177, 158, 387, 224, 214, 30, 215, 61,
+ 214, 180, 215, 185, 186, 270, 160, 236, 374, 33,
+ 236, 373, 128, 157, 203, 128, 90, 236, 237, 129,
+ 230, 129, 203, 34, 161, 236, 162, 45, 87, 90,
+ 174, 175, 7, 163, 52, 63, 242, 244, 247, 248,
+ 249, 250, 251, 252, 253, 254, 255, 255, 255, 100,
+ 269, 29, 271, 272, 273, 164, 30, 34, 61, 236,
+ 240, 322, 100, 274, 275, 7, 165, 37, 33, 63,
+ 255, 166, 7, 178, 179, 52, 235, 7, 52, 214,
+ 302, 215, 329, 331, 324, 325, 335, 337, 167, 34,
+ 30, 236, 61, 52, 207, 208, 209, 210, 211, 168,
+ 6, 63, 33, 37, 305, 306, 307, 308, 309, 310,
+ 311, 312, 314, 315, 316, 317, 318, 319, 320, 255,
+ 47, 169, 30, 7, 61, 170, 50, 52, 7, 269,
+ 269, 51, 238, 239, 33, 346, 347, 171, 353, 229,
+ 241, 6, 276, 21, 327, 7, 300, 328, 330, 332,
+ 95, 334, 336, 287, 301, 7, 95, 303, 153, 52,
+ 203, 304, 238, 205, 216, 212, 202, 323, 326, 237,
+ 341, 200, 198, 342, 199, 343, 201, 217, 218, 219,
+ 220, 221, 222, 352, 223, 354, 338, 339, 349, 47,
+ 356, 37, 357, 6, 358, 50, 359, 393, 360, 238,
+ 51, 370, 21, 238, 238, 238, 238, 238, 361, 238,
+ 237, 364, 95, 237, 371, 362, 363, 255, 365, 366,
+ 376, 238, 238, 203, 238, 6, 368, 95, 237, 236,
+ 236, 372, 6, 214, 369, 215, 21, 379, 7, 380,
+ 95, 388, 202, 131, 131, 131, 382, 200, 198, 195,
+ 199, 398, 201, 399, 400, 238, 236, 95, 95, 95,
+ 401, 405, 237, 408, 6, 234, 236, 197, 21, 236,
+ 7, 1, 411, 47, 58, 189, 190, 191, 192, 193,
+ 194, 282, 281, 114, 255, 255, 391, 238, 392, 7,
+ 7, 7, 7, 7, 237, 7, 119, 397, 52, 203,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 235, 0, 363, 235, 188, 0, 0, 52, 52, 0,
- 0, 0, 56, 0, 47, 0, 0, 0, 235, 0,
- 201, 0, 0, 0, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 0, 0, 56, 0,
- 47, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 235, 7, 7, 7, 7, 7, 7, 0,
- 0, 7, 0, 7, 0, 0, 0, 0, 385, 386,
- 0, 7, 7, 7, 7, 7, 7, 0, 7, 0,
- 0, 0, 7, 7, 235, 0, 222, 0, 0, 0,
- 0, 341, 0, 0, 345, 56, 216, 216, 216, 216,
- 0, 0, 216, 216, 216, 216, 216, 216, 216, 216,
- 216, 216, 0, 0, 0, 222, 0, 0, 0, 0,
+ 7, 7, 7, 236, 236, 18, 59, 60, 407, 0,
+ 0, 409, 95, 37, 52, 0, 202, 0, 0, 0,
+ 95, 200, 198, 195, 199, 0, 201, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 196,
+ 64, 197, 0, 0, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 7, 7, 7,
+ 7, 7, 7, 0, 18, 7, 0, 7, 0, 0,
+ 0, 52, 52, 203, 0, 7, 7, 7, 7, 7,
+ 7, 0, 7, 130, 216, 130, 7, 7, 6, 6,
+ 0, 6, 6, 0, 17, 56, 0, 45, 18, 64,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 0, 69, 0, 0, 238, 216, 95, 187,
+ 0, 216, 188, 237, 216, 216, 216, 216, 216, 216,
+ 18, 216, 0, 64, 0, 0, 56, 0, 0, 56,
+ 0, 0, 238, 216, 216, 0, 216, 0, 0, 237,
+ 0, 0, 238, 17, 56, 238, 45, 0, 0, 237,
+ 0, 0, 237, 0, 6, 64, 0, 0, 0, 0,
+ 6, 6, 69, 202, 6, 0, 6, 216, 200, 198,
+ 216, 199, 0, 201, 0, 95, 95, 17, 56, 6,
+ 45, 6, 238, 0, 0, 6, 6, 0, 0, 238,
+ 238, 238, 238, 238, 238, 0, 69, 237, 0, 216,
+ 0, 0, 0, 0, 0, 344, 0, 0, 348, 17,
+ 56, 0, 45, 0, 0, 238, 0, 0, 0, 238,
+ 203, 0, 238, 238, 238, 238, 238, 238, 69, 238,
+ 0, 0, 189, 190, 191, 192, 193, 194, 0, 0,
+ 0, 238, 238, 0, 238, 0, 0, 0, 0, 0,
+ 0, 202, 0, 0, 0, 0, 200, 198, 0, 199,
+ 0, 201, 0, 0, 0, 0, 0, 0, 0, 187,
+ 0, 0, 188, 0, 234, 238, 197, 0, 238, 202,
+ 0, 0, 0, 0, 200, 198, 0, 199, 0, 201,
+ 202, 0, 377, 378, 0, 200, 198, 195, 199, 0,
+ 201, 0, 234, 0, 197, 0, 0, 238, 203, 0,
+ 0, 0, 0, 234, 0, 197, 189, 190, 191, 192,
+ 193, 194, 395, 0, 0, 396, 0, 0, 0, 0,
+ 0, 216, 216, 216, 216, 0, 203, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 203, 0, 56,
+ 0, 0, 0, 0, 0, 216, 216, 216, 216, 216,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 56, 0, 216, 216, 216,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
- 0, 0, 216, 216, 216, 216, 216, 216, 216, 216,
- 216, 216, 216, 216, 216, 216, 0, 0, 18, 0,
- 64, 216, 216, 216, 216, 216, 216, 216, 216, 216,
- 216, 237, 0, 216, 216, 216, 216, 373, 374, 216,
- 216, 0, 216, 55, 17, 216, 216, 216, 216, 216,
- 216, 216, 216, 216, 216, 216, 0, 0, 0, 216,
- 216, 216, 216, 130, 237, 130, 391, 0, 237, 392,
- 0, 237, 237, 237, 237, 237, 237, 18, 237, 64,
- 0, 45, 106, 235, 55, 0, 0, 55, 0, 0,
- 237, 237, 0, 237, 0, 222, 0, 0, 155, 0,
- 0, 0, 55, 17, 0, 0, 0, 0, 69, 235,
- 0, 18, 0, 64, 0, 214, 0, 0, 0, 235,
- 0, 0, 235, 224, 237, 0, 0, 237, 215, 216,
- 217, 218, 219, 220, 0, 221, 55, 17, 212, 0,
- 45, 0, 182, 18, 214, 64, 0, 0, 0, 54,
- 48, 0, 342, 0, 0, 0, 237, 215, 216, 217,
- 218, 219, 220, 0, 221, 235, 235, 69, 55, 17,
- 0, 212, 0, 0, 45, 212, 0, 0, 212, 212,
- 212, 212, 212, 212, 0, 212, 0, 0, 0, 0,
- 54, 48, 0, 54, 48, 0, 0, 212, 212, 0,
- 212, 69, 0, 0, 0, 200, 45, 0, 54, 48,
- 198, 196, 283, 197, 0, 199, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 296, 0, 0, 232, 0,
- 195, 212, 0, 69, 212, 0, 0, 0, 0, 0,
- 0, 0, 54, 48, 0, 0, 0, 200, 0, 0,
- 0, 0, 198, 196, 193, 197, 0, 199, 0, 0,
- 0, 0, 201, 212, 214, 0, 0, 0, 0, 0,
- 232, 0, 195, 0, 54, 48, 0, 215, 216, 217,
- 218, 219, 220, 0, 221, 0, 0, 0, 237, 237,
- 237, 237, 0, 0, 237, 237, 237, 237, 237, 237,
- 237, 237, 237, 237, 201, 0, 0, 55, 0, 0,
- 0, 0, 237, 237, 237, 237, 237, 237, 237, 237,
- 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
- 237, 237, 0, 55, 237, 237, 237, 237, 237, 237,
- 237, 237, 237, 237, 237, 237, 237, 237, 0, 0,
- 0, 0, 0, 237, 237, 237, 237, 237, 237, 237,
- 237, 237, 237, 0, 0, 237, 237, 237, 237, 0,
- 0, 237, 237, 0, 237, 0, 0, 237, 237, 237,
- 237, 237, 237, 237, 237, 237, 237, 237, 0, 0,
- 55, 237, 237, 237, 237, 212, 212, 212, 212, 0,
- 0, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 380, 0, 54, 48, 381, 382, 0, 0, 212,
+ 216, 0, 0, 0, 0, 0, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 0, 0, 216,
+ 216, 216, 216, 0, 0, 216, 216, 0, 216, 0,
+ 0, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 0, 56, 0, 216, 216, 216, 216, 238,
+ 238, 238, 238, 0, 224, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 0, 0, 0, 0, 0,
+ 0, 0, 0, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 213, 0, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 0,
+ 0, 0, 8, 0, 238, 238, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 212, 0, 238, 238, 238,
+ 238, 264, 0, 238, 238, 0, 238, 55, 0, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 0, 0, 0, 238, 238, 238, 238, 0, 212, 0,
+ 0, 0, 212, 0, 0, 212, 212, 212, 212, 212,
+ 212, 0, 212, 0, 107, 193, 194, 0, 55, 0,
+ 0, 55, 0, 0, 212, 212, 0, 212, 0, 0,
+ 156, 0, 0, 0, 0, 0, 55, 0, 0, 189,
+ 190, 191, 192, 193, 194, 0, 0, 0, 0, 0,
+ 232, 233, 191, 192, 193, 194, 29, 0, 212, 0,
+ 0, 212, 0, 216, 0, 0, 0, 0, 0, 0,
+ 55, 226, 0, 213, 0, 184, 217, 218, 219, 220,
+ 221, 222, 0, 223, 54, 0, 0, 0, 0, 0,
+ 212, 0, 0, 0, 0, 0, 264, 0, 0, 264,
+ 0, 0, 55, 351, 0, 0, 213, 0, 0, 0,
+ 213, 0, 0, 213, 213, 213, 213, 213, 213, 0,
+ 213, 0, 0, 0, 0, 54, 0, 0, 54, 0,
+ 0, 0, 213, 213, 0, 213, 0, 0, 0, 0,
+ 0, 0, 0, 54, 0, 285, 0, 0, 0, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 298, 299,
+ 0, 0, 0, 0, 0, 0, 213, 0, 0, 213,
+ 202, 0, 0, 0, 0, 200, 198, 54, 199, 0,
+ 201, 202, 0, 264, 264, 0, 200, 198, 0, 199,
+ 0, 201, 0, 234, 0, 197, 0, 0, 213, 0,
+ 0, 0, 0, 0, 234, 0, 197, 0, 0, 54,
+ 0, 0, 0, 264, 0, 0, 264, 0, 0, 0,
+ 0, 0, 212, 212, 212, 212, 0, 203, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 203, 0,
+ 0, 55, 0, 0, 0, 0, 212, 212, 212, 212,
212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212, 212, 54,
- 48, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 0, 0, 0, 0, 0,
+ 212, 212, 212, 212, 212, 212, 0, 55, 212, 212,
212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 213, 0, 212, 212, 212, 212, 0, 0, 212, 212,
- 0, 212, 0, 0, 212, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 0, 54, 0, 212, 212,
- 212, 212, 0, 213, 0, 0, 0, 213, 0, 0,
- 213, 213, 213, 213, 213, 213, 0, 213, 191, 192,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 213,
- 213, 0, 213, 0, 0, 0, 0, 94, 0, 0,
- 0, 0, 200, 94, 0, 0, 0, 198, 196, 0,
- 197, 0, 199, 0, 0, 0, 187, 188, 189, 190,
- 191, 192, 0, 213, 0, 232, 213, 195, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 214, 0, 0,
- 0, 0, 0, 200, 0, 0, 0, 0, 198, 196,
- 0, 197, 0, 199, 0, 213, 0, 0, 94, 201,
- 0, 0, 0, 0, 0, 0, 232, 0, 195, 0,
- 214, 0, 0, 94, 214, 0, 0, 214, 214, 214,
- 214, 214, 214, 0, 214, 0, 94, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 214, 214, 0, 214,
- 201, 0, 0, 94, 94, 94, 200, 0, 0, 0,
- 0, 198, 196, 200, 197, 0, 199, 0, 198, 196,
- 193, 197, 0, 199, 0, 0, 0, 280, 0, 232,
- 214, 195, 0, 214, 200, 0, 194, 0, 195, 198,
- 196, 193, 197, 0, 199, 0, 200, 0, 0, 0,
- 0, 198, 196, 0, 197, 0, 199, 232, 0, 195,
- 0, 0, 214, 201, 0, 0, 0, 94, 0, 232,
- 201, 195, 0, 0, 0, 94, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 213, 213, 213,
- 213, 201, 0, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 201, 0, 0, 0, 0, 0, 0,
- 0, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 212, 212, 0, 0, 0, 0, 0, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 0, 0,
+ 212, 212, 212, 212, 0, 0, 212, 212, 0, 212,
+ 0, 0, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 0, 0, 55, 212, 212, 212, 212,
+ 213, 213, 213, 213, 0, 0, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 384, 0, 54, 0,
+ 385, 386, 224, 0, 213, 213, 213, 213, 213, 213,
213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
- 213, 0, 0, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 213, 213, 213, 213, 0, 0, 0,
- 0, 367, 213, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 0, 0, 213, 213, 213, 213, 0, 0,
- 213, 213, 94, 213, 0, 0, 213, 213, 213, 213,
- 213, 213, 213, 213, 213, 213, 213, 0, 0, 0,
- 213, 213, 213, 213, 214, 214, 214, 214, 0, 0,
- 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 0, 187, 188, 189, 190, 191, 192, 0, 214, 214,
+ 213, 213, 213, 213, 54, 0, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 0, 0, 0, 0, 0, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 214, 0, 213, 213,
+ 213, 213, 0, 0, 213, 213, 0, 213, 0, 0,
+ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ 213, 0, 54, 403, 213, 213, 213, 213, 0, 214,
+ 0, 0, 0, 214, 0, 0, 214, 214, 214, 214,
+ 214, 214, 0, 214, 0, 0, 0, 0, 0, 47,
+ 0, 0, 0, 0, 0, 214, 214, 0, 214, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 232, 233, 191, 192, 193, 194, 0, 0, 0, 0,
+ 0, 189, 190, 191, 192, 193, 194, 0, 0, 214,
+ 47, 0, 214, 47, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 215, 0, 0, 0, 47, 0,
+ 202, 216, 0, 0, 0, 200, 198, 0, 199, 345,
+ 201, 214, 0, 0, 217, 218, 219, 220, 221, 222,
+ 0, 223, 0, 234, 0, 197, 0, 215, 0, 0,
+ 0, 215, 47, 0, 215, 215, 215, 215, 215, 215,
+ 0, 215, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 215, 215, 0, 215, 203, 0, 0,
+ 0, 0, 0, 202, 47, 0, 0, 0, 200, 198,
+ 202, 199, 0, 201, 0, 200, 198, 0, 199, 0,
+ 201, 0, 0, 0, 0, 0, 234, 215, 197, 0,
+ 215, 202, 0, 234, 0, 197, 200, 198, 0, 199,
+ 0, 201, 0, 202, 0, 0, 0, 0, 200, 198,
+ 195, 199, 0, 201, 234, 0, 197, 0, 0, 215,
+ 203, 0, 0, 0, 0, 0, 196, 203, 197, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 214, 214, 214, 214, 0, 203, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 0,
+ 203, 0, 0, 0, 0, 0, 0, 214, 214, 214,
214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 214, 214, 214, 214, 214, 214, 214, 94, 94,
+ 214, 214, 214, 214, 214, 214, 214, 0, 0, 214,
214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 214, 214, 214, 189, 190, 191, 192, 0, 214,
- 214, 214, 214, 214, 214, 214, 214, 214, 214, 215,
- 0, 214, 214, 214, 214, 0, 185, 214, 214, 186,
+ 214, 214, 214, 47, 0, 0, 0, 0, 214, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214, 214, 0,
+ 0, 214, 214, 214, 214, 0, 0, 214, 214, 47,
214, 0, 0, 214, 214, 214, 214, 214, 214, 214,
- 214, 214, 214, 214, 0, 0, 0, 214, 214, 214,
- 214, 0, 215, 0, 0, 0, 215, 0, 0, 215,
- 215, 215, 215, 215, 215, 187, 215, 189, 190, 191,
- 192, 0, 187, 188, 189, 190, 191, 192, 215, 215,
- 0, 215, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 230, 231, 189, 190, 191, 192, 0,
- 0, 0, 0, 0, 0, 230, 231, 189, 190, 191,
- 192, 0, 215, 0, 0, 215, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 210, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 215, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 210,
- 0, 0, 0, 0, 0, 0, 210, 210, 0, 210,
- 210, 210, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 210, 210, 0, 210, 0,
- 0, 0, 0, 0, 0, 200, 0, 0, 0, 0,
- 198, 196, 200, 197, 0, 199, 0, 198, 196, 193,
- 197, 0, 199, 0, 0, 0, 0, 0, 232, 210,
- 195, 0, 210, 200, 0, 194, 0, 195, 198, 196,
- 0, 197, 0, 199, 0, 200, 0, 0, 0, 0,
- 198, 196, 0, 197, 0, 199, 232, 0, 195, 0,
- 0, 210, 201, 0, 0, 0, 0, 0, 232, 201,
- 195, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 215, 215, 215, 215,
- 201, 0, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 215, 201, 0, 0, 0, 0, 0, 0, 0,
+ 214, 214, 214, 214, 263, 0, 0, 214, 214, 214,
+ 214, 215, 215, 215, 215, 0, 350, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 215, 0, 0, 0,
+ 0, 0, 0, 0, 0, 215, 215, 215, 215, 215,
215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 0, 0, 215, 215, 215,
215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 0, 0, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 0, 0, 0, 0,
+ 215, 0, 191, 192, 193, 194, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 215, 210, 0, 215,
+ 215, 215, 215, 0, 0, 215, 215, 0, 215, 0,
0, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 0, 0, 215, 215, 215, 215, 0, 0, 215,
- 215, 0, 215, 0, 0, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 0, 0, 0, 215,
- 215, 215, 215, 210, 210, 210, 210, 0, 0, 210,
- 210, 210, 210, 210, 210, 210, 210, 210, 210, 0,
- 15, 0, 0, 0, 0, 0, 0, 210, 210, 210,
+ 215, 215, 0, 0, 0, 215, 215, 215, 215, 0,
+ 210, 0, 0, 0, 0, 0, 187, 210, 210, 188,
+ 210, 210, 210, 189, 190, 191, 192, 193, 194, 0,
+ 189, 0, 191, 192, 193, 194, 210, 210, 0, 210,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 232, 0, 191, 192, 193, 194, 0, 0, 0,
+ 0, 0, 0, 232, 233, 191, 192, 193, 194, 0,
+ 210, 0, 0, 210, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 211, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 210, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 211, 52,
+ 53, 0, 0, 0, 0, 211, 211, 0, 211, 211,
+ 211, 52, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 211, 211, 0, 211, 0, 0,
+ 0, 0, 0, 0, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 0, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 0, 211, 0,
+ 0, 211, 0, 77, 78, 79, 80, 0, 0, 0,
+ 0, 0, 0, 0, 0, 77, 78, 79, 80, 0,
+ 0, 81, 82, 83, 84, 85, 0, 0, 0, 0,
+ 211, 0, 0, 81, 82, 83, 84, 85, 0, 0,
+ 0, 0, 0, 0, 0, 0, 212, 0, 0, 0,
+ 0, 0, 0, 262, 210, 210, 210, 210, 0, 263,
210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
- 210, 210, 210, 210, 210, 210, 210, 0, 0, 210,
+ 0, 0, 0, 0, 0, 0, 0, 0, 210, 210,
210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
- 210, 210, 210, 0, 0, 0, 0, 399, 210, 210,
- 210, 210, 210, 210, 210, 210, 210, 210, 211, 15,
- 210, 210, 210, 210, 0, 185, 210, 210, 186, 210,
- 0, 0, 210, 210, 210, 210, 210, 210, 210, 210,
- 210, 210, 210, 0, 0, 0, 210, 210, 210, 210,
- 0, 211, 0, 15, 0, 0, 189, 0, 211, 211,
- 0, 211, 211, 211, 187, 188, 189, 190, 191, 192,
- 0, 230, 231, 189, 190, 191, 192, 211, 211, 0,
- 211, 0, 0, 0, 0, 15, 0, 0, 0, 0,
- 0, 0, 187, 188, 189, 190, 191, 192, 0, 0,
- 0, 0, 0, 0, 230, 0, 189, 190, 191, 192,
- 0, 211, 0, 0, 211, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 230, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 211, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 230, 0,
- 0, 0, 0, 0, 0, 230, 230, 0, 0, 230,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 230, 230, 0, 230, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 203, 0, 0, 0, 0, 203, 203, 203, 203,
- 0, 203, 0, 0, 0, 0, 0, 189, 230, 0,
- 0, 230, 0, 189, 203, 0, 203, 0, 189, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 230, 0, 0, 0, 0, 0, 0, 0, 203, 0,
- 189, 0, 0, 0, 0, 0, 261, 0, 0, 0,
- 0, 0, 0, 0, 0, 211, 211, 211, 211, 347,
- 0, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 0, 0, 0, 0, 0, 0, 0, 0, 211,
+ 210, 210, 210, 210, 210, 210, 210, 210, 0, 0,
+ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
+ 210, 210, 210, 210, 0, 0, 0, 0, 0, 210,
+ 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
+ 0, 0, 210, 210, 210, 210, 0, 0, 210, 210,
+ 0, 210, 0, 0, 210, 210, 210, 210, 210, 210,
+ 210, 210, 210, 210, 210, 0, 0, 0, 210, 210,
+ 210, 210, 211, 211, 211, 211, 0, 0, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211, 0, 0,
+ 0, 0, 0, 0, 0, 0, 211, 211, 211, 211,
211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 211, 211, 211, 211, 0,
- 0, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 0, 0, 0, 0, 0,
+ 211, 211, 211, 211, 211, 211, 0, 0, 211, 211,
211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 0, 0, 211, 211, 211, 211, 0, 0, 211, 211,
- 0, 211, 0, 0, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 210, 0, 0, 211, 211,
- 211, 211, 230, 230, 230, 230, 0, 0, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 230, 0, 0,
- 0, 0, 0, 0, 0, 0, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 0, 0, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 0, 0, 0, 0, 0, 230, 230, 230,
- 230, 230, 230, 230, 230, 230, 230, 232, 0, 230,
- 230, 230, 230, 0, 203, 230, 230, 203, 230, 0,
- 0, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 0, 0, 0, 230, 230, 230, 230, 0,
- 232, 52, 53, 0, 0, 0, 0, 232, 232, 0,
- 0, 232, 0, 0, 52, 53, 0, 0, 0, 0,
- 203, 203, 203, 203, 203, 203, 232, 232, 0, 232,
- 0, 0, 0, 0, 0, 0, 55, 56, 57, 58,
+ 211, 211, 0, 0, 0, 0, 0, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211, 231, 0,
+ 211, 211, 211, 211, 0, 0, 211, 211, 0, 211,
+ 0, 0, 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 0, 0, 0, 211, 211, 211, 211,
+ 259, 231, 0, 0, 0, 0, 260, 0, 231, 231,
+ 0, 261, 231, 0, 52, 53, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 231, 231, 0,
+ 231, 0, 0, 0, 0, 0, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 0, 0, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 232, 0, 0, 232, 76, 77, 78, 79, 0, 0,
- 0, 0, 0, 0, 231, 0, 0, 76, 77, 78,
- 79, 0, 80, 81, 82, 83, 84, 0, 0, 0,
- 0, 0, 232, 0, 0, 80, 81, 82, 83, 84,
- 0, 0, 0, 0, 0, 0, 0, 231, 0, 0,
- 0, 0, 0, 0, 231, 231, 0, 0, 231, 0,
+ 0, 231, 48, 0, 231, 77, 78, 79, 80, 0,
+ 0, 0, 0, 0, 0, 0, 233, 0, 77, 78,
+ 79, 80, 0, 81, 82, 83, 84, 85, 0, 0,
+ 0, 0, 0, 231, 0, 0, 81, 82, 83, 84,
+ 85, 0, 0, 48, 0, 0, 48, 0, 0, 233,
+ 0, 183, 0, 0, 0, 0, 233, 233, 0, 0,
+ 233, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 233, 233, 0, 233, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 256, 257, 258, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 233,
+ 0, 0, 233, 0, 0, 0, 0, 0, 0, 0,
+ 284, 0, 0, 0, 0, 203, 0, 48, 0, 0,
+ 203, 203, 203, 203, 0, 203, 0, 0, 0, 0,
+ 0, 233, 0, 0, 0, 0, 0, 0, 203, 0,
+ 203, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 313, 0, 0, 0, 231, 231, 231, 231, 321,
+ 0, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 0, 203, 0, 0, 0, 0, 0, 0, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 0,
+ 0, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 0, 0, 0, 0, 0,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 0, 0, 231, 231, 231, 231, 0, 0, 231,
+ 231, 0, 231, 0, 0, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 48, 367, 0, 231,
+ 231, 231, 231, 233, 233, 233, 233, 0, 0, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 0,
+ 0, 14, 48, 0, 0, 0, 0, 233, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 0, 0, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 0, 389, 390, 0, 0, 233, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 232,
+ 14, 233, 233, 233, 233, 0, 0, 233, 233, 0,
+ 233, 0, 0, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 233, 0, 0, 0, 233, 233, 233,
+ 233, 0, 232, 0, 14, 0, 0, 188, 203, 232,
+ 232, 203, 0, 232, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 232, 232,
+ 0, 232, 0, 0, 0, 0, 14, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 231, 231, 0, 231, 0, 0, 0,
- 0, 0, 0, 0, 0, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 231, 0, 0,
- 231, 0, 0, 76, 77, 78, 79, 0, 0, 0,
+ 0, 0, 0, 0, 0, 203, 203, 203, 203, 203,
+ 203, 0, 232, 0, 0, 232, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 230, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 81, 82, 83, 84, 0, 0, 0, 231,
+ 0, 0, 0, 0, 232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 230, 0, 0, 0, 0, 0, 0, 230, 230, 0,
+ 0, 230, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 230, 230, 0, 230,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 232, 232, 232, 232, 0, 0,
- 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
- 0, 0, 0, 0, 0, 0, 0, 0, 232, 232,
- 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 232, 232, 232, 232, 0, 0,
- 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 0, 0, 0, 0, 0, 232,
- 232, 232, 232, 232, 232, 232, 232, 232, 232, 0,
- 0, 232, 232, 232, 232, 0, 0, 232, 232, 0,
- 232, 0, 0, 232, 232, 232, 232, 232, 232, 232,
- 232, 232, 232, 232, 0, 0, 0, 232, 232, 232,
- 232, 231, 231, 231, 231, 0, 0, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 0, 0, 0,
- 0, 0, 0, 0, 0, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 0, 0, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 0, 0, 0, 0, 0, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 229, 0, 231, 231,
- 231, 231, 0, 0, 231, 231, 0, 231, 0, 0,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 0, 0, 0, 231, 231, 231, 231, 0, 229,
- 0, 0, 0, 0, 0, 0, 229, 229, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 229, 229, 0, 229, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 188, 0,
+ 230, 0, 0, 230, 188, 0, 0, 0, 0, 188,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 229,
- 0, 0, 229, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 143, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 229, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 143, 0, 0, 0,
- 0, 0, 0, 143, 143, 0, 143, 143, 143, 0,
+ 0, 0, 230, 0, 0, 0, 0, 0, 0, 0,
+ 0, 188, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 232, 232, 232, 232,
+ 0, 0, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 0, 0, 0, 0, 0, 0, 0, 0,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 0, 0, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 232, 232, 232, 232, 0, 0, 0, 0,
+ 0, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 0, 0, 232, 232, 232, 232, 0, 0,
+ 232, 232, 0, 232, 0, 0, 232, 232, 232, 232,
+ 232, 232, 232, 232, 232, 232, 232, 0, 0, 0,
+ 232, 232, 232, 232, 230, 230, 230, 230, 0, 0,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 0, 0, 15, 0, 0, 0, 0, 0, 230, 230,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 230, 230, 230, 0, 0,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 0, 0, 0, 0, 0, 230,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 143, 15, 230, 230, 230, 230, 0, 0, 230, 230,
+ 0, 230, 0, 0, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 0, 0, 0, 230, 230,
+ 230, 230, 0, 143, 0, 15, 0, 0, 189, 0,
+ 143, 143, 0, 143, 143, 143, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 143,
+ 0, 0, 143, 0, 0, 0, 0, 15, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 143, 0, 0, 143, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 143, 0, 0, 143, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 235, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 143, 0, 0, 143,
+ 0, 0, 0, 0, 0, 143, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 235, 0, 0, 0, 0, 0, 0, 235, 235,
+ 0, 0, 235, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 235, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 143, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 189,
+ 0, 235, 0, 0, 235, 189, 0, 0, 0, 0,
+ 189, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 229, 229, 229, 229, 0, 0, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 0,
- 0, 0, 0, 0, 0, 0, 0, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 0, 0, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 229, 0, 0, 0, 0, 0, 229, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 0, 0,
- 229, 229, 229, 229, 0, 0, 229, 229, 0, 229,
- 0, 0, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 229, 229, 0, 0, 0, 229, 229, 229, 229,
- 143, 143, 143, 143, 0, 0, 143, 0, 143, 143,
- 143, 143, 143, 143, 143, 143, 0, 0, 0, 0,
- 0, 0, 0, 0, 143, 143, 143, 143, 143, 143,
+ 0, 0, 0, 235, 0, 0, 0, 0, 0, 0,
+ 0, 0, 189, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 143, 143, 143,
+ 143, 0, 0, 143, 0, 143, 143, 143, 143, 143,
+ 143, 143, 143, 0, 0, 0, 0, 0, 0, 0,
+ 0, 143, 143, 143, 143, 143, 143, 143, 143, 143,
143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 0, 0, 0, 0, 143, 143, 143,
+ 0, 0, 0, 0, 143, 143, 143, 143, 143, 143,
143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 234, 0, 143, 143, 143,
- 143, 0, 0, 143, 143, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 143, 143, 143, 143, 143,
- 0, 0, 0, 143, 143, 143, 143, 0, 234, 0,
- 0, 0, 0, 0, 0, 234, 234, 0, 0, 234,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 234, 0, 0, 0, 0, 0,
+ 143, 143, 143, 0, 0, 143, 143, 143, 143, 0,
+ 0, 143, 143, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 143, 143, 143, 143, 143, 0, 0,
+ 0, 143, 143, 143, 143, 235, 235, 235, 235, 0,
+ 0, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 235, 0, 0, 0, 0, 0, 0, 0, 0, 235,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 0,
+ 0, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 235, 235, 235, 235, 235, 0, 0, 0, 0, 0,
+ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
+ 235, 234, 0, 235, 235, 235, 235, 0, 0, 235,
+ 235, 0, 235, 0, 0, 235, 235, 235, 235, 0,
+ 0, 235, 235, 235, 235, 235, 0, 0, 0, 235,
+ 235, 235, 235, 0, 234, 0, 0, 0, 0, 0,
+ 0, 234, 234, 0, 0, 234, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 234, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 234, 0,
- 0, 234, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 233, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 234, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 233, 0, 0, 0, 0,
- 0, 0, 233, 233, 0, 0, 233, 0, 0, 0,
+ 0, 0, 0, 0, 234, 0, 0, 234, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 233, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 234, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 144, 0, 0, 0, 0, 0, 0, 144,
+ 144, 0, 144, 144, 144, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 144, 0,
+ 0, 144, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 233, 0, 0, 233, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 144, 0, 0, 144, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 233, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 144, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 234, 234, 234, 234, 0, 0, 234, 234,
- 234, 234, 234, 234, 234, 234, 234, 234, 0, 0,
- 0, 0, 0, 0, 0, 0, 234, 234, 234, 234,
- 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 234, 234, 234, 234, 0, 0, 234, 234,
+ 0, 0, 0, 0, 0, 0, 0, 0, 234, 234,
+ 234, 234, 0, 0, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 0, 0, 0, 0, 0, 0,
+ 0, 0, 234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
- 234, 234, 0, 0, 0, 0, 0, 234, 234, 234,
- 234, 234, 234, 234, 234, 234, 234, 0, 0, 234,
- 234, 234, 234, 0, 0, 234, 234, 0, 234, 0,
- 0, 234, 234, 234, 234, 0, 0, 234, 234, 234,
- 234, 234, 0, 0, 0, 234, 234, 234, 234, 233,
- 233, 233, 233, 0, 0, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 0, 0, 0, 0, 0,
- 0, 0, 0, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 0, 0, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 0,
- 0, 0, 0, 0, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 144, 0, 233, 233, 233, 233,
- 0, 0, 233, 233, 0, 233, 0, 0, 233, 233,
- 233, 233, 0, 0, 233, 233, 233, 233, 233, 0,
- 0, 0, 233, 233, 233, 233, 0, 144, 0, 0,
- 0, 0, 0, 0, 144, 144, 0, 144, 144, 144,
+ 234, 234, 0, 0, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 234, 234, 234, 234, 0, 0,
+ 0, 0, 0, 234, 234, 234, 234, 234, 234, 234,
+ 234, 234, 234, 234, 0, 0, 234, 234, 234, 234,
+ 0, 0, 234, 234, 0, 234, 0, 0, 234, 234,
+ 234, 234, 0, 0, 234, 234, 234, 234, 234, 0,
+ 0, 0, 234, 234, 234, 234, 144, 144, 144, 144,
+ 0, 0, 144, 0, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 0,
+ 0, 0, 0, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 236, 0, 144, 144, 144, 144, 0, 0,
+ 144, 144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 144, 144, 144, 144, 144, 0, 0, 0,
+ 144, 144, 144, 144, 0, 236, 0, 0, 0, 0,
+ 0, 0, 236, 236, 0, 0, 236, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 144, 0, 0, 144, 0, 0, 0,
+ 0, 236, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 144, 0, 0,
- 144, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 235, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
+ 0, 0, 0, 0, 0, 236, 0, 0, 236, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 235, 0, 0, 0, 0, 0,
- 0, 235, 235, 0, 0, 235, 0, 0, 0, 0,
+ 237, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 236, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 235, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 237, 0, 0, 0, 0, 0, 0,
+ 237, 237, 0, 0, 237, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 237,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 235, 0, 0, 235, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 237, 0, 0, 237, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 235, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 237, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 144, 144, 144, 144, 0, 0, 144, 0, 144,
- 144, 144, 144, 144, 144, 144, 144, 0, 0, 0,
- 0, 0, 0, 0, 0, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 0, 0, 0, 0, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 144, 144, 144, 0, 0, 144, 144,
- 144, 144, 0, 0, 144, 144, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 144, 144, 144, 144,
- 144, 0, 0, 0, 144, 144, 144, 144, 235, 235,
- 235, 235, 0, 0, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 0, 0, 0, 0, 0, 0,
- 0, 0, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 0, 0, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 235, 235, 235, 235, 235, 0, 0,
- 0, 0, 0, 235, 235, 235, 235, 235, 235, 235,
- 235, 235, 235, 236, 0, 235, 235, 235, 235, 0,
- 0, 235, 235, 0, 235, 0, 0, 235, 235, 0,
- 0, 0, 0, 235, 235, 235, 235, 235, 0, 0,
- 0, 235, 235, 235, 235, 0, 236, 0, 0, 0,
- 0, 0, 0, 236, 236, 0, 0, 236, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 236,
+ 236, 236, 236, 0, 0, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 0, 0, 0, 0, 0,
+ 0, 0, 0, 236, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 0, 0, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 236, 236, 236, 236, 0,
+ 0, 0, 0, 0, 236, 236, 236, 236, 236, 236,
+ 236, 236, 236, 236, 236, 0, 0, 236, 236, 236,
+ 236, 0, 0, 236, 236, 0, 236, 0, 0, 236,
+ 236, 0, 0, 0, 0, 236, 236, 236, 236, 236,
+ 0, 0, 0, 236, 236, 236, 236, 237, 237, 237,
+ 237, 0, 0, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 0, 0, 0, 0, 0, 0, 0,
+ 0, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 0, 0, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 0, 0, 0,
+ 0, 0, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 130, 0, 237, 237, 237, 237, 0,
+ 0, 237, 237, 0, 237, 0, 0, 0, 237, 0,
+ 0, 0, 0, 237, 237, 237, 237, 237, 0, 0,
+ 0, 237, 237, 237, 237, 0, 130, 0, 0, 0,
+ 0, 0, 0, 130, 130, 0, 130, 130, 130, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 236, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 130, 0, 0, 130, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 236, 0, 0, 236,
+ 0, 0, 0, 0, 0, 0, 130, 0, 0, 130,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 236, 0,
+ 0, 135, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 130, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 130, 0, 0, 0, 0, 0, 0,
- 130, 130, 0, 130, 130, 130, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 130,
- 0, 0, 130, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 135, 0, 0, 0, 0, 0,
+ 0, 135, 135, 0, 0, 135, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 135, 0, 0, 135, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 130, 0, 0, 130, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 135, 0, 0, 135, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 130, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 135, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 236, 236, 236, 236, 0, 0, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 0, 0, 0, 0,
- 0, 0, 0, 0, 236, 236, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
- 236, 236, 236, 236, 0, 0, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
- 0, 0, 0, 0, 0, 236, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 0, 0, 236, 236, 236,
- 236, 0, 0, 236, 236, 0, 236, 0, 0, 0,
- 236, 0, 0, 0, 0, 236, 236, 236, 236, 236,
- 0, 0, 0, 236, 236, 236, 236, 130, 130, 130,
- 130, 0, 0, 130, 0, 130, 130, 130, 130, 130,
- 130, 130, 130, 0, 0, 0, 0, 0, 0, 0,
- 0, 130, 130, 130, 130, 130, 130, 130, 130, 130,
- 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 130, 130, 130, 130, 0, 0, 130, 0, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 0, 0, 0,
0, 0, 0, 0, 130, 130, 130, 130, 130, 130,
- 130, 130, 130, 130, 130, 130, 130, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 130, 130, 130,
- 130, 130, 135, 0, 130, 130, 130, 130, 0, 0,
- 130, 130, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 130, 130, 130, 130, 130, 0, 0, 0,
- 130, 130, 130, 130, 0, 135, 0, 0, 0, 0,
- 0, 0, 135, 135, 0, 0, 135, 0, 0, 0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 0, 0, 0, 0, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 0, 0, 0, 0, 0, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 0, 0, 130, 130,
+ 130, 130, 0, 0, 130, 130, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 130, 130, 130, 130,
+ 130, 0, 0, 0, 130, 130, 130, 130, 135, 135,
+ 135, 135, 0, 0, 135, 0, 135, 135, 135, 135,
+ 135, 135, 135, 135, 0, 0, 0, 0, 0, 0,
+ 0, 0, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 0, 0, 0, 0, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 0, 0,
+ 0, 0, 0, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 139, 0, 135, 135, 135, 135,
+ 0, 0, 135, 135, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 135, 135, 135, 135, 135, 0,
+ 0, 0, 135, 135, 135, 135, 0, 139, 0, 0,
+ 0, 0, 0, 0, 139, 139, 0, 0, 139, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 135, 0, 0, 135, 0, 0, 0, 0, 0,
+ 0, 0, 0, 139, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 135, 0, 0, 135, 0,
+ 0, 0, 0, 0, 0, 0, 0, 139, 0, 0,
+ 139, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 139,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 135, 0, 0,
+ 0, 0, 0, 0, 0, 88, 0, 0, 0, 0,
+ 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 139, 0, 0, 0, 0, 0, 0, 139,
- 139, 0, 0, 139, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 139, 0,
+ 0, 88, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 0, 0, 88, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 139, 0, 0, 139, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 139, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
- 135, 135, 135, 0, 0, 135, 0, 135, 135, 135,
- 135, 135, 135, 135, 135, 0, 0, 0, 0, 0,
- 0, 0, 0, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 0, 0, 0, 0, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135, 135, 0,
- 0, 0, 0, 0, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 0, 0, 135, 135, 135, 135,
- 260, 0, 135, 135, 0, 0, 261, 0, 0, 0,
- 0, 0, 0, 0, 135, 135, 135, 135, 135, 0,
- 0, 0, 135, 135, 135, 135, 139, 139, 139, 139,
- 0, 0, 139, 0, 139, 139, 139, 139, 139, 139,
- 139, 139, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 139, 139, 139, 139, 0, 0, 139, 0, 139,
+ 139, 139, 139, 139, 139, 139, 139, 0, 0, 0,
+ 0, 0, 0, 0, 0, 139, 139, 139, 139, 139,
139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 0,
- 0, 0, 0, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 139, 139, 88, 0, 0, 0,
- 0, 139, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 0, 0, 139, 139, 139, 139, 0, 0, 139,
- 139, 0, 0, 0, 0, 0, 0, 0, 0, 88,
- 0, 139, 139, 139, 139, 139, 88, 0, 0, 139,
- 139, 139, 139, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 88, 0, 0, 0, 0,
+ 139, 139, 139, 139, 0, 0, 0, 0, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
+ 139, 0, 0, 0, 0, 0, 139, 139, 139, 139,
+ 139, 139, 139, 139, 139, 139, 139, 0, 0, 139,
+ 139, 139, 139, 0, 0, 139, 139, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 139, 139, 139,
+ 139, 139, 0, 0, 0, 139, 139, 139, 139, 88,
+ 88, 88, 88, 0, 0, 88, 0, 88, 88, 88,
+ 88, 88, 88, 88, 88, 0, 0, 0, 0, 0,
+ 0, 0, 0, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 90, 0, 0, 0, 0, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 0,
+ 0, 0, 0, 0, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 90, 0, 88, 88, 88,
+ 88, 0, 90, 88, 88, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 88, 88, 88, 88,
+ 0, 90, 0, 88, 88, 88, 88, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
- 0, 0, 88, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 90, 0, 0, 90, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 88, 0, 0, 0, 0, 0, 257, 0, 0,
- 0, 0, 0, 258, 0, 0, 90, 0, 259, 0,
- 0, 52, 53, 90, 0, 0, 0, 0, 0, 0,
+ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 90, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 90, 0, 0, 90,
- 0, 0, 0, 0, 76, 77, 78, 79, 0, 0,
+ 0, 0, 0, 92, 0, 0, 0, 0, 0, 0,
+ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 81, 82, 83, 84, 0, 90, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 88, 88, 88, 88, 0, 0, 88,
- 0, 88, 88, 88, 88, 88, 88, 88, 88, 0,
- 0, 0, 0, 0, 0, 0, 0, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 88, 88, 88, 88, 0, 0, 0, 0,
- 0, 88, 88, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 88, 0, 0, 32, 0, 0, 88, 88,
- 88, 88, 88, 88, 88, 88, 88, 88, 0, 0,
- 88, 88, 88, 88, 0, 0, 88, 88, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 31, 88, 88,
- 88, 88, 88, 0, 0, 0, 88, 88, 88, 88,
- 90, 90, 90, 90, 0, 0, 90, 0, 90, 90,
- 90, 90, 90, 90, 90, 90, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 90, 90, 90, 90, 90,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 90, 90, 90, 0, 0, 0, 0, 0, 90, 90,
+ 0, 0, 0, 92, 0, 0, 92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 92, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 90,
+ 90, 90, 90, 0, 0, 90, 0, 90, 90, 90,
+ 90, 90, 90, 90, 90, 0, 0, 0, 0, 0,
+ 0, 0, 0, 90, 90, 90, 90, 90, 90, 90,
90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
- 92, 0, 0, 0, 0, 90, 90, 90, 90, 90,
+ 90, 90, 0, 0, 0, 0, 0, 90, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 90, 90, 0,
+ 0, 0, 0, 0, 90, 90, 90, 90, 90, 90,
90, 90, 90, 90, 90, 0, 0, 90, 90, 90,
90, 0, 0, 90, 90, 0, 0, 0, 0, 0,
- 0, 0, 0, 92, 0, 90, 90, 90, 90, 90,
- 92, 0, 0, 90, 90, 90, 90, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,
- 0, 6, 7, 0, 8, 9, 0, 0, 0, 0,
- 0, 0, 0, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 0, 0, 0, 0, 0,
- 0, 0, 0, 92, 0, 0, 92, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 96, 0, 0,
+ 0, 0, 0, 0, 0, 90, 90, 90, 90, 90,
+ 0, 0, 0, 90, 90, 90, 90, 92, 92, 92,
+ 92, 0, 0, 92, 0, 92, 92, 92, 92, 92,
+ 92, 92, 92, 0, 0, 0, 0, 0, 0, 0,
+ 0, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 96, 0, 0, 0, 0, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 0, 0, 0,
+ 0, 0, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 96, 0, 92, 92, 92, 92, 0,
+ 96, 92, 92, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 92, 92, 92, 92, 92, 0, 96,
+ 0, 92, 92, 92, 92, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 22, 0, 0, 0,
- 96, 0, 23, 24, 0, 0, 25, 96, 26, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 27, 0, 28, 0, 0, 96, 29, 30, 0,
+ 0, 0, 0, 96, 0, 0, 96, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 94, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 96, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 94, 0, 0, 0, 0, 0, 0, 94, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 96, 0, 0, 96, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 94, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 92, 92, 92,
- 92, 0, 0, 92, 0, 92, 92, 92, 92, 92,
- 92, 92, 92, 0, 0, 0, 0, 0, 0, 0,
- 0, 92, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
- 0, 0, 0, 0, 0, 92, 92, 92, 92, 92,
- 92, 92, 92, 92, 92, 92, 92, 0, 0, 6,
- 0, 0, 92, 92, 92, 92, 92, 92, 92, 92,
- 92, 92, 0, 0, 92, 92, 92, 92, 0, 0,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6, 92, 92, 92, 92, 92, 0, 0, 0,
- 92, 92, 92, 92, 96, 96, 96, 96, 0, 0,
- 96, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 0, 0, 0, 0, 0, 0, 0, 0, 96, 96,
+ 0, 94, 0, 0, 94, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 94, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 96, 96, 96,
+ 96, 0, 0, 96, 0, 96, 96, 96, 96, 96,
+ 96, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 0, 96, 96, 96, 96, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 0, 0, 0, 0, 0, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 0, 0, 0,
0, 0, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 96, 94, 0, 0, 0, 0, 96,
- 96, 96, 96, 96, 96, 96, 96, 96, 96, 0,
- 0, 96, 96, 96, 96, 0, 0, 96, 96, 0,
- 0, 0, 0, 0, 0, 0, 0, 94, 0, 96,
- 96, 96, 96, 96, 94, 0, 0, 96, 96, 96,
- 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 6, 6, 0, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 0, 0, 0, 0, 0, 0, 0, 94, 0, 0,
+ 96, 96, 96, 0, 0, 96, 96, 96, 96, 0,
+ 0, 96, 96, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 96, 96, 96, 96, 96, 0, 0,
+ 0, 96, 96, 96, 96, 94, 94, 94, 94, 0,
+ 0, 94, 0, 94, 94, 94, 94, 94, 94, 94,
+ 94, 0, 0, 0, 0, 0, 0, 0, 0, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 84, 0,
+ 0, 0, 0, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 0, 0, 0, 0, 0,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 84, 0, 94, 94, 94, 94, 0, 84, 94,
94, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 84, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 94,
+ 0, 94, 94, 94, 94, 94, 0, 84, 0, 94,
+ 94, 94, 94, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 84, 0, 6, 6, 0, 0,
- 6, 84, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 6, 0, 6, 0, 0,
- 84, 6, 6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 84, 0, 0, 84, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 85, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 0, 0, 84, 0, 0,
+ 0, 0, 0, 84, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 0, 0, 0, 0, 85, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 85, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 84, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 85, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 94, 94, 94, 94, 0, 0, 94, 0, 94,
- 94, 94, 94, 94, 94, 94, 94, 0, 0, 0,
- 0, 0, 0, 0, 0, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 0, 0, 0, 0, 0, 94,
- 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 0, 0, 0, 0, 0, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 0, 0, 94, 94,
- 94, 94, 0, 0, 94, 94, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 94, 94, 94, 94,
- 94, 0, 0, 0, 94, 94, 94, 94, 84, 84,
- 84, 84, 0, 0, 84, 0, 84, 84, 84, 84,
- 84, 84, 84, 84, 0, 0, 0, 0, 0, 0,
- 0, 0, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 0, 0, 0, 0, 0, 84, 84, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 85, 0,
- 0, 0, 0, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 0, 0, 84, 84, 84, 84, 0,
- 0, 84, 84, 0, 0, 0, 0, 0, 0, 0,
- 0, 85, 0, 84, 84, 84, 84, 84, 85, 0,
- 0, 84, 84, 84, 84, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 85, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 85, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 84, 84, 84, 84, 0,
+ 0, 84, 0, 84, 84, 84, 84, 84, 84, 84,
+ 84, 0, 0, 0, 0, 0, 0, 0, 0, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 0, 0,
+ 0, 0, 0, 84, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 0, 0, 0, 0, 0,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
+ 84, 0, 0, 84, 84, 84, 84, 0, 0, 84,
+ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 84, 84, 84, 84, 84, 0, 0, 0, 84,
+ 84, 84, 84, 85, 85, 85, 85, 0, 0, 85,
+ 0, 85, 85, 85, 85, 85, 85, 85, 85, 0,
+ 0, 0, 0, 0, 0, 0, 0, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 86, 0, 0, 0,
+ 0, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 0, 0, 0, 0, 0, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 86,
+ 0, 85, 85, 85, 85, 0, 86, 85, 85, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
+ 85, 85, 85, 85, 0, 86, 0, 85, 85, 85,
+ 85, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 85, 0, 0, 85, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 85, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
- 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
+ 0, 0, 86, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 87, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 86, 0, 0, 0, 0, 0,
+ 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 0, 0,
+ 0, 0, 0, 0, 87, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 87, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
- 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 0, 0,
+ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 85, 85, 85, 85, 0,
- 0, 85, 0, 85, 85, 85, 85, 85, 85, 85,
- 85, 0, 0, 0, 0, 0, 0, 0, 0, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 0, 0,
- 0, 0, 0, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 0, 0, 0, 0, 0,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 0, 0, 85, 85, 85, 85, 0, 0, 85, 85,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 85, 85, 85, 85, 0, 0, 0, 85, 85,
- 85, 85, 86, 86, 86, 86, 0, 0, 86, 0,
- 86, 86, 86, 86, 86, 86, 86, 86, 0, 0,
- 0, 0, 0, 0, 0, 0, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 86, 86, 86, 0, 0, 0, 0, 0,
+ 0, 0, 0, 86, 86, 86, 86, 0, 0, 86,
+ 0, 86, 86, 86, 86, 86, 86, 86, 86, 0,
+ 0, 0, 0, 0, 0, 0, 0, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
- 86, 86, 87, 0, 0, 0, 0, 86, 86, 86,
- 86, 86, 86, 86, 86, 86, 86, 0, 0, 86,
- 86, 86, 86, 0, 0, 86, 86, 0, 0, 0,
- 0, 0, 0, 0, 0, 87, 0, 86, 86, 86,
- 86, 86, 87, 0, 0, 86, 86, 86, 86, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 86, 86, 86, 86, 86, 0, 0, 0, 0,
+ 0, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 0, 0, 0, 0, 0, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 0,
+ 0, 86, 86, 86, 86, 0, 0, 86, 86, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
+ 86, 86, 86, 86, 0, 0, 0, 86, 86, 86,
+ 86, 87, 87, 87, 87, 0, 0, 87, 0, 87,
+ 87, 87, 87, 87, 87, 87, 87, 0, 0, 0,
+ 0, 0, 0, 0, 0, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 97, 0, 0, 0, 0, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 0, 0, 0, 0, 0, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 97, 0, 87,
+ 87, 87, 87, 0, 97, 87, 87, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 87, 87,
+ 87, 87, 0, 97, 0, 87, 87, 87, 87, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 87, 0, 0, 87, 0,
+ 0, 0, 0, 0, 0, 0, 0, 97, 0, 0,
+ 97, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 98, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 87, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 97, 0, 0, 0, 0, 0, 0, 97,
+ 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
+ 0, 0, 98, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 97, 0,
+ 0, 98, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 98, 0, 0, 98, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 97, 0, 0, 97, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 98, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 97, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,
- 87, 87, 87, 0, 0, 87, 0, 87, 87, 87,
- 87, 87, 87, 87, 87, 0, 0, 0, 0, 0,
- 0, 0, 0, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 0, 0, 0, 0, 0, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 0,
- 0, 0, 0, 0, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 0, 0, 87, 87, 87, 87,
- 0, 0, 87, 87, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 87, 87, 87, 87, 87, 0,
- 0, 0, 87, 87, 87, 87, 97, 97, 97, 97,
- 0, 0, 97, 0, 97, 97, 97, 97, 97, 97,
- 97, 97, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 97, 97, 97, 97, 0, 0, 97, 0, 97,
+ 97, 97, 97, 97, 97, 97, 97, 0, 0, 0,
+ 0, 0, 0, 0, 0, 97, 97, 97, 97, 97,
97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 0,
- 0, 0, 0, 0, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 98, 0, 0, 0,
- 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 0, 0, 97, 97, 97, 97, 0, 0, 97,
- 97, 0, 0, 0, 0, 0, 0, 0, 0, 98,
- 0, 97, 97, 97, 97, 97, 98, 0, 0, 97,
- 97, 97, 97, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 98, 0, 0, 0, 0,
+ 97, 97, 97, 97, 0, 0, 0, 0, 0, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 0, 0, 0, 0, 0, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 0, 0, 97,
+ 97, 97, 97, 0, 0, 97, 97, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 97, 97, 97,
+ 97, 97, 0, 0, 0, 97, 97, 97, 97, 98,
+ 98, 98, 98, 0, 0, 98, 0, 98, 98, 98,
+ 98, 98, 98, 98, 98, 0, 0, 0, 0, 0,
+ 0, 0, 0, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 99, 0, 0, 0, 0, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 0,
+ 0, 0, 0, 0, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 99, 0, 98, 98, 98,
+ 98, 0, 99, 98, 98, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 98, 98, 98, 98, 98,
+ 0, 99, 0, 98, 98, 98, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,
- 0, 0, 98, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 99, 0, 0, 99, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 98, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 99, 0, 0, 0,
- 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
+ 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 99, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
+ 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 104,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 99, 0, 0, 99,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 104, 0, 0, 104, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 104, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 98, 98, 98, 98, 0, 0, 98,
- 0, 98, 98, 98, 98, 98, 98, 98, 98, 0,
- 0, 0, 0, 0, 0, 0, 0, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 98, 98, 98, 0, 0, 0, 0,
- 0, 98, 98, 98, 98, 98, 98, 98, 98, 98,
- 98, 98, 98, 0, 0, 0, 0, 0, 98, 98,
- 98, 98, 98, 98, 98, 98, 98, 98, 0, 0,
- 98, 98, 98, 98, 0, 0, 98, 98, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 98, 98,
- 98, 98, 98, 0, 0, 0, 98, 98, 98, 98,
- 99, 99, 99, 99, 0, 0, 99, 0, 99, 99,
- 99, 99, 99, 99, 99, 99, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 0, 0, 0, 0, 0, 99, 99,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
+ 99, 99, 99, 0, 0, 99, 0, 99, 99, 99,
+ 99, 99, 99, 99, 99, 0, 0, 0, 0, 0,
+ 0, 0, 0, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 104, 0, 0, 0, 0, 99, 99, 99, 99, 99,
+ 99, 99, 0, 0, 0, 0, 0, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 0,
+ 0, 0, 0, 0, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 0, 0, 99, 99, 99,
99, 0, 0, 99, 99, 0, 0, 0, 0, 0,
- 0, 0, 0, 104, 0, 99, 99, 99, 99, 99,
- 104, 0, 0, 99, 99, 99, 99, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 104,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 99, 99, 99, 99, 99,
+ 0, 0, 0, 99, 99, 99, 99, 104, 104, 104,
+ 104, 0, 0, 104, 0, 104, 104, 104, 104, 104,
+ 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 106, 0, 0, 0, 0, 104, 104, 104, 104, 104,
+ 104, 104, 104, 104, 104, 104, 104, 0, 0, 0,
+ 0, 0, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 104, 106, 0, 104, 104, 104, 104, 0,
+ 106, 104, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 104, 104, 104, 104, 104, 0, 106,
+ 0, 104, 104, 104, 104, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 104, 0, 0, 104, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 106, 0, 0,
+ 0, 0, 0, 106, 0, 0, 106, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 104, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 106, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 106, 0, 0, 0, 0, 0, 0, 106, 0, 0,
+ 0, 110, 0, 0, 0, 0, 0, 0, 110, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 110, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 106, 0, 0, 106, 0, 0, 0, 0, 0, 0,
+ 0, 110, 0, 0, 110, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 106, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 104, 104, 104,
- 104, 0, 0, 104, 0, 104, 104, 104, 104, 104,
- 104, 104, 104, 0, 0, 0, 0, 0, 0, 0,
- 0, 104, 104, 104, 104, 104, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
- 0, 0, 0, 0, 0, 104, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 104, 104, 0, 0, 0,
- 0, 0, 104, 104, 104, 104, 104, 104, 104, 104,
- 104, 104, 0, 0, 104, 104, 104, 104, 0, 0,
- 104, 104, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 104, 104, 104, 104, 104, 0, 0, 0,
- 104, 104, 104, 104, 106, 106, 106, 106, 0, 0,
- 106, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 0, 0, 0, 0, 0, 0, 0, 0, 106, 106,
+ 0, 0, 0, 0, 0, 0, 0, 106, 106, 106,
+ 106, 0, 0, 106, 0, 106, 106, 106, 106, 106,
+ 106, 106, 106, 0, 0, 0, 0, 0, 0, 0,
+ 0, 106, 106, 106, 106, 106, 106, 106, 106, 106,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 0, 0, 0, 0, 0, 106, 106, 106, 106, 106,
106, 106, 106, 106, 106, 106, 106, 0, 0, 0,
0, 0, 106, 106, 106, 106, 106, 106, 106, 106,
- 106, 106, 106, 106, 110, 0, 0, 0, 0, 106,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 0,
- 0, 106, 106, 106, 106, 0, 0, 106, 106, 0,
- 0, 0, 0, 0, 0, 0, 0, 110, 0, 106,
- 106, 106, 106, 106, 110, 0, 0, 106, 106, 106,
- 106, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 110, 0, 0,
+ 106, 106, 106, 0, 0, 106, 106, 106, 106, 0,
+ 0, 106, 106, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 106, 106, 106, 106, 106, 0, 0,
+ 0, 106, 106, 106, 106, 110, 110, 110, 110, 0,
+ 0, 110, 0, 110, 110, 110, 110, 110, 110, 110,
+ 110, 0, 0, 0, 0, 0, 0, 0, 0, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 123, 0,
+ 0, 0, 0, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 0, 0, 0, 0, 0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 123, 0, 110, 110, 110, 110, 0, 123, 110,
110, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 123, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 110,
+ 0, 110, 110, 110, 110, 110, 0, 123, 0, 110,
+ 110, 110, 110, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 123, 0, 0, 0, 0, 0,
- 0, 123, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 123, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 123, 0, 0, 123, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 108, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 123, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
+ 0, 0, 0, 0, 0, 0, 108, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 123, 0, 0, 123, 0, 0,
+ 0, 0, 0, 0, 0, 108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 123, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
+ 0, 0, 108, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 110, 110, 110, 110, 0, 0, 110, 0, 110,
- 110, 110, 110, 110, 110, 110, 110, 0, 0, 0,
- 0, 0, 0, 0, 0, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 0, 0, 0, 0, 0, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 0, 0, 0, 0, 0, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 0, 0, 110, 110,
- 110, 110, 0, 0, 110, 110, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 110, 110, 110, 110,
- 110, 0, 0, 0, 110, 110, 110, 110, 123, 123,
- 123, 123, 0, 0, 123, 0, 123, 123, 123, 123,
- 123, 123, 123, 123, 0, 0, 0, 0, 0, 0,
- 0, 0, 123, 123, 123, 123, 123, 123, 123, 123,
+ 0, 108, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 123, 123, 123, 123, 0,
+ 0, 123, 0, 123, 123, 123, 123, 123, 123, 123,
+ 123, 0, 0, 0, 0, 0, 0, 0, 0, 123,
123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
- 123, 0, 0, 0, 0, 0, 123, 123, 123, 123,
- 123, 123, 123, 123, 123, 123, 123, 123, 108, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 0, 0,
0, 0, 0, 123, 123, 123, 123, 123, 123, 123,
- 123, 123, 123, 0, 0, 123, 123, 123, 123, 0,
- 0, 123, 123, 0, 0, 0, 0, 0, 0, 0,
- 0, 108, 0, 123, 123, 123, 123, 123, 108, 0,
- 0, 123, 123, 123, 123, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 108, 0, 0,
- 0, 0, 0, 0, 0, 0, 237, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 108, 0, 0, 108, 0, 0, 0, 0, 0,
- 0, 0, 0, 237, 0, 141, 0, 237, 237, 237,
- 237, 237, 0, 237, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 108, 0, 237, 237, 0, 237, 0,
+ 123, 123, 123, 123, 123, 0, 0, 0, 0, 0,
+ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
+ 123, 0, 0, 123, 123, 123, 123, 0, 0, 123,
+ 123, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 123, 123, 123, 123, 123, 0, 0, 0, 123,
+ 123, 123, 123, 108, 108, 108, 108, 0, 0, 108,
+ 0, 108, 108, 108, 108, 108, 108, 108, 108, 0,
+ 0, 0, 0, 0, 0, 0, 0, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 0, 0, 0, 0,
+ 0, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 0, 0, 0, 0, 0, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 141,
+ 0, 108, 108, 108, 108, 0, 0, 108, 108, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
+ 108, 108, 108, 108, 0, 0, 0, 108, 108, 108,
+ 108, 0, 141, 0, 0, 0, 0, 0, 0, 141,
+ 141, 0, 141, 141, 141, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 141, 0,
- 0, 0, 0, 0, 0, 141, 141, 0, 141, 141,
- 141, 0, 0, 0, 0, 0, 0, 0, 0, 237,
- 0, 0, 0, 0, 141, 0, 0, 141, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 237, 0, 0, 0, 0, 0, 0, 141, 0,
0, 141, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 167, 0, 0, 0, 0,
+ 0, 0, 141, 0, 0, 141, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 141, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 167, 0,
+ 0, 0, 0, 0, 141, 167, 167, 0, 230, 167,
+ 167, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 167, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 108, 108, 108, 108, 0,
- 0, 108, 0, 108, 108, 108, 108, 108, 108, 108,
- 108, 0, 0, 0, 0, 0, 0, 0, 0, 108,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 108, 108, 108, 0, 0,
- 0, 0, 0, 108, 108, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 0, 0, 0, 0, 0,
- 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
- 237, 0, 108, 108, 108, 108, 0, 0, 108, 108,
+ 0, 230, 0, 0, 0, 0, 0, 0, 230, 230,
+ 0, 0, 230, 0, 0, 0, 0, 0, 167, 0,
+ 0, 167, 0, 0, 0, 0, 0, 230, 230, 0,
+ 230, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 108, 108, 108, 108, 108, 0, 237, 0, 108, 108,
- 108, 108, 141, 141, 141, 141, 237, 0, 141, 237,
- 141, 141, 141, 141, 141, 141, 141, 141, 0, 0,
- 0, 0, 0, 0, 0, 0, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 0, 0, 0, 0, 141,
- 141, 167, 237, 237, 237, 237, 237, 237, 0, 0,
- 0, 0, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 0, 0, 0,
- 0, 0, 0, 0, 167, 141, 141, 0, 0, 0,
- 0, 167, 167, 0, 229, 167, 167, 0, 0, 0,
- 0, 0, 0, 0, 0, 141, 141, 141, 141, 0,
167, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
- 0, 0, 0, 0, 229, 229, 0, 0, 229, 0,
- 0, 0, 0, 0, 167, 0, 0, 167, 0, 0,
- 0, 0, 0, 229, 229, 0, 229, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 167, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 229, 0, 0,
- 229, 0, 0, 0, 0, 0, 0, 0, 236, 0,
- 0, 40, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 229,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 40, 0, 0, 0, 0, 236,
- 0, 40, 236, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 236, 0, 0,
- 40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 230, 0, 0, 230, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 236, 0, 0, 40, 0, 0, 40, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 167, 167,
- 167, 167, 0, 0, 167, 0, 167, 167, 167, 167,
- 167, 167, 0, 236, 0, 0, 40, 0, 0, 0,
- 0, 0, 167, 167, 167, 167, 167, 167, 167, 167,
+ 0, 0, 0, 230, 0, 0, 141, 141, 141, 141,
+ 0, 0, 141, 0, 141, 141, 141, 141, 141, 141,
+ 141, 141, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 40,
+ 0, 0, 0, 141, 141, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 141, 141, 141, 141,
+ 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
+ 141, 141, 40, 0, 0, 0, 0, 0, 0, 40,
+ 141, 141, 167, 167, 167, 167, 0, 0, 167, 0,
+ 167, 167, 167, 167, 167, 167, 0, 0, 40, 0,
+ 141, 141, 141, 141, 0, 0, 167, 167, 167, 167,
167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
- 167, 229, 229, 229, 229, 0, 167, 229, 0, 0,
- 0, 0, 229, 0, 0, 229, 229, 0, 0, 0,
- 0, 0, 0, 167, 167, 167, 167, 167, 167, 167,
- 167, 167, 167, 0, 0, 0, 0, 0, 0, 0,
- 0, 167, 167, 42, 0, 0, 0, 0, 0, 229,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 167, 167, 167, 167, 0, 229, 229, 229, 229,
- 229, 229, 229, 229, 229, 229, 42, 0, 229, 229,
- 229, 229, 0, 42, 0, 0, 0, 0, 0, 0,
- 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 0, 42, 0, 0, 0, 0, 229, 40, 40,
- 40, 40, 236, 0, 40, 0, 0, 0, 0, 40,
- 0, 0, 40, 40, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 42, 0, 236, 42,
- 0, 0, 95, 0, 0, 0, 0, 0, 236, 0,
- 0, 236, 0, 0, 0, 0, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 42, 0,
- 0, 0, 0, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 0, 0, 40, 40, 40, 40, 0,
- 0, 0, 0, 0, 0, 236, 0, 0, 0, 0,
- 0, 95, 0, 40, 40, 40, 40, 40, 0, 0,
- 0, 0, 0, 0, 40, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 95, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 93, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 95, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 42, 42, 42, 42, 0, 0, 42, 0, 0, 93,
- 0, 42, 0, 0, 42, 42, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 93, 0, 0, 0, 0, 42, 42,
+ 167, 167, 167, 167, 167, 230, 230, 230, 230, 0,
+ 167, 230, 40, 0, 0, 40, 230, 0, 0, 230,
+ 230, 0, 0, 0, 0, 0, 0, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 0, 0,
+ 0, 0, 0, 0, 40, 0, 167, 167, 42, 0,
+ 0, 0, 0, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 0, 167, 167, 167, 167,
+ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 42, 0, 230, 230, 230, 230, 0, 42, 0,
+ 0, 0, 0, 0, 0, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 230, 230, 0, 42, 0, 0,
+ 0, 0, 230, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 42, 0, 0, 42, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 95,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 42, 0, 0, 40, 40, 40, 40,
+ 0, 0, 40, 0, 0, 0, 0, 40, 0, 0,
+ 40, 40, 0, 0, 0, 0, 0, 0, 0, 0,
+ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 95, 0,
+ 0, 0, 0, 0, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 0, 0, 0, 0,
+ 0, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 95, 0, 40, 40, 40, 40, 0, 89,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40, 40, 40, 40, 40, 0, 0, 0,
+ 0, 0, 0, 40, 95, 0, 0, 0, 93, 0,
+ 0, 0, 0, 89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 42, 42, 42, 42, 0,
+ 0, 42, 0, 0, 0, 0, 42, 0, 0, 42,
+ 42, 0, 0, 0, 0, 89, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 93, 0, 0,
+ 0, 0, 0, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 0, 0, 0, 0, 0,
42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 89, 0, 0, 0, 0, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 93, 0, 42, 42, 42,
- 42, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 42, 42, 42, 42, 42,
- 91, 0, 95, 0, 0, 0, 42, 95, 95, 95,
- 0, 95, 95, 95, 95, 0, 0, 0, 0, 89,
- 0, 0, 0, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 188, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 89, 0, 0, 0, 0, 0, 91,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 95, 95, 0, 89, 0, 0, 0, 0,
- 0, 0, 0, 91, 0, 0, 0, 0, 0, 103,
- 0, 0, 95, 95, 95, 95, 0, 0, 0, 0,
- 93, 0, 0, 0, 0, 93, 93, 93, 0, 93,
- 93, 93, 93, 0, 0, 91, 0, 0, 0, 0,
- 0, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 189, 0, 0, 0, 0, 0, 0, 0, 103, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 42, 93, 0, 42, 42, 42, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 93, 93, 103, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 93, 93, 93, 93, 0, 0, 0, 0, 0, 0,
- 89, 0, 0, 0, 103, 89, 89, 89, 0, 89,
+ 0, 42, 42, 42, 42, 42, 0, 0, 0, 91,
+ 0, 0, 42, 93, 0, 0, 0, 0, 0, 95,
+ 0, 0, 0, 0, 95, 95, 95, 0, 95, 95,
+ 95, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 188,
+ 89, 0, 0, 0, 0, 89, 89, 89, 91, 89,
89, 89, 89, 0, 0, 0, 0, 0, 0, 0,
0, 89, 89, 89, 89, 89, 89, 89, 89, 89,
89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
- 91, 0, 0, 0, 0, 91, 91, 91, 105, 91,
- 91, 91, 91, 0, 0, 0, 0, 0, 0, 0,
- 0, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 95, 95, 91, 0, 0, 0, 0, 0, 0, 103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 95, 95, 95, 95, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 91, 0, 0, 0, 0, 0,
+ 0, 89, 89, 0, 0, 0, 0, 0, 93, 0,
+ 0, 0, 0, 93, 93, 93, 0, 93, 93, 93,
+ 93, 89, 89, 89, 89, 0, 0, 0, 103, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 189, 0,
+ 0, 0, 0, 0, 105, 0, 146, 0, 0, 0,
+ 0, 0, 103, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
+ 93, 0, 0, 0, 103, 0, 0, 0, 0, 146,
+ 0, 146, 146, 0, 0, 0, 0, 0, 0, 93,
+ 93, 93, 93, 105, 0, 146, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 91,
+ 0, 0, 0, 0, 91, 91, 91, 0, 91, 91,
+ 91, 91, 0, 0, 0, 0, 0, 105, 0, 146,
91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
- 89, 89, 105, 0, 0, 0, 0, 0, 109, 0,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 105,
+ 0, 146, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 89, 89, 89, 89, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 105, 0, 0, 0, 0, 0,
- 91, 91, 0, 0, 0, 0, 0, 0, 107, 0,
+ 91, 91, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
91, 91, 91, 91, 103, 103, 103, 109, 103, 103,
103, 103, 0, 0, 0, 0, 0, 0, 0, 0,
103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
103, 103, 103, 103, 103, 103, 103, 103, 103, 0,
- 0, 109, 0, 0, 0, 0, 0, 107, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 109, 0, 0, 0, 0, 0, 103,
- 103, 107, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
- 103, 103, 103, 0, 0, 0, 0, 0, 0, 105,
- 0, 0, 0, 107, 105, 105, 105, 0, 105, 105,
- 105, 105, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
+ 0, 0, 0, 109, 0, 0, 0, 0, 0, 0,
+ 103, 103, 0, 0, 105, 0, 0, 0, 0, 105,
+ 105, 105, 0, 105, 105, 105, 105, 146, 146, 0,
+ 103, 103, 103, 103, 0, 105, 105, 105, 105, 105,
105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 0,
+ 105, 105, 105, 105, 107, 0, 0, 0, 0, 0,
+ 0, 0, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 107, 0,
+ 0, 146, 146, 146, 146, 105, 105, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 146,
+ 146, 146, 146, 146, 0, 105, 105, 105, 105, 0,
+ 107, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
+ 0, 0, 0, 109, 109, 109, 0, 109, 109, 109,
+ 109, 0, 0, 0, 0, 0, 0, 0, 0, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 80, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 105, 0, 40, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 109, 105,
- 105, 105, 105, 109, 109, 109, 0, 109, 109, 109,
- 109, 0, 0, 0, 32, 0, 0, 0, 0, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 107, 0,
- 0, 0, 0, 107, 107, 107, 31, 107, 107, 107,
- 107, 80, 0, 0, 0, 0, 0, 0, 0, 107,
+ 0, 80, 0, 0, 0, 0, 0, 0, 80, 109,
+ 109, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 80, 0, 109,
+ 109, 109, 109, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
+ 107, 107, 107, 0, 107, 107, 107, 107, 0, 0,
+ 0, 80, 0, 0, 80, 0, 107, 107, 107, 107,
107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 109, 109,
- 0, 0, 0, 0, 80, 0, 0, 0, 0, 0,
- 0, 80, 0, 0, 0, 0, 0, 0, 109, 109,
- 109, 109, 0, 0, 0, 0, 0, 0, 0, 0,
- 80, 0, 146, 0, 0, 0, 0, 0, 107, 107,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 107, 107,
- 107, 107, 0, 0, 80, 0, 0, 80, 0, 0,
- 0, 0, 0, 0, 0, 146, 0, 146, 146, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 146, 0, 0, 0, 0, 80, 0, 0, 0,
- 6, 7, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 0, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 0, 146, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 88, 0, 0, 0, 0,
- 0, 0, 85, 0, 0, 0, 0, 87, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 146, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 22, 0, 0, 0, 0,
- 0, 23, 24, 0, 0, 25, 0, 26, 0, 0,
- 0, 0, 0, 32, 0, 0, 0, 0, 86, 0,
- 27, 0, 28, 0, 0, 0, 29, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 31, 0, 0, 80, 80,
- 80, 0, 0, 0, 80, 0, 80, 80, 80, 80,
- 80, 80, 80, 80, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 80, 80, 80, 80, 80, 80, 80,
+ 107, 107, 107, 107, 107, 0, 0, 0, 0, 0,
+ 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 89, 0,
+ 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
+ 88, 0, 0, 0, 0, 0, 107, 107, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 107, 107, 107, 107,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 31, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 80, 80, 80, 0, 0,
+ 0, 80, 0, 80, 80, 80, 80, 80, 80, 80,
+ 80, 0, 0, 0, 0, 0, 0, 0, 0, 80,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 0, 0, 0, 0, 0, 80, 80, 80, 80,
80, 80, 80, 80, 80, 80, 80, 80, 0, 0,
0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 146, 146, 80, 80, 80, 80, 0,
- 0, 80, 80, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 80, 80, 80, 80, 80, 0, 0,
- 0, 80, 80, 80, 0, 0, 0, 0, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 0, 0, 0, 0, 0, 275,
- 276, 49, 8, 9, 0, 50, 146, 146, 146, 146,
- 51, 10, 11, 277, 278, 14, 15, 16, 17, 18,
- 19, 20, 21, 0, 146, 146, 146, 146, 146, 6,
- 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 0,
- 0, 0, 0, 0, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 22, 0, 76, 77, 78, 79,
- 23, 24, 0, 0, 25, 0, 26, 6, 0, 0,
- 0, 0, 6, 0, 80, 81, 82, 83, 84, 27,
- 0, 28, 0, 0, 0, 29, 30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 80, 80, 80, 80, 80, 0, 0, 0, 0, 0,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 0, 0, 80, 80, 80, 80, 0, 0, 80,
+ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 80, 80, 80, 80, 80, 0, 0, 0, 80,
+ 80, 80, 277, 278, 49, 8, 9, 0, 50, 0,
+ 0, 0, 0, 51, 10, 11, 279, 280, 14, 15,
+ 16, 17, 18, 19, 20, 21, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 0, 0, 0, 0, 0, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 22, 0,
+ 77, 78, 79, 80, 23, 24, 6, 0, 25, 0,
+ 26, 6, 0, 0, 0, 0, 0, 0, 81, 82,
+ 83, 84, 85, 27, 0, 28, 0, 0, 0, 29,
+ 30, 0, 0, 0, 0, 0, 0, 0, 6, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
- 0, 0, 0, 0, 103, 0, 0, 0, 0, 87,
+ 0, 0, 0, 0, 0, 0, 0, 89, 0, 0,
+ 0, 0, 0, 0, 104, 0, 0, 0, 0, 88,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 6, 6, 6, 6, 0, 6,
- 0, 0, 0, 0, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 0, 104, 0,
- 0, 0, 0, 0, 0, 103, 295, 0, 0, 0,
- 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 0, 0, 0, 0, 0, 6, 6,
+ 0, 0, 6, 6, 6, 6, 6, 0, 6, 0,
+ 0, 0, 0, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 105, 0, 0, 0,
+ 0, 0, 0, 104, 297, 0, 0, 0, 88, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 0, 0, 0, 0, 0, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 6, 6, 6, 6, 6, 6, 0, 0, 6, 0,
- 6, 86, 0, 0, 0, 0, 0, 0, 6, 6,
+ 6, 6, 6, 6, 6, 6, 0, 0, 6, 87,
+ 6, 0, 0, 0, 0, 0, 0, 0, 6, 6,
6, 6, 6, 6, 0, 6, 0, 0, 0, 6,
- 6, 47, 48, 49, 8, 0, 0, 50, 0, 119,
- 120, 121, 51, 122, 123, 124, 125, 0, 0, 0,
- 0, 0, 0, 0, 0, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 0, 0, 0, 0, 0, 54,
+ 6, 47, 48, 49, 8, 0, 0, 50, 0, 120,
+ 121, 122, 51, 123, 124, 125, 126, 0, 0, 0,
+ 0, 0, 0, 0, 0, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 0, 0, 0, 0, 0, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 0, 0, 0, 0, 0, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 88, 0, 76, 77,
- 78, 79, 0, 85, 145, 146, 0, 0, 87, 0,
- 0, 0, 0, 0, 0, 0, 80, 81, 82, 83,
- 84, 0, 0, 0, 147, 148, 149, 29, 0, 0,
+ 70, 71, 72, 73, 74, 75, 76, 0, 0, 77,
+ 78, 79, 80, 0, 89, 146, 147, 0, 0, 0,
+ 0, 86, 0, 0, 0, 0, 88, 81, 82, 83,
+ 84, 85, 0, 0, 0, 148, 149, 150, 29, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
- 0, 0, 47, 48, 49, 8, 0, 0, 50, 0,
- 0, 0, 0, 51, 0, 0, 52, 53, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 47, 48, 49, 8, 0, 0, 50, 87, 0, 0,
+ 0, 51, 0, 0, 52, 53, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 0, 0, 0, 0, 0, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 104, 0, 76,
- 77, 78, 79, 0, 103, 0, 0, 0, 0, 87,
- 0, 0, 0, 0, 0, 0, 0, 80, 81, 82,
- 83, 84, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 0, 0, 0, 0, 0, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 105, 0, 77, 78,
+ 79, 80, 0, 104, 0, 0, 0, 0, 88, 0,
+ 0, 0, 0, 0, 0, 0, 81, 82, 83, 84,
+ 85, 0, 0, 0, 0, 0, 0, 29, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 47, 48,
+ 49, 8, 0, 0, 50, 0, 0, 0, 0, 51,
+ 0, 0, 52, 53, 0, 0, 0, 105, 0, 0,
+ 0, 0, 0, 0, 86, 0, 0, 0, 0, 88,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 47, 48, 49, 8, 0, 0, 50, 0, 0, 0,
- 0, 51, 0, 0, 52, 53, 0, 0, 104, 0,
- 0, 0, 0, 0, 0, 85, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 0, 0,
+ 0, 0, 0, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 0, 0, 77, 78, 79, 80,
87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 81, 82, 83, 84, 85, 0,
+ 0, 0, 0, 0, 0, 29, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 105, 0, 0,
+ 47, 48, 49, 8, 268, 0, 50, 0, 0, 88,
+ 0, 51, 0, 0, 52, 53, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 0, 0, 0, 0, 0, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 0, 0, 76, 77, 78,
- 79, 86, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 80, 81, 82, 83, 84,
- 0, 0, 0, 0, 0, 0, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 104,
- 0, 0, 0, 0, 0, 0, 266, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 48, 49, 8, 0, 0, 50, 0, 0,
- 0, 0, 51, 0, 0, 52, 53, 0, 0, 0,
+ 87, 0, 0, 0, 0, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 0, 0, 77, 78,
+ 79, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 81, 82, 83, 84,
+ 85, 0, 0, 0, 0, 0, 0, 29, 0, 89,
+ 0, 47, 48, 49, 8, 0, 104, 50, 406, 0,
+ 0, 88, 51, 0, 0, 52, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 86, 0, 0, 0, 0, 0, 0, 54,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 0, 0, 0, 0, 0, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 0, 0, 76, 77,
- 78, 79, 88, 0, 0, 0, 0, 0, 0, 103,
- 0, 402, 0, 0, 87, 0, 80, 81, 82, 83,
- 84, 0, 47, 48, 49, 8, 0, 29, 50, 0,
- 0, 0, 0, 51, 0, 0, 52, 53, 0, 0,
+ 65, 0, 87, 0, 0, 0, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 0, 0, 77,
+ 78, 79, 80, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 81, 82, 83,
+ 84, 85, 0, 0, 0, 0, 0, 0, 29, 89,
+ 0, 47, 48, 49, 8, 0, 104, 50, 0, 0,
+ 0, 88, 51, 0, 0, 52, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 0, 0, 0, 0, 0, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 0, 0, 76,
- 77, 78, 79, 88, 0, 0, 0, 0, 0, 0,
- 103, 0, 0, 0, 0, 87, 0, 80, 81, 82,
- 83, 84, 0, 47, 48, 49, 8, 0, 29, 50,
- 0, 0, 0, 0, 51, 0, 0, 52, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 0, 87, 0, 0, 0, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 0, 0, 77,
+ 78, 79, 80, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 81, 82, 83,
+ 84, 85, 0, 0, 0, 0, 0, 0, 29, 0,
+ 89, 0, 0, 47, 48, 49, 0, 86, 0, 50,
+ 0, 0, 88, 0, 51, 0, 0, 52, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 86, 0, 0, 0,
0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 0, 0, 0, 0, 0, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 0, 0,
- 76, 77, 78, 79, 88, 0, 0, 0, 0, 0,
- 0, 85, 0, 0, 0, 0, 87, 0, 80, 81,
- 82, 83, 84, 0, 0, 0, 47, 48, 49, 29,
- 0, 0, 50, 0, 0, 0, 0, 51, 0, 0,
- 52, 53, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 86, 0, 0,
- 0, 0, 0, 0, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 0, 0, 0, 0,
- 0, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 0, 0, 76, 77, 78, 79, 88, 0, 0,
- 0, 0, 0, 0, 266, 0, 0, 0, 0, 87,
- 0, 80, 81, 82, 83, 84, 0, 47, 48, 49,
- 0, 0, 0, 50, 0, 0, 0, 0, 51, 0,
- 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 0, 0, 0,
- 0, 0, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 0, 0, 76, 77, 78, 79, 88, 0,
- 0, 0, 0, 0, 0, 103, 0, 0, 0, 0,
- 87, 0, 80, 81, 82, 83, 84, 0, 47, 48,
- 49, 0, 0, 0, 50, 0, 0, 0, 0, 51,
- 0, 0, 52, 53, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 86, 0, 0, 0, 0, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 0, 0,
- 0, 0, 0, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 0, 0, 76, 77, 78, 79, 0,
+ 63, 64, 65, 87, 0, 0, 0, 0, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 0,
+ 0, 77, 78, 79, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
+ 82, 83, 84, 85, 0, 0, 0, 0, 0, 0,
+ 89, 0, 0, 47, 48, 49, 0, 268, 0, 50,
+ 0, 0, 88, 0, 51, 0, 0, 52, 53, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 80, 81, 82, 83, 84, 0, 0,
- 0, 47, 48, 49, 0, 0, 0, 50, 0, 0,
- 0, 0, 51, 0, 0, 52, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 0, 0, 0, 0, 0, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 0, 0, 76, 77,
- 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 80, 81, 82, 83,
- 84, 0, 47, 48, 49, 0, 0, 0, 50, 0,
- 0, 0, 0, 51, 0, 0, 0, 0, 0, 0,
+ 0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 87, 0, 0, 0, 0, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 0,
+ 0, 77, 78, 79, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
+ 82, 83, 84, 85, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 47, 48, 49, 0, 104, 0,
+ 50, 0, 0, 88, 0, 51, 0, 0, 52, 53,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 0, 0, 0, 0, 0, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 0, 0, 76,
- 77, 78, 79, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 80, 81, 82,
- 83, 84,
+ 0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 87, 0, 0, 0, 0, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 0, 0, 77, 78, 79, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 81, 82, 83, 84, 85, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 47, 48, 49, 0, 0, 0,
+ 50, 0, 0, 0, 0, 51, 0, 0, 52, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 32, 0, 0, 0, 0, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 0, 0, 77, 78, 79, 80, 0, 0, 0, 0,
+ 0, 0, 32, 0, 0, 0, 31, 0, 0, 0,
+ 81, 82, 83, 84, 85, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 47, 48, 49, 0, 0,
+ 0, 50, 0, 0, 31, 0, 51, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 0, 0, 0, 0, 0,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 0, 0, 77, 78, 79, 80, 0, 0, 0,
+ 0, 0, 0, 6, 0, 0, 0, 0, 0, 0,
+ 0, 81, 82, 83, 84, 85, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 7, 0, 8, 9, 6, 0, 0, 0, 0,
+ 0, 0, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 0, 0, 0, 0, 6, 7,
+ 0, 8, 9, 0, 0, 0, 0, 0, 0, 0,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 22, 0, 0, 0,
+ 0, 0, 23, 24, 0, 0, 25, 0, 26, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 27, 0, 28, 22, 0, 0, 29, 30, 0,
+ 23, 24, 0, 0, 25, 0, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,
+ 0, 28, 0, 0, 0, 29, 30, 0, 0, 6,
+ 6, 0, 6, 6, 0, 0, 0, 0, 0, 0,
+ 0, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
+ 0, 6, 6, 0, 0, 6, 0, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 6, 0, 0, 0, 6, 6,
};
-static YYCONST short yycheck[] = { 24,
- 118, 44, 0, 28, 93, 30, 59, 43, 37, 45,
- 260, 36, 59, 42, 43, 37, 45, 260, 47, 0,
- 42, 43, 0, 45, 96, 47, 104, 85, 43, 4,
- 45, 60, 43, 62, 45, 0, 154, 35, 98, 100,
- 346, 347, 41, 41, 43, 58, 45, 62, 61, 24,
- 41, 41, 113, 44, 44, 30, 348, 349, 0, 258,
- 85, 36, 87, 88, 58, 94, 317, 318, 319, 320,
- 321, 258, 94, 114, 115, 100, 134, 96, 43, 104,
- 45, 59, 37, 333, 43, 44, 45, 42, 113, 95,
- 40, 0, 47, 345, 59, 61, 333, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 0, 134,
- 91, 136, 137, 138, 203, 93, 262, 59, 40, 40,
- 363, 0, 147, 148, 40, 100, 40, 133, 93, 154,
- 40, 61, 41, 40, 0, 44, 111, 40, 113, 94,
- 40, 40, 123, 118, 271, 272, 40, 125, 290, 0,
- 59, 93, 230, 231, 212, 213, 234, 235, 260, 258,
- 125, 262, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 0, 154,
- 0, 41, 33, 125, 93, 257, 41, 212, 213, 40,
- 264, 263, 94, 59, 45, 301, 268, 46, 258, 259,
- 257, 93, 227, 271, 272, 230, 231, 232, 266, 234,
- 235, 0, 93, 125, 93, 258, 125, 93, 85, 41,
- 262, 41, 44, 257, 44, 352, 353, 93, 300, 262,
- 96, 260, 44, 125, 43, 44, 45, 59, 257, 59,
- 91, 266, 41, 41, 263, 96, 125, 41, 41, 268,
- 41, 257, 44, 371, 260, 43, 44, 45, 264, 125,
- 44, 236, 237, 130, 131, 132, 241, 0, 304, 0,
- 59, 93, 123, 93, 299, 41, 257, 258, 300, 260,
- 261, 303, 342, 41, 352, 353, 0, 154, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 302, 346, 33, 125, 93, 125, 37, 44, 262, 40,
- 41, 42, 43, 44, 45, 303, 47, 346, 347, 348,
- 349, 350, 351, 257, 260, 41, 59, 194, 59, 60,
- 358, 62, 41, 41, 363, 202, 125, 343, 344, 41,
- 365, 366, 367, 343, 369, 59, 0, 262, 41, 154,
- 343, 332, 30, 377, 343, 264, 343, 338, 339, 35,
- 93, 342, 93, 344, -1, 96, 372, -1, -1, 375,
- -1, -1, -1, -1, 399, -1, 357, 402, 359, 93,
- -1, 290, 363, 364, -1, -1, -1, -1, -1, 0,
- -1, 257, 125, 37, 125, -1, 371, 263, 42, 43,
- -1, 45, 268, 47, -1, -1, 257, 258, 259, 260,
- 261, 125, 263, -1, -1, -1, -1, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 41, -1, 299, 44, 300, -1, -1, 346, 347, -1,
- -1, -1, 264, -1, 264, -1, -1, -1, 59, -1,
- 94, -1, -1, -1, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, 290, -1,
- 290, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, 93, 334, 335, 336, 337, 338, 339, -1,
- -1, 342, -1, 344, -1, -1, -1, -1, 365, 366,
- -1, 352, 353, 354, 355, 356, 357, -1, 359, -1,
- -1, -1, 363, 364, 125, -1, 91, -1, -1, -1,
- -1, 257, -1, -1, 260, 347, 257, 258, 259, 260,
- -1, -1, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, 91, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- -1, -1, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, 0, -1,
- 0, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 0, -1, 334, 335, 336, 337, 343, 344, 340,
- 341, -1, 343, 0, 0, 346, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, -1, -1, -1, 360,
- 361, 362, 363, 43, 33, 45, 372, -1, 37, 375,
- -1, 40, 41, 42, 43, 44, 45, 59, 47, 59,
- -1, 0, 26, 264, 41, -1, -1, 44, -1, -1,
- 59, 60, -1, 62, -1, 91, -1, -1, 42, -1,
- -1, -1, 59, 59, -1, -1, -1, -1, 0, 290,
- -1, 93, -1, 93, -1, 260, -1, -1, -1, 300,
- -1, -1, 303, 268, 93, -1, -1, 96, 273, 274,
- 275, 276, 277, 278, -1, 280, 93, 93, 0, -1,
- 59, -1, 86, 125, 260, 125, -1, -1, -1, 0,
- 0, -1, 268, -1, -1, -1, 125, 273, 274, 275,
- 276, 277, 278, -1, 280, 346, 347, 59, 125, 125,
- -1, 33, -1, -1, 93, 37, -1, -1, 40, 41,
- 42, 43, 44, 45, -1, 47, -1, -1, -1, -1,
- 41, 41, -1, 44, 44, -1, -1, 59, 60, -1,
- 62, 93, -1, -1, -1, 37, 125, -1, 59, 59,
- 42, 43, 156, 45, -1, 47, 160, 161, 162, 163,
- 164, 165, 166, 167, 168, 169, -1, -1, 60, -1,
- 62, 93, -1, 125, 96, -1, -1, -1, -1, -1,
- -1, -1, 93, 93, -1, -1, -1, 37, -1, -1,
- -1, -1, 42, 43, 44, 45, -1, 47, -1, -1,
- -1, -1, 94, 125, 260, -1, -1, -1, -1, -1,
- 60, -1, 62, -1, 125, 125, -1, 273, 274, 275,
- 276, 277, 278, -1, 280, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 94, -1, -1, 264, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, -1, 290, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, 343, -1, -1, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, -1, -1,
- 347, 360, 361, 362, 363, 257, 258, 259, 260, -1,
- -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 355, -1, 264, 264, 359, 360, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, 290,
- 290, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 0, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, 343, -1, -1, 346, 347, 348, 349, 350, 351,
- 352, 353, 354, 355, 356, -1, 347, -1, 360, 361,
- 362, 363, -1, 33, -1, -1, -1, 37, -1, -1,
- 40, 41, 42, 43, 44, 45, -1, 47, 350, 351,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- 60, -1, 62, -1, -1, -1, -1, 24, -1, -1,
- -1, -1, 37, 30, -1, -1, -1, 42, 43, -1,
- 45, -1, 47, -1, -1, -1, 346, 347, 348, 349,
- 350, 351, -1, 93, -1, 60, 96, 62, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
- -1, -1, -1, 37, -1, -1, -1, -1, 42, 43,
- -1, 45, -1, 47, -1, 125, -1, -1, 85, 94,
- -1, -1, -1, -1, -1, -1, 60, -1, 62, -1,
- 33, -1, -1, 100, 37, -1, -1, 40, 41, 42,
- 43, 44, 45, -1, 47, -1, 113, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, 60, -1, 62,
- 94, -1, -1, 130, 131, 132, 37, -1, -1, -1,
- -1, 42, 43, 37, 45, -1, 47, -1, 42, 43,
- 44, 45, -1, 47, -1, -1, -1, 154, -1, 60,
- 93, 62, -1, 96, 37, -1, 60, -1, 62, 42,
- 43, 44, 45, -1, 47, -1, 37, -1, -1, -1,
- -1, 42, 43, -1, 45, -1, 47, 60, -1, 62,
- -1, -1, 125, 94, -1, -1, -1, 194, -1, 60,
- 94, 62, -1, -1, -1, 202, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 94, -1, 263, 264, 265, 266, 267, 268, 269,
- 270, 271, 272, 94, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 300, -1, -1, 303, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, 286, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, 299, 343, -1, -1, 346, 347, 348, 349,
- 350, 351, 352, 353, 354, 355, 356, -1, -1, -1,
- 360, 361, 362, 363, 257, 258, 259, 260, -1, -1,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, 346, 347, 348, 349, 350, 351, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 365, 366,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 348, 349, 350, 351, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 0,
- -1, 334, 335, 336, 337, -1, 300, 340, 341, 303,
- 343, -1, -1, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, -1, -1, -1, 360, 361, 362,
- 363, -1, 33, -1, -1, -1, 37, -1, -1, 40,
- 41, 42, 43, 44, 45, 346, 47, 348, 349, 350,
- 351, -1, 346, 347, 348, 349, 350, 351, 59, 60,
- -1, 62, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 346, 347, 348, 349, 350, 351, -1,
- -1, -1, -1, -1, -1, 346, 347, 348, 349, 350,
- 351, -1, 93, -1, -1, 96, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, 41, -1, 43,
- 44, 45, -1, -1, -1, -1, -1, -1, -1, -1,
+short yycheck[] = { 24,
+ 43, 119, 45, 28, 44, 30, 0, 260, 271, 272,
+ 94, 36, 4, 260, 59, 105, 86, 37, 59, 96,
+ 58, 43, 42, 45, 0, 37, 0, 47, 258, 101,
+ 42, 43, 24, 45, 99, 47, 0, 155, 30, 258,
+ 62, 35, 114, 58, 36, 40, 61, 41, 60, 346,
+ 62, 271, 272, 334, 41, 91, 43, 0, 45, 0,
+ 43, 86, 45, 88, 89, 135, 262, 41, 41, 0,
+ 44, 44, 41, 61, 94, 44, 101, 347, 348, 43,
+ 105, 45, 94, 59, 40, 59, 40, 334, 96, 114,
+ 353, 354, 0, 40, 0, 59, 115, 116, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 101,
+ 135, 364, 137, 138, 139, 40, 59, 93, 59, 93,
+ 112, 205, 114, 148, 149, 33, 40, 119, 59, 93,
+ 155, 40, 40, 353, 354, 41, 290, 45, 44, 43,
+ 44, 45, 232, 233, 214, 215, 236, 237, 40, 125,
+ 93, 125, 93, 59, 317, 318, 319, 320, 321, 40,
+ 0, 125, 93, 155, 189, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+ 257, 40, 125, 91, 125, 40, 263, 93, 96, 214,
+ 215, 268, 349, 350, 125, 260, 261, 40, 268, 61,
+ 260, 0, 258, 0, 229, 0, 41, 232, 233, 234,
+ 24, 236, 237, 262, 41, 123, 30, 264, 258, 125,
+ 94, 301, 0, 300, 260, 46, 37, 257, 93, 0,
+ 125, 42, 43, 93, 45, 262, 47, 273, 274, 275,
+ 276, 277, 278, 268, 280, 262, 238, 239, 257, 257,
+ 41, 243, 41, 93, 44, 263, 41, 375, 41, 37,
+ 268, 304, 59, 41, 42, 43, 44, 45, 41, 47,
+ 41, 41, 86, 44, 286, 44, 44, 302, 41, 41,
+ 345, 59, 60, 94, 62, 125, 302, 101, 59, 347,
+ 264, 262, 91, 43, 44, 45, 93, 44, 93, 257,
+ 114, 303, 37, 43, 44, 45, 359, 42, 43, 44,
+ 45, 260, 47, 41, 41, 93, 290, 131, 132, 133,
+ 41, 41, 93, 344, 123, 60, 300, 62, 125, 303,
+ 125, 0, 262, 41, 344, 347, 348, 349, 350, 351,
+ 352, 155, 155, 30, 369, 370, 371, 125, 373, 257,
+ 258, 259, 260, 261, 125, 263, 35, 381, 264, 94,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 347, 348, 0, 344, 344, 403, -1,
+ -1, 406, 196, 375, 290, -1, 37, -1, -1, -1,
+ 204, 42, 43, 44, 45, -1, 47, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 60,
+ 0, 62, -1, -1, 322, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, 335, 336, 337,
+ 338, 339, 340, -1, 59, 343, -1, 345, -1, -1,
+ -1, 347, 348, 94, -1, 353, 354, 355, 356, 357,
+ 358, -1, 360, 43, 0, 45, 364, 365, 257, 258,
+ -1, 260, 261, -1, 0, 0, -1, 0, 93, 59,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, -1, 0, -1, -1, 264, 33, 302, 300,
+ -1, 37, 303, 264, 40, 41, 42, 43, 44, 45,
+ 125, 47, -1, 93, -1, -1, 41, -1, -1, 44,
+ -1, -1, 290, 59, 60, -1, 62, -1, -1, 290,
+ -1, -1, 300, 59, 59, 303, 59, -1, -1, 300,
+ -1, -1, 303, -1, 333, 125, -1, -1, -1, -1,
+ 339, 340, 59, 37, 343, -1, 345, 93, 42, 43,
+ 96, 45, -1, 47, -1, 369, 370, 93, 93, 358,
+ 93, 360, 0, -1, -1, 364, 365, -1, -1, 347,
+ 348, 349, 350, 351, 352, -1, 93, 348, -1, 125,
+ -1, -1, -1, -1, -1, 259, -1, -1, 262, 125,
+ 125, -1, 125, -1, -1, 33, -1, -1, -1, 37,
+ 94, -1, 40, 41, 42, 43, 44, 45, 125, 47,
+ -1, -1, 347, 348, 349, 350, 351, 352, -1, -1,
+ -1, 59, 60, -1, 62, -1, -1, -1, -1, -1,
+ -1, 37, -1, -1, -1, -1, 42, 43, -1, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, 300,
+ -1, -1, 303, -1, 60, 93, 62, -1, 96, 37,
+ -1, -1, -1, -1, 42, 43, -1, 45, -1, 47,
+ 37, -1, 346, 347, -1, 42, 43, 44, 45, -1,
+ 47, -1, 60, -1, 62, -1, -1, 125, 94, -1,
+ -1, -1, -1, 60, -1, 62, 347, 348, 349, 350,
+ 351, 352, 376, -1, -1, 379, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, -1, 94, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 94, -1, 264,
+ -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 290, -1, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, -1, -1, 335,
+ 336, 337, 338, -1, -1, 341, 342, -1, 344, -1,
+ -1, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, -1, 348, -1, 361, 362, 363, 364, 257,
+ 258, 259, 260, -1, 91, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
+ -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 96, -1, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
+ -1, -1, 260, -1, 322, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 0, -1, 335, 336, 337,
+ 338, 134, -1, 341, 342, -1, 344, 0, -1, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ -1, -1, -1, 361, 362, 363, 364, -1, 33, -1,
+ -1, -1, 37, -1, -1, 40, 41, 42, 43, 44,
+ 45, -1, 47, -1, 26, 351, 352, -1, 41, -1,
+ -1, 44, -1, -1, 59, 60, -1, 62, -1, -1,
+ 42, -1, -1, -1, -1, -1, 59, -1, -1, 347,
+ 348, 349, 350, 351, 352, -1, -1, -1, -1, -1,
+ 347, 348, 349, 350, 351, 352, 364, -1, 93, -1,
+ -1, 96, -1, 260, -1, -1, -1, -1, -1, -1,
+ 93, 268, -1, 0, -1, 87, 273, 274, 275, 276,
+ 277, 278, -1, 280, 0, -1, -1, -1, -1, -1,
+ 125, -1, -1, -1, -1, -1, 259, -1, -1, 262,
+ -1, -1, 125, 266, -1, -1, 33, -1, -1, -1,
+ 37, -1, -1, 40, 41, 42, 43, 44, 45, -1,
+ 47, -1, -1, -1, -1, 41, -1, -1, 44, -1,
+ -1, -1, 59, 60, -1, 62, -1, -1, -1, -1,
+ -1, -1, -1, 59, -1, 157, -1, -1, -1, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
+ 37, -1, -1, -1, -1, 42, 43, 93, 45, -1,
+ 47, 37, -1, 346, 347, -1, 42, 43, -1, 45,
+ -1, 47, -1, 60, -1, 62, -1, -1, 125, -1,
+ -1, -1, -1, -1, 60, -1, 62, -1, -1, 125,
+ -1, -1, -1, 376, -1, -1, 379, -1, -1, -1,
+ -1, -1, 257, 258, 259, 260, -1, 94, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 94, -1,
+ -1, 264, -1, -1, -1, -1, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, -1, 290, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, -1, -1,
+ 335, 336, 337, 338, -1, -1, 341, 342, -1, 344,
+ -1, -1, 347, 348, 349, 350, 351, 352, 353, 354,
+ 355, 356, 357, -1, -1, 348, 361, 362, 363, 364,
+ 257, 258, 259, 260, -1, -1, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 358, -1, 264, -1,
+ 362, 363, 91, -1, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 297, 298, 299, 300, 290, -1, 303, 304, 305, 306,
+ 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
+ -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, 0, -1, 335, 336,
+ 337, 338, -1, -1, 341, 342, -1, 344, -1, -1,
+ 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
+ 357, -1, 348, 289, 361, 362, 363, 364, -1, 33,
+ -1, -1, -1, 37, -1, -1, 40, 41, 42, 43,
+ 44, 45, -1, 47, -1, -1, -1, -1, -1, 0,
-1, -1, -1, -1, -1, 59, 60, -1, 62, -1,
- -1, -1, -1, -1, -1, 37, -1, -1, -1, -1,
- 42, 43, 37, 45, -1, 47, -1, 42, 43, 44,
- 45, -1, 47, -1, -1, -1, -1, -1, 60, 93,
- 62, -1, 96, 37, -1, 60, -1, 62, 42, 43,
- -1, 45, -1, 47, -1, 37, -1, -1, -1, -1,
- 42, 43, -1, 45, -1, 47, 60, -1, 62, -1,
- -1, 125, 94, -1, -1, -1, -1, -1, 60, 94,
- 62, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- 94, -1, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 94, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- -1, -1, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, -1, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, -1, -1, 334, 335, 336, 337, -1, -1, 340,
- 341, -1, 343, -1, -1, 346, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, -1, -1, -1, 360,
- 361, 362, 363, 257, 258, 259, 260, -1, -1, 263,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 347, 348, 349, 350, 351, 352, -1, -1, -1, -1,
+ -1, 347, 348, 349, 350, 351, 352, -1, -1, 93,
+ 41, -1, 96, 44, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 0, -1, -1, -1, 59, -1,
+ 37, 260, -1, -1, -1, 42, 43, -1, 45, 268,
+ 47, 125, -1, -1, 273, 274, 275, 276, 277, 278,
+ -1, 280, -1, 60, -1, 62, -1, 33, -1, -1,
+ -1, 37, 93, -1, 40, 41, 42, 43, 44, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, 60, -1, 62, 94, -1, -1,
+ -1, -1, -1, 37, 125, -1, -1, -1, 42, 43,
+ 37, 45, -1, 47, -1, 42, 43, -1, 45, -1,
+ 47, -1, -1, -1, -1, -1, 60, 93, 62, -1,
+ 96, 37, -1, 60, -1, 62, 42, 43, -1, 45,
+ -1, 47, -1, 37, -1, -1, -1, -1, 42, 43,
+ 44, 45, -1, 47, 60, -1, 62, -1, -1, 125,
+ 94, -1, -1, -1, -1, -1, 60, 94, 62, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 257, 258, 259, 260, -1, 94, 263,
264, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- 0, -1, -1, -1, -1, -1, -1, 281, 282, 283,
+ 94, -1, -1, -1, -1, -1, -1, 281, 282, 283,
284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
294, 295, 296, 297, 298, 299, 300, -1, -1, 303,
304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, 289, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 0, 59,
- 334, 335, 336, 337, -1, 300, 340, 341, 303, 343,
- -1, -1, 346, 347, 348, 349, 350, 351, 352, 353,
- 354, 355, 356, -1, -1, -1, 360, 361, 362, 363,
- -1, 33, -1, 93, -1, -1, 96, -1, 40, 41,
- -1, 43, 44, 45, 346, 347, 348, 349, 350, 351,
- -1, 346, 347, 348, 349, 350, 351, 59, 60, -1,
- 62, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, 346, 347, 348, 349, 350, 351, -1, -1,
- -1, -1, -1, -1, 346, -1, 348, 349, 350, 351,
- -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
+ 314, 315, 316, 264, -1, -1, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, -1,
+ -1, 335, 336, 337, 338, -1, -1, 341, 342, 290,
+ 344, -1, -1, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 46, -1, -1, 361, 362, 363,
+ 364, 257, 258, 259, 260, -1, 46, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
+ -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, -1, -1, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, 349, 350, 351, 352, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 0, -1, 335,
+ 336, 337, 338, -1, -1, 341, 342, -1, 344, -1,
+ -1, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, -1, -1, -1, 361, 362, 363, 364, -1,
+ 33, -1, -1, -1, -1, -1, 300, 40, 41, 303,
+ 43, 44, 45, 347, 348, 349, 350, 351, 352, -1,
+ 347, -1, 349, 350, 351, 352, 59, 60, -1, 62,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 347, -1, 349, 350, 351, 352, -1, -1, -1,
+ -1, -1, -1, 347, 348, 349, 350, 351, 352, -1,
+ 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, 41, -1, -1, 44,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 33, 271,
+ 272, -1, -1, -1, -1, 40, 41, -1, 43, 44,
+ 45, 271, 272, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 59, 60, -1, 62, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 37, -1, -1, -1, -1, 42, 43, 44, 45,
- -1, 47, -1, -1, -1, -1, -1, 257, 93, -1,
- -1, 96, -1, 263, 60, -1, 62, -1, 268, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, 94, -1,
- 300, -1, -1, -1, -1, -1, 46, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 46,
- -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
- -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
- 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- -1, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, 343, -1, -1, 346, 347, 348, 349, 350, 351,
- 352, 353, 354, 355, 356, 46, -1, -1, 360, 361,
- 362, 363, 257, 258, 259, 260, -1, -1, 263, 264,
+ -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, -1, 93, -1,
+ -1, 96, -1, 335, 336, 337, 338, -1, -1, -1,
+ -1, -1, -1, -1, -1, 335, 336, 337, 338, -1,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, -1,
+ 125, -1, -1, 353, 354, 355, 356, 357, -1, -1,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, -1,
+ -1, -1, -1, 40, 257, 258, 259, 260, -1, 46,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 297, 298, 299, 300, -1, -1,
+ 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
+ 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
+ -1, -1, 335, 336, 337, 338, -1, -1, 341, 342,
+ -1, 344, -1, -1, 347, 348, 349, 350, 351, 352,
+ 353, 354, 355, 356, 357, -1, -1, -1, 361, 362,
+ 363, 364, 257, 258, 259, 260, -1, -1, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
-1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 299, 300, -1, -1, 303, 304,
305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 0, -1, 334,
- 335, 336, 337, -1, 300, 340, 341, 303, 343, -1,
- -1, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, -1, -1, -1, 360, 361, 362, 363, -1,
- 33, 271, 272, -1, -1, -1, -1, 40, 41, -1,
- -1, 44, -1, -1, 271, 272, -1, -1, -1, -1,
- 346, 347, 348, 349, 350, 351, 59, 60, -1, 62,
- -1, -1, -1, -1, -1, -1, 306, 307, 308, 309,
+ 325, 326, 327, 328, 329, 330, 331, 332, 0, -1,
+ 335, 336, 337, 338, -1, -1, 341, 342, -1, 344,
+ -1, -1, 347, 348, 349, 350, 351, 352, 353, 354,
+ 355, 356, 357, -1, -1, -1, 361, 362, 363, 364,
+ 257, 33, -1, -1, -1, -1, 263, -1, 40, 41,
+ -1, 268, 44, -1, 271, 272, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, 60, -1,
+ 62, -1, -1, -1, -1, -1, 306, 307, 308, 309,
310, 311, 312, 313, 314, 315, 316, -1, -1, 306,
307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 93, -1, -1, 96, 334, 335, 336, 337, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, 334, 335, 336,
- 337, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- -1, -1, 125, -1, -1, 352, 353, 354, 355, 356,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
- -1, -1, -1, -1, 40, 41, -1, -1, 44, -1,
+ -1, 93, 0, -1, 96, 335, 336, 337, 338, -1,
+ -1, -1, -1, -1, -1, -1, 0, -1, 335, 336,
+ 337, 338, -1, 353, 354, 355, 356, 357, -1, -1,
+ -1, -1, -1, 125, -1, -1, 353, 354, 355, 356,
+ 357, -1, -1, 41, -1, -1, 44, -1, -1, 33,
+ -1, 86, -1, -1, -1, -1, 40, 41, -1, -1,
+ 44, 59, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 59, 60, -1, 62, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
- -1, -1, -1, -1, -1, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, 334, 335, 336, 337, -1, -1, -1,
+ -1, -1, -1, -1, -1, 93, 131, 132, 133, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
+ 155, -1, -1, -1, -1, 37, -1, 125, -1, -1,
+ 42, 43, 44, 45, -1, 47, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, -1, -1, -1, 60, -1,
+ 62, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 196, -1, -1, -1, 257, 258, 259, 260, 204,
+ -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, 94, -1, -1, -1, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
+ -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, -1, -1, 335, 336, 337, 338, -1, -1, 341,
+ 342, -1, 344, -1, -1, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 264, 302, -1, 361,
+ 362, 363, 364, 257, 258, 259, 260, -1, -1, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, -1,
+ -1, 0, 290, -1, -1, -1, -1, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, -1, -1, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, -1, 369, 370, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 0,
+ 59, 335, 336, 337, 338, -1, -1, 341, 342, -1,
+ 344, -1, -1, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, -1, -1, -1, 361, 362, 363,
+ 364, -1, 33, -1, 93, -1, -1, 96, 300, 40,
+ 41, 303, -1, 44, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, 60,
+ -1, 62, -1, -1, -1, -1, 125, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 347, 348, 349, 350, 351,
+ 352, -1, 93, -1, -1, 96, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 33, -1, -1, -1, -1, -1, -1, 40, 41, -1,
+ -1, 44, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 59, 60, -1, 62,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 352, 353, 354, 355, 356, -1, -1, -1, 125,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 257, -1,
+ 93, -1, -1, 96, 263, -1, -1, -1, -1, 268,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 257, 258, 259, 260, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, 300, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
+ -1, -1, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+ -1, -1, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, -1, -1, -1, -1,
+ -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, -1, -1, 335, 336, 337, 338, -1, -1,
+ 341, 342, -1, 344, -1, -1, 347, 348, 349, 350,
+ 351, 352, 353, 354, 355, 356, 357, -1, -1, -1,
+ 361, 362, 363, 364, 257, 258, 259, 260, -1, -1,
263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
+ -1, -1, 0, -1, -1, -1, -1, -1, 281, 282,
283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
293, 294, 295, 296, 297, 298, 299, 300, -1, -1,
303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
313, 314, 315, 316, -1, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, -1,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- 343, -1, -1, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, -1, -1, -1, 360, 361, 362,
- 363, 257, 258, 259, 260, -1, -1, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, 300, -1, -1, 303, 304, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 0, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, 343, -1, -1,
- 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, 41, -1, -1,
- 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, 60, -1, 62, -1,
+ 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
+ 0, 59, 335, 336, 337, 338, -1, -1, 341, 342,
+ -1, 344, -1, -1, 347, 348, 349, 350, 351, 352,
+ 353, 354, 355, 356, 357, -1, -1, -1, 361, 362,
+ 363, 364, -1, 33, -1, 93, -1, -1, 96, -1,
+ 40, 41, -1, 43, 44, 45, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
+ -1, -1, 62, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 33, -1, -1, -1,
- -1, -1, -1, 40, 41, -1, 43, 44, 45, -1,
+ -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, 62, -1, -1, -1, -1,
+ -1, 33, -1, -1, -1, -1, -1, -1, 40, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
+ -1, 93, -1, -1, 96, 263, -1, -1, -1, -1,
+ 268, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
+ -1, -1, 300, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
+ 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
+ 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ -1, -1, -1, -1, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, -1, -1, 335, 336, 337, 338, -1,
+ -1, 341, 342, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 353, 354, 355, 356, 357, -1, -1,
+ -1, 361, 362, 363, 364, 257, 258, 259, 260, -1,
+ -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
+ -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 0, -1, 335, 336, 337, 338, -1, -1, 341,
+ 342, -1, 344, -1, -1, 347, 348, 349, 350, -1,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, 361,
+ 362, 363, 364, -1, 33, -1, -1, -1, -1, -1,
+ -1, 40, 41, -1, -1, 44, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, 300, -1, -1, 303,
- 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, -1, 343,
- -1, -1, 346, 347, 348, 349, 350, 351, 352, 353,
- 354, 355, 356, -1, -1, -1, 360, 361, 362, 363,
- 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, -1, -1, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 0, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- -1, -1, -1, 360, 361, 362, 363, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, 41, -1, -1, 44,
+ -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
+ -1, -1, 33, -1, -1, -1, -1, -1, -1, 40,
+ 41, -1, 43, 44, 45, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, 62, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
+ 259, 260, -1, -1, 263, 264, 265, 266, 267, 268,
+ 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
+ -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
+ 299, 300, -1, -1, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
+ -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, -1, -1, 335, 336, 337, 338,
+ -1, -1, 341, 342, -1, 344, -1, -1, 347, 348,
+ 349, 350, -1, -1, 353, 354, 355, 356, 357, -1,
+ -1, -1, 361, 362, 363, 364, 257, 258, 259, 260,
+ -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
+ -1, -1, -1, 304, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
+ 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 0, -1, 335, 336, 337, 338, -1, -1,
+ 341, 342, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 353, 354, 355, 356, 357, -1, -1, -1,
+ 361, 362, 363, 364, -1, 33, -1, -1, -1, -1,
-1, -1, 40, 41, -1, -1, 44, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1961,21 +2039,21 @@ static YYCONST short yycheck[] = { 24,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
+ 40, 41, -1, -1, 44, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 257, 258, 259, 260, -1, -1, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, -1, -1, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, -1, -1, 340, 341, -1, 343, -1,
- -1, 346, 347, 348, 349, -1, -1, 352, 353, 354,
- 355, 356, -1, -1, -1, 360, 361, 362, 363, 257,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
258, 259, 260, -1, -1, 263, 264, 265, 266, 267,
268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
-1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
@@ -1983,24 +2061,35 @@ static YYCONST short yycheck[] = { 24,
298, 299, 300, -1, -1, 303, 304, 305, 306, 307,
308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
-1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 0, -1, 334, 335, 336, 337,
- -1, -1, 340, 341, -1, 343, -1, -1, 346, 347,
- 348, 349, -1, -1, 352, 353, 354, 355, 356, -1,
- -1, -1, 360, 361, 362, 363, -1, 33, -1, -1,
- -1, -1, -1, -1, 40, 41, -1, 43, 44, 45,
+ 328, 329, 330, 331, 332, -1, -1, 335, 336, 337,
+ 338, -1, -1, 341, 342, -1, 344, -1, -1, 347,
+ 348, -1, -1, -1, -1, 353, 354, 355, 356, 357,
+ -1, -1, -1, 361, 362, 363, 364, 257, 258, 259,
+ 260, -1, -1, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, -1, -1, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
+ -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 0, -1, 335, 336, 337, 338, -1,
+ -1, 341, 342, -1, 344, -1, -1, -1, 348, -1,
+ -1, -1, -1, 353, 354, 355, 356, 357, -1, -1,
+ -1, 361, 362, 363, 364, -1, 33, -1, -1, -1,
+ -1, -1, -1, 40, 41, -1, 43, 44, 45, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, -1, 62, -1, -1, -1,
+ -1, -1, 59, -1, -1, 62, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
+ -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 33, -1, -1, -1, -1, -1,
-1, 40, 41, -1, -1, 44, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 59, -1, -1, 62, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
@@ -2009,177 +2098,130 @@ static YYCONST short yycheck[] = { 24,
-1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, -1, -1, 263, -1, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, -1, -1, -1, -1, 304, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, 257, 258,
- 259, 260, -1, -1, 263, 264, 265, 266, 267, 268,
+ 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
+ 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
+ -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 297, 298, 299, -1, -1, -1, -1, 304, 305, 306,
+ 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
+ -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, -1, -1, 335, 336,
+ 337, 338, -1, -1, 341, 342, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 353, 354, 355, 356,
+ 357, -1, -1, -1, 361, 362, 363, 364, 257, 258,
+ 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
-1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, -1, -1, 303, 304, 305, 306, 307, 308,
+ 299, -1, -1, -1, -1, 304, 305, 306, 307, 308,
309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
-1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 0, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, 343, -1, -1, 346, 347, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, 363, -1, 33, -1, -1, -1,
- -1, -1, -1, 40, 41, -1, -1, 44, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, -1, -1, -1, -1, -1,
+ 329, 330, 331, 332, 0, -1, 335, 336, 337, 338,
+ -1, -1, 341, 342, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 353, 354, 355, 356, 357, -1,
+ -1, -1, 361, 362, 363, 364, -1, 33, -1, -1,
+ -1, -1, -1, -1, 40, 41, -1, -1, 44, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
+ -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
+ 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
- 40, 41, -1, 43, 44, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, 62, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
+ -1, -1, 40, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, -1, -1, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, -1, -1, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, 343, -1, -1, -1,
- 347, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- -1, -1, -1, 360, 361, 362, 363, 257, 258, 259,
- 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- -1, -1, -1, -1, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 0, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- 360, 361, 362, 363, -1, 33, -1, -1, -1, -1,
- -1, -1, 40, 41, -1, -1, 44, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, 62, -1, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, -1, -1, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
+ -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, -1, -1, -1, -1, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, -1, -1, 335,
+ 336, 337, 338, -1, -1, 341, 342, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 353, 354, 355,
+ 356, 357, -1, -1, -1, 361, 362, 363, 364, 257,
+ 258, 259, 260, -1, -1, 263, -1, 265, 266, 267,
+ 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
+ -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 0, -1, -1, -1, -1, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
+ -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 33, -1, 335, 336, 337,
+ 338, -1, 40, 341, 342, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 353, 354, 355, 356, 357,
+ -1, 59, -1, 361, 362, 363, 364, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 33, -1, -1, -1, -1, -1, -1, 40,
- 41, -1, -1, 44, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
+ 40, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
+ -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
258, 259, 260, -1, -1, 263, -1, 265, 266, 267,
268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
-1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, -1, -1, -1, -1, 304, 305, 306, 307,
+ 298, 299, -1, -1, -1, -1, -1, 305, 306, 307,
308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
-1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, -1, -1, 334, 335, 336, 337,
- 40, -1, 340, 341, -1, -1, 46, -1, -1, -1,
- -1, -1, -1, -1, 352, 353, 354, 355, 356, -1,
- -1, -1, 360, 361, 362, 363, 257, 258, 259, 260,
- -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, -1, -1, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 0, -1, -1, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, -1, -1, 334, 335, 336, 337, -1, -1, 340,
- 341, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- -1, 352, 353, 354, 355, 356, 40, -1, -1, 360,
- 361, 362, 363, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, 257, -1, -1,
- -1, -1, -1, 263, -1, -1, 33, -1, 268, -1,
- -1, 271, 272, 40, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 306, 307, 308, 309,
+ 328, 329, 330, 331, 332, -1, -1, 335, 336, 337,
+ 338, -1, -1, 341, 342, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 353, 354, 355, 356, 357,
+ -1, -1, -1, 361, 362, 363, 364, 257, 258, 259,
+ 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
+ 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 0, -1, -1, -1, -1, 305, 306, 307, 308, 309,
310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
- -1, -1, -1, -1, 334, 335, 336, 337, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 352, 353, 354, 355, 356, -1, 125, -1,
+ -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 33, -1, 335, 336, 337, 338, -1,
+ 40, 341, 342, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 353, 354, 355, 356, 357, -1, 59,
+ -1, 361, 362, 363, 364, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
- -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, 91, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 123, 352, 353,
- 354, 355, 356, -1, -1, -1, 360, 361, 362, 363,
- 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, -1, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 0, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, 352, 353, 354, 355, 356,
- 40, -1, -1, 360, 361, 362, 363, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, 257, 258, -1, 260, 261, -1, -1, -1, -1,
- -1, -1, -1, 269, 270, 271, 272, 273, 274, 275,
- 276, 277, 278, 279, 280, -1, -1, -1, -1, -1,
-1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 332, -1, -1, -1,
- 33, -1, 338, 339, -1, -1, 342, 40, 344, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 357, -1, 359, -1, -1, 59, 363, 364, -1,
+ -1, 33, -1, -1, -1, -1, -1, -1, 40, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
@@ -2187,84 +2229,40 @@ static YYCONST short yycheck[] = { 24,
-1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
-1, -1, -1, -1, -1, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, 91,
+ 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
-1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 123, 352, 353, 354, 355, 356, -1, -1, -1,
- 360, 361, 362, 363, 257, 258, 259, 260, -1, -1,
- 263, -1, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, -1, -1, -1,
- -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 0, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, -1,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, 352,
- 353, 354, 355, 356, 40, -1, -1, 360, 361, 362,
- 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, 257, 258, -1, 260, 261,
- -1, -1, -1, -1, -1, -1, -1, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 332, -1, -1, -1, 33, -1, 338, 339, -1, -1,
- 342, 40, 344, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 357, -1, 359, -1, -1,
- 59, 363, 364, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, -1, -1, 263, -1, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, 257, 258,
- 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 0, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, 352, 353, 354, 355, 356, 40, -1,
- -1, 360, 361, 362, 363, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 330, 331, 332, -1, -1, 335, 336, 337, 338, -1,
+ -1, 341, 342, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 353, 354, 355, 356, 357, -1, -1,
+ -1, 361, 362, 363, 364, 257, 258, 259, 260, -1,
+ -1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 0, -1,
+ -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 33, -1, 335, 336, 337, 338, -1, 40, 341,
+ 342, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 353, 354, 355, 356, 357, -1, 59, -1, 361,
+ 362, 363, 364, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
+ -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 257, 258, 259, 260, -1,
-1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
@@ -2274,124 +2272,160 @@ static YYCONST short yycheck[] = { 24,
-1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- -1, -1, 334, 335, 336, 337, -1, -1, 340, 341,
+ 332, -1, -1, 335, 336, 337, 338, -1, -1, 341,
+ 342, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, 361,
+ 362, 363, 364, 257, 258, 259, 260, -1, -1, 263,
+ -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
+ -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 0, -1, -1, -1,
+ -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 33,
+ -1, 335, 336, 337, 338, -1, 40, 341, 342, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353,
+ 354, 355, 356, 357, -1, 59, -1, 361, 362, 363,
+ 364, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, -1, -1, -1, 360, 361,
- 362, 363, 257, 258, 259, 260, -1, -1, 263, -1,
- 265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, -1, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 0, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, -1, -1, 340, 341, -1, -1, -1,
- -1, -1, -1, -1, -1, 33, -1, 352, 353, 354,
- 355, 356, 40, -1, -1, 360, 361, 362, 363, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
+ -1, -1, -1, -1, 40, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
+ 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 33, -1, -1, -1, -1, -1, -1, 40,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
+ -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
+ -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, -1, -1, -1, -1,
+ -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, -1,
+ -1, 335, 336, 337, 338, -1, -1, 341, 342, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353,
+ 354, 355, 356, 357, -1, -1, -1, 361, 362, 363,
+ 364, 257, 258, 259, 260, -1, -1, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
+ -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 0, -1, -1, -1, -1, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 33, -1, 335,
+ 336, 337, 338, -1, 40, 341, 342, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 353, 354, 355,
+ 356, 357, -1, 59, -1, 361, 362, 363, 364, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
+ 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
+ -1, -1, 40, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
+ -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, -1, -1, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
+ -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, -1, -1, -1, -1, -1, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, -1, -1, 335,
+ 336, 337, 338, -1, -1, 341, 342, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 353, 354, 355,
+ 356, 357, -1, -1, -1, 361, 362, 363, 364, 257,
258, 259, 260, -1, -1, 263, -1, 265, 266, 267,
268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
-1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, -1, -1, -1, -1, -1, 305, 306, 307,
+ 298, 299, 0, -1, -1, -1, -1, 305, 306, 307,
308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
-1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, -1, -1, 334, 335, 336, 337,
- -1, -1, 340, 341, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 352, 353, 354, 355, 356, -1,
- -1, -1, 360, 361, 362, 363, 257, 258, 259, 260,
- -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, -1, -1, -1, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 0, -1, -1, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, -1, -1, 334, 335, 336, 337, -1, -1, 340,
- 341, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- -1, 352, 353, 354, 355, 356, 40, -1, -1, 360,
- 361, 362, 363, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
+ 328, 329, 330, 331, 332, 33, -1, 335, 336, 337,
+ 338, -1, 40, 341, 342, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 353, 354, 355, 356, 357,
+ -1, 59, -1, 361, 362, 363, 364, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 33, -1, -1, -1,
- -1, -1, -1, 40, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 93, -1, -1, 96, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, -1, -1, -1, -1, -1,
+ 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
+ 40, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
+ -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, 263,
- -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, -1, -1, 340, 341, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 352, 353,
- 354, 355, 356, -1, -1, -1, 360, 361, 362, 363,
- 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
- 267, 268, 269, 270, 271, 272, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, -1, -1, -1, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 0, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, -1, -1, 340, 341, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, 352, 353, 354, 355, 356,
- 40, -1, -1, 360, 361, 362, 363, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
+ -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
+ 258, 259, 260, -1, -1, 263, -1, 265, 266, 267,
+ 268, 269, 270, 271, 272, -1, -1, -1, -1, -1,
+ -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, -1, -1, -1, -1, -1, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
+ -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, -1, -1, 335, 336, 337,
+ 338, -1, -1, 341, 342, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 353, 354, 355, 356, 357,
+ -1, -1, -1, 361, 362, 363, 364, 257, 258, 259,
+ 260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
+ 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 0, -1, -1, -1, -1, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
+ -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 33, -1, 335, 336, 337, 338, -1,
+ 40, 341, 342, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 353, 354, 355, 356, 357, -1, 59,
+ -1, 361, 362, 363, 364, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 33, -1, -1, -1, -1, -1, -1, 40, -1, -1,
+ -1, 33, -1, -1, -1, -1, -1, -1, 40, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, -1, -1, -1, -1, -1, -1,
+ -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
260, -1, -1, 263, -1, 265, 266, 267, 268, 269,
@@ -2401,82 +2435,38 @@ static YYCONST short yycheck[] = { 24,
-1, -1, -1, -1, -1, 305, 306, 307, 308, 309,
310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
-1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 352, 353, 354, 355, 356, -1, -1, -1,
- 360, 361, 362, 363, 257, 258, 259, 260, -1, -1,
- 263, -1, 265, 266, 267, 268, 269, 270, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, -1, -1, -1,
- -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 0, -1, -1, -1, -1, 322,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, -1,
- -1, 334, 335, 336, 337, -1, -1, 340, 341, -1,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, 352,
- 353, 354, 355, 356, 40, -1, -1, 360, 361, 362,
- 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, -1, -1, -1, -1,
- -1, 40, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
+ 330, 331, 332, -1, -1, 335, 336, 337, 338, -1,
+ -1, 341, 342, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 353, 354, 355, 356, 357, -1, -1,
+ -1, 361, 362, 363, 364, 257, 258, 259, 260, -1,
+ -1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 0, -1,
+ -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 33, -1, 335, 336, 337, 338, -1, 40, 341,
+ 342, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 353, 354, 355, 356, 357, -1, 59, -1, 361,
+ 362, 363, 364, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, -1, -1, 263, -1, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, 340, 341, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, 257, 258,
- 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 0, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, 352, 353, 354, 355, 356, 40, -1,
- -1, 360, 361, 362, 363, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
+ -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
+ -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
- -1, -1, -1, 37, -1, 0, -1, 41, 42, 43,
- 44, 45, -1, 47, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, 59, 60, -1, 62, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, 41, -1, 43, 44,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, -1, -1, 59, -1, -1, 62, -1, -1,
+ -1, -1, -1, -1, -1, 59, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 257, 258, 259, 260, -1,
-1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
@@ -2486,197 +2476,205 @@ static YYCONST short yycheck[] = { 24,
-1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 264, -1, 334, 335, 336, 337, -1, -1, 340, 341,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 352, 353, 354, 355, 356, -1, 290, -1, 360, 361,
- 362, 363, 257, 258, 259, 260, 300, -1, 263, 303,
- 265, 266, 267, 268, 269, 270, 271, 272, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, -1, -1, -1, -1, 304,
- 305, 0, 346, 347, 348, 349, 350, 351, -1, -1,
- -1, -1, 317, 318, 319, 320, 321, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, -1,
- -1, -1, -1, -1, 33, 340, 341, -1, -1, -1,
- -1, 40, 41, -1, 0, 44, 45, -1, -1, -1,
- -1, -1, -1, -1, -1, 360, 361, 362, 363, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
- -1, -1, -1, -1, 40, 41, -1, -1, 44, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 125, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, -1, -1, -1, 41,
- -1, 40, 44, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 93, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, -1, 125, -1, -1, 125, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 257, 258, 259, 260, -1, 305, 263, -1, -1,
- -1, -1, 268, -1, -1, 271, 272, -1, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, -1, -1, -1, -1, -1,
- -1, 340, 341, 0, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 360, 361, 362, 363, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 33, -1, 334, 335,
- 336, 337, -1, 40, -1, -1, -1, -1, -1, -1,
- 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
- 356, -1, 59, -1, -1, -1, -1, 363, 257, 258,
- 259, 260, 264, -1, 263, -1, -1, -1, -1, 268,
- -1, -1, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, 290, 96,
- -1, -1, 0, -1, -1, -1, -1, -1, 300, -1,
- -1, 303, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 125, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
- -1, -1, -1, -1, -1, 347, -1, -1, -1, -1,
- -1, 59, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, -1, -1, -1, 363, -1, -1, -1, -1, -1,
+ 332, -1, -1, 335, 336, 337, 338, -1, -1, 341,
+ 342, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, 361,
+ 362, 363, 364, 257, 258, 259, 260, -1, -1, 263,
+ -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
+ -1, -1, -1, -1, -1, -1, -1, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, -1, -1, -1, -1,
+ -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 0,
+ -1, 335, 336, 337, 338, -1, -1, 341, 342, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353,
+ 354, 355, 356, 357, -1, -1, -1, 361, 362, 363,
+ 364, -1, 33, -1, -1, -1, -1, -1, -1, 40,
+ 41, -1, 43, 44, 45, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, 62, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 93, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
+ -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
+ -1, -1, -1, -1, 125, 40, 41, -1, 0, 44,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 59, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 33, -1, -1, -1, -1, -1, -1, 40, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, 93, -1,
+ -1, 96, -1, -1, -1, -1, -1, 59, 60, -1,
+ 62, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, -1, -1, 263, -1, -1, 59,
- -1, 268, -1, -1, 271, 272, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, 257, 258, 259, 260,
+ -1, -1, 263, -1, 265, 266, 267, 268, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 0,
+ -1, -1, -1, 304, 305, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 317, 318, 319, 320,
+ 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 33, -1, -1, -1, -1, -1, -1, 40,
+ 341, 342, 257, 258, 259, 260, -1, -1, 263, -1,
+ 265, 266, 267, 268, 269, 270, -1, -1, 59, -1,
+ 361, 362, 363, 364, -1, -1, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 257, 258, 259, 260, -1,
+ 305, 263, 93, -1, -1, 96, 268, -1, -1, 271,
+ 272, -1, -1, -1, -1, -1, -1, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, -1, -1,
+ -1, -1, -1, -1, 125, -1, 341, 342, 0, -1,
+ -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, 361, 362, 363, 364,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 33, -1, 335, 336, 337, 338, -1, 40, -1,
+ -1, -1, -1, -1, -1, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, -1, 59, -1, -1,
+ -1, -1, 364, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 0, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 125, -1, 334, 335, 336,
- 337, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- 0, -1, 260, -1, -1, -1, 363, 265, 266, 267,
- -1, 269, 270, 271, 272, -1, -1, -1, -1, 59,
- -1, -1, -1, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, -1, -1, -1, 59,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 340, 341, -1, 125, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, -1, -1, -1, 0,
- -1, -1, 360, 361, 362, 363, -1, -1, -1, -1,
- 260, -1, -1, -1, -1, 265, 266, 267, -1, 269,
- 270, 271, 272, -1, -1, 125, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 300, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, -1, -1, 125, -1, -1, 257, 258, 259, 260,
+ -1, -1, 263, -1, -1, -1, -1, 268, -1, -1,
+ 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, -1, -1, -1, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, -1, -1, -1, -1,
+ -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 93, -1, 335, 336, 337, 338, -1, 59,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 353, 354, 355, 356, 357, -1, -1, -1,
+ -1, -1, -1, 364, 125, -1, -1, -1, 0, -1,
+ -1, -1, -1, 93, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, -1,
+ -1, 263, -1, -1, -1, -1, 268, -1, -1, 271,
+ 272, -1, -1, -1, -1, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
+ -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 93, -1, 335, 336, 337, 338, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 340, 341, 93, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
- 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
- 260, -1, -1, -1, 125, 265, 266, 267, -1, 269,
- 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, 0,
+ -1, -1, 364, 125, -1, -1, -1, -1, -1, 260,
+ -1, -1, -1, -1, 265, 266, 267, -1, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
260, -1, -1, -1, -1, 265, 266, 267, 59, 269,
270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
-1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 340, 341, 93, -1, -1, -1, -1, -1, 0, -1,
+ 341, 342, 93, -1, -1, -1, -1, -1, -1, 0,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
+ 361, 362, 363, 364, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 125, -1, -1, -1, -1, -1,
- 340, 341, -1, -1, -1, -1, -1, -1, 0, -1,
+ -1, 341, 342, -1, -1, -1, -1, -1, 260, -1,
+ -1, -1, -1, 265, 266, 267, -1, 269, 270, 271,
+ 272, 361, 362, 363, 364, -1, -1, -1, 59, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, -1,
+ -1, -1, -1, -1, 0, -1, 0, -1, -1, -1,
+ -1, -1, 93, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 341,
+ 342, -1, -1, -1, 125, -1, -1, -1, -1, 43,
+ -1, 45, 46, -1, -1, -1, -1, -1, -1, 361,
+ 362, 363, 364, 59, -1, 59, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 260,
- 360, 361, 362, 363, 265, 266, 267, 59, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 265, 266, 267, -1, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, 93, -1, 93,
281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
- -1, 93, -1, -1, -1, -1, -1, 59, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 0, 125,
+ -1, 125, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, -1, -1, 340,
- 341, 93, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 360,
- 361, 362, 363, -1, -1, -1, -1, -1, -1, 260,
- -1, -1, -1, 125, 265, 266, 267, -1, 269, 270,
+ 341, 342, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 260,
+ 361, 362, 363, 364, 265, 266, 267, 59, 269, 270,
271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
291, 292, 293, 294, 295, 296, 297, 298, 299, -1,
+ -1, 93, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
+ 341, 342, -1, -1, 260, -1, -1, -1, -1, 265,
+ 266, 267, -1, 269, 270, 271, 272, 271, 272, -1,
+ 361, 362, 363, 364, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 59, -1, -1, -1, -1, -1,
+ -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, 318, 319, 320, 321, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
+ -1, 335, 336, 337, 338, 341, 342, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353,
+ 354, 355, 356, 357, -1, 361, 362, 363, 364, -1,
+ 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 260, -1,
+ -1, -1, -1, 265, 266, 267, -1, 269, 270, 271,
+ 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 0, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 340,
- 341, -1, 59, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 260, 360,
- 361, 362, 363, 265, 266, 267, -1, 269, 270, 271,
- 272, -1, -1, -1, 91, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 260, -1,
- -1, -1, -1, 265, 266, 267, 123, 269, 270, 271,
- 272, 0, -1, -1, -1, -1, -1, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 340, 341,
- -1, -1, -1, -1, 33, -1, -1, -1, -1, -1,
- -1, 40, -1, -1, -1, -1, -1, -1, 360, 361,
- 362, 363, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, 0, -1, -1, -1, -1, -1, 340, 341,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 360, 361,
- 362, 363, -1, -1, 93, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, -1, 43, -1, 45, 46, -1,
+ -1, 33, -1, -1, -1, -1, -1, -1, 40, 341,
+ 342, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -1, 361,
+ 362, 363, 364, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 260, -1, -1, -1, -1,
+ 265, 266, 267, -1, 269, 270, 271, 272, -1, -1,
+ -1, 93, -1, -1, 96, -1, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 33, -1,
+ -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, 341, 342, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, 125, -1, -1, -1,
- 257, 258, -1, 260, 261, -1, -1, -1, -1, -1,
- -1, -1, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
- -1, -1, 40, -1, -1, -1, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
+ -1, -1, -1, -1, -1, -1, 361, 362, 363, 364,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 332, -1, -1, -1, -1,
- -1, 338, 339, -1, -1, 342, -1, 344, -1, -1,
- -1, -1, -1, 91, -1, -1, -1, -1, 96, -1,
- 357, -1, 359, -1, -1, -1, 363, 364, -1, -1,
+ -1, -1, -1, -1, -1, -1, 91, -1, -1, -1,
+ -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 123, -1, -1, 257, 258,
- 259, -1, -1, -1, 263, -1, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 271, 272, 334, 335, 336, 337, -1,
- -1, 340, 341, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 360, 361, 362, -1, -1, -1, -1, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
- 318, 319, 320, 321, -1, -1, -1, -1, -1, 257,
- 258, 259, 260, 261, -1, 263, 334, 335, 336, 337,
- 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, -1, 352, 353, 354, 355, 356, 33,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
- -1, 45, -1, -1, -1, -1, -1, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
- -1, -1, -1, -1, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 332, -1, 334, 335, 336, 337,
- 338, 339, -1, -1, 342, -1, 344, 91, -1, -1,
- -1, -1, 96, -1, 352, 353, 354, 355, 356, 357,
- -1, 359, -1, -1, -1, 363, 364, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 123,
+ -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, -1, -1,
+ -1, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, -1, -1, -1, -1, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, -1, -1,
+ -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, -1, -1, 335, 336, 337, 338, -1, -1, 341,
+ 342, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, 361,
+ 362, 363, 257, 258, 259, 260, 261, -1, 263, -1,
+ -1, -1, -1, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, -1, -1, 33, -1,
+ -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, -1,
+ 335, 336, 337, 338, 339, 340, 91, -1, 343, -1,
+ 345, 96, -1, -1, -1, -1, -1, -1, 353, 354,
+ 355, 356, 357, 358, -1, 360, -1, -1, -1, 364,
+ 365, -1, -1, -1, -1, -1, -1, -1, 123, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
-1, -1, -1, -1, 40, -1, -1, -1, -1, 45,
@@ -2690,151 +2688,183 @@ static YYCONST short yycheck[] = { 24,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, 261, -1, 263,
- -1, -1, -1, -1, 268, 269, 270, 271, 272, 273,
- 274, 275, 276, 277, 278, 279, 280, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, 41, -1, -1, -1,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, -1,
- 334, 335, 336, 337, 338, 339, -1, -1, 342, -1,
- 344, 96, -1, -1, -1, -1, -1, -1, 352, 353,
- 354, 355, 356, 357, -1, 359, -1, -1, -1, 363,
- 364, 257, 258, 259, 260, -1, -1, 263, -1, 265,
+ -1, -1, 257, 258, 259, 260, 261, -1, 263, -1,
+ -1, -1, -1, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 33, -1, -1, -1,
+ -1, -1, -1, 40, 41, -1, -1, -1, 45, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, -1,
+ 335, 336, 337, 338, 339, 340, -1, -1, 343, 96,
+ 345, -1, -1, -1, -1, -1, -1, -1, 353, 354,
+ 355, 356, 357, 358, -1, 360, -1, -1, -1, 364,
+ 365, 257, 258, 259, 260, -1, -1, 263, -1, 265,
266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
-1, -1, -1, -1, -1, 281, 282, 283, 284, 285,
286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
296, 297, 298, 299, -1, -1, -1, -1, -1, 305,
306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 33, -1, 334, 335,
- 336, 337, -1, 40, 340, 341, -1, -1, 45, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, -1, -1, -1, 360, 361, 362, 363, -1, -1,
+ 326, 327, 328, 329, 330, 331, 332, -1, -1, 335,
+ 336, 337, 338, -1, 33, 341, 342, -1, -1, -1,
+ -1, 40, -1, -1, -1, -1, 45, 353, 354, 355,
+ 356, 357, -1, -1, -1, 361, 362, 363, 364, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 96,
- -1, -1, 257, 258, 259, 260, -1, -1, 263, -1,
- -1, -1, -1, 268, -1, -1, 271, 272, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 257, 258, 259, 260, -1, -1, 263, 96, -1, -1,
+ -1, 268, -1, -1, 271, 272, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 33, -1, 334,
- 335, 336, 337, -1, 40, -1, -1, -1, -1, 45,
- -1, -1, -1, -1, -1, -1, -1, 352, 353, 354,
- 355, 356, -1, -1, -1, -1, -1, -1, 363, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 305, 306,
+ 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
+ -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, 33, -1, 335, 336,
+ 337, 338, -1, 40, -1, -1, -1, -1, 45, -1,
+ -1, -1, -1, -1, -1, -1, 353, 354, 355, 356,
+ 357, -1, -1, -1, -1, -1, -1, 364, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 96,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
+ 259, 260, -1, -1, 263, -1, -1, -1, -1, 268,
+ -1, -1, 271, 272, -1, -1, -1, 33, -1, -1,
+ -1, -1, -1, -1, 40, -1, -1, -1, -1, 45,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
+ -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, -1, -1, 335, 336, 337, 338,
96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 353, 354, 355, 356, 357, -1,
+ -1, -1, -1, -1, -1, 364, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
+ 257, 258, 259, 260, 40, -1, 263, -1, -1, 45,
+ -1, 268, -1, -1, 271, 272, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, -1, -1, 263, -1, -1, -1,
- -1, 268, -1, -1, 271, 272, -1, -1, 33, -1,
- -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 305, 306,
307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, -1, -1, -1, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, -1, -1, 334, 335, 336,
- 337, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 352, 353, 354, 355, 356,
- -1, -1, -1, -1, -1, -1, 363, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, -1, -1, 263, -1, -1,
- -1, -1, 268, -1, -1, 271, 272, -1, -1, -1,
+ 96, -1, -1, -1, -1, 322, 323, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, -1, -1, 335, 336,
+ 337, 338, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 353, 354, 355, 356,
+ 357, -1, -1, -1, -1, -1, -1, 364, -1, 33,
+ -1, 257, 258, 259, 260, -1, 40, 263, 42, -1,
+ -1, 45, 268, -1, -1, 271, 272, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, 305,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 305,
306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, 33, -1, -1, -1, -1, -1, -1, 40,
- -1, 42, -1, -1, 45, -1, 352, 353, 354, 355,
- 356, -1, 257, 258, 259, 260, -1, 363, 263, -1,
- -1, -1, -1, 268, -1, -1, 271, 272, -1, -1,
+ 316, -1, 96, -1, -1, -1, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, -1, -1, 335,
+ 336, 337, 338, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 353, 354, 355,
+ 356, 357, -1, -1, -1, -1, -1, -1, 364, 33,
+ -1, 257, 258, 259, 260, -1, 40, 263, -1, -1,
+ -1, 45, 268, -1, -1, 271, 272, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 96, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, 33, -1, -1, -1, -1, -1, -1,
- 40, -1, -1, -1, -1, 45, -1, 352, 353, 354,
- 355, 356, -1, 257, 258, 259, 260, -1, 363, 263,
- -1, -1, -1, -1, 268, -1, -1, 271, 272, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, 96, -1, -1, -1, 322, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, -1, -1, 335,
+ 336, 337, 338, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 353, 354, 355,
+ 356, 357, -1, -1, -1, -1, -1, -1, 364, -1,
+ 33, -1, -1, 257, 258, 259, -1, 40, -1, 263,
+ -1, -1, 45, -1, 268, -1, -1, 271, 272, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 96, -1, -1, -1,
-1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, -1, -1, -1, -1, -1, 322, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, -1, -1,
- 334, 335, 336, 337, 33, -1, -1, -1, -1, -1,
- -1, 40, -1, -1, -1, -1, 45, -1, 352, 353,
- 354, 355, 356, -1, -1, -1, 257, 258, 259, 363,
- -1, -1, 263, -1, -1, -1, -1, 268, -1, -1,
- 271, 272, -1, -1, -1, -1, -1, -1, -1, -1,
+ 314, 315, 316, 96, -1, -1, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, -1,
+ -1, 335, 336, 337, 338, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353,
+ 354, 355, 356, 357, -1, -1, -1, -1, -1, -1,
+ 33, -1, -1, 257, 258, 259, -1, 40, -1, 263,
+ -1, -1, 45, -1, 268, -1, -1, 271, 272, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 96, -1, -1,
- -1, -1, -1, -1, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, -1, -1,
- -1, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, -1, -1, 334, 335, 336, 337, 33, -1, -1,
- -1, -1, -1, -1, 40, -1, -1, -1, -1, 45,
- -1, 352, 353, 354, 355, 356, -1, 257, 258, 259,
- -1, -1, -1, 263, -1, -1, -1, -1, 268, -1,
- -1, 271, 272, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 96, -1, -1, -1, -1, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, -1, -1, 334, 335, 336, 337, 33, -1,
- -1, -1, -1, -1, -1, 40, -1, -1, -1, -1,
- 45, -1, 352, 353, 354, 355, 356, -1, 257, 258,
- 259, -1, -1, -1, 263, -1, -1, -1, -1, 268,
- -1, -1, 271, 272, -1, -1, -1, -1, -1, -1,
+ -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 96, -1, -1, -1, -1, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, -1,
+ -1, 335, 336, 337, 338, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353,
+ 354, 355, 356, 357, -1, -1, -1, -1, -1, -1,
+ -1, 33, -1, -1, 257, 258, 259, -1, 40, -1,
+ 263, -1, -1, 45, -1, 268, -1, -1, 271, 272,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 96, -1, -1, -1, -1, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, -1, -1, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, -1, -1, 334, 335, 336, 337, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 352, 353, 354, 355, 356, -1, -1,
- -1, 257, 258, 259, -1, -1, -1, 263, -1, -1,
- -1, -1, 268, -1, -1, 271, 272, -1, -1, -1,
+ -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, 316, 96, -1, -1, -1, -1, 322,
+ 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
+ -1, -1, 335, 336, 337, 338, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 353, 354, 355, 356, 357, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 257, 258, 259, -1, -1, -1,
+ 263, -1, -1, -1, -1, 268, -1, -1, 271, 272,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, -1, -1, 334, 335,
- 336, 337, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 352, 353, 354, 355,
- 356, -1, 257, 258, 259, -1, -1, -1, 263, -1,
- -1, -1, -1, 268, -1, -1, -1, -1, -1, -1,
+ -1, -1, 59, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 305, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, 316, 91, -1, -1, -1, -1, 322,
+ 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
+ -1, -1, 335, 336, 337, 338, -1, -1, -1, -1,
+ -1, -1, 91, -1, -1, -1, 123, -1, -1, -1,
+ 353, 354, 355, 356, 357, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, -1, -1,
+ -1, 263, -1, -1, 123, -1, 268, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, -1, -1, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, -1, -1, 334,
- 335, 336, 337, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 352, 353, 354,
- 355, 356,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, -1, -1,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, -1, -1, 335, 336, 337, 338, -1, -1, -1,
+ -1, -1, -1, 91, -1, -1, -1, -1, -1, -1,
+ -1, 353, 354, 355, 356, 357, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 257, 258, -1, 260, 261, 123, -1, -1, -1, -1,
+ -1, -1, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, -1, -1, -1, -1, 257, 258,
+ -1, 260, 261, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 333, -1, -1, -1,
+ -1, -1, 339, 340, -1, -1, 343, -1, 345, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 358, -1, 360, 333, -1, -1, 364, 365, -1,
+ 339, 340, -1, -1, 343, -1, 345, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 358,
+ -1, 360, -1, -1, -1, 364, 365, -1, -1, 257,
+ 258, -1, 260, 261, -1, -1, -1, -1, -1, -1,
+ -1, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 333, -1, -1, -1, -1,
+ -1, 339, 340, -1, -1, 343, -1, 345, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 358, -1, 360, -1, -1, -1, 364, 365,
};
#define YYFINAL 2
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
-#define YYMAXTOKEN 366
+#define YYMAXTOKEN 367
#if YYDEBUG
-static YYCONST char *YYCONST yyname[] = {
+char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
"'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,
0,0,0,0,0,"':'","';'","'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -2851,12 +2881,13 @@ static YYCONST char *YYCONST yyname[] = {
"AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S","DOT_NE","DOT_SE","DOT_NW",
"DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X","DOT_Y","DOT_HT","DOT_WID",
"DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT","K_MAX","K_MIN","INT","RAND",
-"COPY","THRU","TOP","BOTTOM","UPPER","LOWER","SH","PRINT","CW","CCW","FOR","DO",
-"IF","ELSE","ANDAND","OROR","NOTEQUAL","EQUALEQUAL","LESSEQUAL","GREATEREQUAL",
-"LEFT_CORNER","RIGHT_CORNER","CENTER","END","START","RESET","UNTIL","PLOT",
-"THICKNESS","FILL","ALIGNED","SPRINTF","COMMAND","DEFINE","UNDEF",
+"SRAND","COPY","THRU","TOP","BOTTOM","UPPER","LOWER","SH","PRINT","CW","CCW",
+"FOR","DO","IF","ELSE","ANDAND","OROR","NOTEQUAL","EQUALEQUAL","LESSEQUAL",
+"GREATEREQUAL","LEFT_CORNER","RIGHT_CORNER","CENTER","END","START","RESET",
+"UNTIL","PLOT","THICKNESS","FILL","ALIGNED","SPRINTF","COMMAND","DEFINE",
+"UNDEF",
};
-static YYCONST char *YYCONST yyrule[] = {
+char *yyrule[] = {
"$accept : top",
"top : optional_separator",
"top : element_list",
@@ -3086,6 +3117,7 @@ static YYCONST char *YYCONST yyrule[] = {
"expr : INT '(' any_expr ')'",
"expr : RAND '(' any_expr ')'",
"expr : RAND '(' ')'",
+"expr : SRAND '(' any_expr ')'",
"expr : expr '<' expr",
"expr : expr LESSEQUAL expr",
"expr : expr '>' expr",
@@ -3097,13 +3129,6 @@ static YYCONST char *YYCONST yyrule[] = {
"expr : '!' expr",
};
#endif
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#ifndef YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
@@ -3111,24 +3136,22 @@ static YYCONST char *YYCONST yyrule[] = {
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
#endif
#endif
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
-static short *yyss;
-static YYSTYPE *yyvs;
-static int yystacksize;
-static int yygrow ();
-static YYPTR yymalloc YYPARAMS((unsigned));
-static YYPTR yyrealloc YYPARAMS((YYPTR, unsigned));
-#define yyfree(x) free(x)
-#line 1529 "pic.y"
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#define yystacksize YYSTACKSIZE
+#line 1537 "/home/cjk/groff/pic/pic.y"
/* bison defines const to be empty unless __STDC__ is defined, which it
isn't under cfront */
@@ -3396,28 +3419,22 @@ char *do_sprintf(const char *form, const double *v, int nv)
result += '\0';
return strsave(result.contents());
}
-#line 3397 "y.tab.c"
+#line 3419 "y.tab.c"
#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
-
-#if YYDEBUG
-#ifdef __cplusplus
-extern "C" char *getenv();
-#else
-extern char *getenv();
-#endif
-#endif
-
int
+#if defined(__STDC__)
+yyparse(void)
+#else
yyparse()
+#endif
{
register int yym, yyn, yystate;
- register YYSTYPE *yyvsp;
- register short *yyssp;
- short *yysse;
#if YYDEBUG
- register YYCONST char *yys;
+ register char *yys;
+ extern char *getenv();
if (yys = getenv("YYDEBUG"))
{
@@ -3431,26 +3448,12 @@ yyparse()
yyerrflag = 0;
yychar = (-1);
- if (yyss == 0)
- {
- yyss = (short *) yymalloc (YYINITDEPTH * sizeof (short));
- if (yyss == 0)
- goto yyabort;
- yyvs = (YYSTYPE *) yymalloc (YYINITDEPTH * sizeof (YYSTYPE));
- if (yyvs == 0)
- {
- yyfree (yyss);
- goto yyabort;
- }
- yystacksize = YYINITDEPTH;
- }
- yysse = yyss + yystacksize - 1;
yyssp = yyss;
yyvsp = yyvs;
*yyssp = yystate = 0;
yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
@@ -3460,8 +3463,8 @@ yyloop:
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
}
#endif
}
@@ -3470,18 +3473,12 @@ yyloop:
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
#endif
- if (yyssp >= yysse)
+ if (yyssp >= yyss + yystacksize - 1)
{
- /* FIXME: Rework so there's only one of these. */
- int depth = yyssp - yyss;
- if (yygrow () != 0)
- goto yyoverflow;
- yysse = yyss + yystacksize - 1;
- yyssp = yyss + depth;
- yyvsp = yyvs + depth;
+ goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
@@ -3496,10 +3493,6 @@ yyloop:
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
@@ -3517,17 +3510,12 @@ yyinrecovery:
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
#endif
- if (yyssp >= yysse)
+ if (yyssp >= yyss + yystacksize - 1)
{
- int depth = yyssp - yyss;
- if (yygrow () != 0)
- goto yyoverflow;
- yysse = yyss + yystacksize - 1;
- yyssp = yyss + depth;
- yyvsp = yyvs + depth;
+ goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
@@ -3537,8 +3525,8 @@ yyinrecovery:
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
--yyssp;
@@ -3555,8 +3543,8 @@ yyinrecovery:
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
}
#endif
yychar = (-1);
@@ -3565,41 +3553,41 @@ yyinrecovery:
yyreduce:
#if YYDEBUG
if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
yym = yylen[yyn];
yyval = yyvsp[1-yym];
switch (yyn)
{
case 2:
-#line 272 "pic.y"
+#line 278 "/home/cjk/groff/pic/pic.y"
{
if (olist.head)
print_picture(olist.head);
}
break;
case 3:
-#line 281 "pic.y"
+#line 287 "/home/cjk/groff/pic/pic.y"
{ yyval.pl = yyvsp[-1].pl; }
break;
case 4:
-#line 286 "pic.y"
+#line 292 "/home/cjk/groff/pic/pic.y"
{ yyval.pl = yyvsp[0].pl; }
break;
case 5:
-#line 288 "pic.y"
+#line 294 "/home/cjk/groff/pic/pic.y"
{ yyval.pl = yyvsp[-2].pl; }
break;
case 10:
-#line 303 "pic.y"
+#line 309 "/home/cjk/groff/pic/pic.y"
{
define_variable(yyvsp[-2].str, yyvsp[0].x);
a_delete yyvsp[-2].str;
}
break;
case 11:
-#line 308 "pic.y"
+#line 314 "/home/cjk/groff/pic/pic.y"
{
place *p = lookup_label(yyvsp[-3].str);
if (!p) {
@@ -3613,37 +3601,37 @@ case 11:
}
break;
case 12:
-#line 320 "pic.y"
+#line 326 "/home/cjk/groff/pic/pic.y"
{ current_direction = UP_DIRECTION; }
break;
case 13:
-#line 322 "pic.y"
+#line 328 "/home/cjk/groff/pic/pic.y"
{ current_direction = DOWN_DIRECTION; }
break;
case 14:
-#line 324 "pic.y"
+#line 330 "/home/cjk/groff/pic/pic.y"
{ current_direction = LEFT_DIRECTION; }
break;
case 15:
-#line 326 "pic.y"
+#line 332 "/home/cjk/groff/pic/pic.y"
{ current_direction = RIGHT_DIRECTION; }
break;
case 16:
-#line 328 "pic.y"
+#line 334 "/home/cjk/groff/pic/pic.y"
{
olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename,
yyvsp[0].lstr.lineno));
}
break;
case 17:
-#line 333 "pic.y"
+#line 339 "/home/cjk/groff/pic/pic.y"
{
olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename,
yyvsp[0].lstr.lineno));
}
break;
case 18:
-#line 338 "pic.y"
+#line 344 "/home/cjk/groff/pic/pic.y"
{
fprintf(stderr, "%s\n", yyvsp[0].lstr.str);
a_delete yyvsp[0].lstr.str;
@@ -3651,11 +3639,11 @@ case 18:
}
break;
case 19:
-#line 344 "pic.y"
+#line 350 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 1; }
break;
case 20:
-#line 346 "pic.y"
+#line 352 "/home/cjk/groff/pic/pic.y"
{
delim_flag = 0;
if (safer_flag)
@@ -3666,7 +3654,7 @@ case 20:
}
break;
case 21:
-#line 355 "pic.y"
+#line 361 "/home/cjk/groff/pic/pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3675,15 +3663,15 @@ case 21:
}
break;
case 22:
-#line 362 "pic.y"
+#line 368 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 2; }
break;
case 23:
-#line 364 "pic.y"
+#line 370 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 0; }
break;
case 24:
-#line 366 "pic.y"
+#line 372 "/home/cjk/groff/pic/pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3694,15 +3682,15 @@ case 24:
}
break;
case 25:
-#line 375 "pic.y"
+#line 381 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 2; }
break;
case 26:
-#line 377 "pic.y"
+#line 383 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 0; }
break;
case 27:
-#line 379 "pic.y"
+#line 385 "/home/cjk/groff/pic/pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3712,11 +3700,11 @@ case 27:
}
break;
case 28:
-#line 387 "pic.y"
+#line 393 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 1; }
break;
case 29:
-#line 389 "pic.y"
+#line 395 "/home/cjk/groff/pic/pic.y"
{
delim_flag = 0;
if (yychar < 0)
@@ -3725,7 +3713,7 @@ case 29:
}
break;
case 30:
-#line 396 "pic.y"
+#line 402 "/home/cjk/groff/pic/pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3735,11 +3723,11 @@ case 30:
}
break;
case 31:
-#line 404 "pic.y"
+#line 410 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 1; }
break;
case 32:
-#line 406 "pic.y"
+#line 412 "/home/cjk/groff/pic/pic.y"
{
delim_flag = 0;
if (yychar < 0)
@@ -3753,27 +3741,27 @@ case 32:
}
break;
case 34:
-#line 419 "pic.y"
+#line 425 "/home/cjk/groff/pic/pic.y"
{ define_variable("scale", 1.0); }
break;
case 35:
-#line 424 "pic.y"
+#line 430 "/home/cjk/groff/pic/pic.y"
{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
break;
case 36:
-#line 426 "pic.y"
+#line 432 "/home/cjk/groff/pic/pic.y"
{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
break;
case 37:
-#line 428 "pic.y"
+#line 434 "/home/cjk/groff/pic/pic.y"
{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
break;
case 38:
-#line 433 "pic.y"
+#line 439 "/home/cjk/groff/pic/pic.y"
{ yyval.lstr = yyvsp[0].lstr; }
break;
case 39:
-#line 435 "pic.y"
+#line 441 "/home/cjk/groff/pic/pic.y"
{
yyval.lstr.str = new char[strlen(yyvsp[-1].lstr.str) + strlen(yyvsp[0].lstr.str) + 1];
strcpy(yyval.lstr.str, yyvsp[-1].lstr.str);
@@ -3791,7 +3779,7 @@ case 39:
}
break;
case 40:
-#line 454 "pic.y"
+#line 460 "/home/cjk/groff/pic/pic.y"
{
yyval.lstr.str = new char[GDIGITS + 1];
sprintf(yyval.lstr.str, "%g", yyvsp[0].x);
@@ -3800,11 +3788,11 @@ case 40:
}
break;
case 41:
-#line 461 "pic.y"
+#line 467 "/home/cjk/groff/pic/pic.y"
{ yyval.lstr = yyvsp[0].lstr; }
break;
case 42:
-#line 463 "pic.y"
+#line 469 "/home/cjk/groff/pic/pic.y"
{
yyval.lstr.str = new char[GDIGITS + 2 + GDIGITS + 1];
sprintf(yyval.lstr.str, "%g, %g", yyvsp[0].pair.x, yyvsp[0].pair.y);
@@ -3813,31 +3801,31 @@ case 42:
}
break;
case 43:
-#line 472 "pic.y"
+#line 478 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 1; }
break;
case 44:
-#line 474 "pic.y"
+#line 480 "/home/cjk/groff/pic/pic.y"
{ delim_flag = 0; yyval.if_data.x = yyvsp[-3].x; yyval.if_data.body = yyvsp[0].str; }
break;
case 45:
-#line 479 "pic.y"
+#line 485 "/home/cjk/groff/pic/pic.y"
{ yyval.str = 0; }
break;
case 46:
-#line 481 "pic.y"
+#line 487 "/home/cjk/groff/pic/pic.y"
{ yyval.str = yyvsp[0].lstr.str; }
break;
case 47:
-#line 486 "pic.y"
+#line 492 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[0].x; }
break;
case 48:
-#line 488 "pic.y"
+#line 494 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[0].x; }
break;
case 49:
-#line 493 "pic.y"
+#line 499 "/home/cjk/groff/pic/pic.y"
{
yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0;
a_delete yyvsp[-2].lstr.str;
@@ -3845,7 +3833,7 @@ case 49:
}
break;
case 50:
-#line 499 "pic.y"
+#line 505 "/home/cjk/groff/pic/pic.y"
{
yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0;
a_delete yyvsp[-2].lstr.str;
@@ -3853,47 +3841,47 @@ case 50:
}
break;
case 51:
-#line 505 "pic.y"
+#line 511 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 52:
-#line 507 "pic.y"
+#line 513 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 53:
-#line 509 "pic.y"
+#line 515 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 54:
-#line 511 "pic.y"
+#line 517 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
case 55:
-#line 513 "pic.y"
+#line 519 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
case 56:
-#line 515 "pic.y"
+#line 521 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
case 57:
-#line 517 "pic.y"
+#line 523 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[0].x == 0.0); }
break;
case 58:
-#line 523 "pic.y"
+#line 529 "/home/cjk/groff/pic/pic.y"
{ yyval.by.val = 1.0; yyval.by.is_multiplicative = 0; }
break;
case 59:
-#line 525 "pic.y"
+#line 531 "/home/cjk/groff/pic/pic.y"
{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 0; }
break;
case 60:
-#line 527 "pic.y"
+#line 533 "/home/cjk/groff/pic/pic.y"
{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 1; }
break;
case 61:
-#line 532 "pic.y"
+#line 538 "/home/cjk/groff/pic/pic.y"
{
yyval.pl.obj = yyvsp[0].spec->make_object(&current_position,
&current_direction);
@@ -3909,11 +3897,11 @@ case 61:
}
break;
case 62:
-#line 546 "pic.y"
+#line 552 "/home/cjk/groff/pic/pic.y"
{ yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; }
break;
case 63:
-#line 548 "pic.y"
+#line 554 "/home/cjk/groff/pic/pic.y"
{
yyval.pl.obj = 0;
yyval.pl.x = yyvsp[0].pair.x;
@@ -3923,7 +3911,7 @@ case 63:
}
break;
case 64:
-#line 556 "pic.y"
+#line 562 "/home/cjk/groff/pic/pic.y"
{
yyval.pl = yyvsp[0].pl;
define_label(yyvsp[-3].str, & yyval.pl);
@@ -3931,7 +3919,7 @@ case 64:
}
break;
case 65:
-#line 562 "pic.y"
+#line 568 "/home/cjk/groff/pic/pic.y"
{
yyval.state.x = current_position.x;
yyval.state.y = current_position.y;
@@ -3939,7 +3927,7 @@ case 65:
}
break;
case 66:
-#line 568 "pic.y"
+#line 574 "/home/cjk/groff/pic/pic.y"
{
current_position.x = yyvsp[-2].state.x;
current_position.y = yyvsp[-2].state.y;
@@ -3947,13 +3935,13 @@ case 66:
}
break;
case 67:
-#line 574 "pic.y"
+#line 580 "/home/cjk/groff/pic/pic.y"
{
yyval.pl = yyvsp[-3].pl;
}
break;
case 68:
-#line 578 "pic.y"
+#line 584 "/home/cjk/groff/pic/pic.y"
{
yyval.pl.obj = 0;
yyval.pl.x = current_position.x;
@@ -3961,40 +3949,40 @@ case 68:
}
break;
case 69:
-#line 587 "pic.y"
+#line 593 "/home/cjk/groff/pic/pic.y"
{}
break;
case 70:
-#line 589 "pic.y"
+#line 595 "/home/cjk/groff/pic/pic.y"
{}
break;
case 71:
-#line 594 "pic.y"
+#line 600 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(BOX_OBJECT);
}
break;
case 72:
-#line 598 "pic.y"
+#line 604 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(CIRCLE_OBJECT);
}
break;
case 73:
-#line 602 "pic.y"
+#line 608 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(ELLIPSE_OBJECT);
}
break;
case 74:
-#line 606 "pic.y"
+#line 612 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(ARC_OBJECT);
yyval.spec->dir = current_direction;
}
break;
case 75:
-#line 611 "pic.y"
+#line 617 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(LINE_OBJECT);
lookup_variable("lineht", & yyval.spec->segment_height);
@@ -4003,7 +3991,7 @@ case 75:
}
break;
case 76:
-#line 618 "pic.y"
+#line 624 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(ARROW_OBJECT);
lookup_variable("lineht", & yyval.spec->segment_height);
@@ -4012,7 +4000,7 @@ case 76:
}
break;
case 77:
-#line 625 "pic.y"
+#line 631 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(MOVE_OBJECT);
lookup_variable("moveht", & yyval.spec->segment_height);
@@ -4021,7 +4009,7 @@ case 77:
}
break;
case 78:
-#line 632 "pic.y"
+#line 638 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(SPLINE_OBJECT);
lookup_variable("lineht", & yyval.spec->segment_height);
@@ -4030,21 +4018,21 @@ case 78:
}
break;
case 79:
-#line 639 "pic.y"
+#line 645 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(TEXT_OBJECT);
yyval.spec->text = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno);
}
break;
case 80:
-#line 644 "pic.y"
+#line 650 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(TEXT_OBJECT);
yyval.spec->text = new text_item(format_number(0, yyvsp[0].x), 0, -1);
}
break;
case 81:
-#line 649 "pic.y"
+#line 655 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = new object_spec(TEXT_OBJECT);
yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x),
@@ -4053,7 +4041,7 @@ case 81:
}
break;
case 82:
-#line 656 "pic.y"
+#line 662 "/home/cjk/groff/pic/pic.y"
{
saved_state *p = new saved_state;
yyval.pstate = p;
@@ -4070,7 +4058,7 @@ case 82:
}
break;
case 83:
-#line 671 "pic.y"
+#line 677 "/home/cjk/groff/pic/pic.y"
{
current_position.x = yyvsp[-2].pstate->x;
current_position.y = yyvsp[-2].pstate->y;
@@ -4084,7 +4072,7 @@ case 83:
}
break;
case 84:
-#line 683 "pic.y"
+#line 689 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->height = yyvsp[0].x;
@@ -4092,7 +4080,7 @@ case 84:
}
break;
case 85:
-#line 689 "pic.y"
+#line 695 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->radius = yyvsp[0].x;
@@ -4100,7 +4088,7 @@ case 85:
}
break;
case 86:
-#line 695 "pic.y"
+#line 701 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->width = yyvsp[0].x;
@@ -4108,7 +4096,7 @@ case 86:
}
break;
case 87:
-#line 701 "pic.y"
+#line 707 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->radius = yyvsp[0].x/2.0;
@@ -4116,7 +4104,7 @@ case 87:
}
break;
case 88:
-#line 707 "pic.y"
+#line 713 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= HAS_SEGMENT;
@@ -4137,7 +4125,7 @@ case 88:
}
break;
case 89:
-#line 726 "pic.y"
+#line 732 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = UP_DIRECTION;
@@ -4146,7 +4134,7 @@ case 89:
}
break;
case 90:
-#line 733 "pic.y"
+#line 739 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = UP_DIRECTION;
@@ -4155,7 +4143,7 @@ case 90:
}
break;
case 91:
-#line 740 "pic.y"
+#line 746 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = DOWN_DIRECTION;
@@ -4164,7 +4152,7 @@ case 91:
}
break;
case 92:
-#line 747 "pic.y"
+#line 753 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = DOWN_DIRECTION;
@@ -4173,7 +4161,7 @@ case 92:
}
break;
case 93:
-#line 754 "pic.y"
+#line 760 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = RIGHT_DIRECTION;
@@ -4182,7 +4170,7 @@ case 93:
}
break;
case 94:
-#line 761 "pic.y"
+#line 767 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = RIGHT_DIRECTION;
@@ -4191,7 +4179,7 @@ case 94:
}
break;
case 95:
-#line 768 "pic.y"
+#line 774 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = LEFT_DIRECTION;
@@ -4200,7 +4188,7 @@ case 95:
}
break;
case 96:
-#line 775 "pic.y"
+#line 781 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = LEFT_DIRECTION;
@@ -4209,7 +4197,7 @@ case 96:
}
break;
case 97:
-#line 782 "pic.y"
+#line 788 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_FROM;
@@ -4218,7 +4206,7 @@ case 97:
}
break;
case 98:
-#line 789 "pic.y"
+#line 795 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
if (yyval.spec->flags & HAS_SEGMENT)
@@ -4235,7 +4223,7 @@ case 98:
}
break;
case 99:
-#line 804 "pic.y"
+#line 810 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_AT;
@@ -4249,7 +4237,7 @@ case 99:
}
break;
case 100:
-#line 816 "pic.y"
+#line 822 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_WITH;
@@ -4257,7 +4245,7 @@ case 100:
}
break;
case 101:
-#line 822 "pic.y"
+#line 828 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_SEGMENT;
@@ -4266,7 +4254,7 @@ case 101:
}
break;
case 102:
-#line 829 "pic.y"
+#line 835 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->flags & HAS_SEGMENT) {
@@ -4280,7 +4268,7 @@ case 102:
}
break;
case 103:
-#line 841 "pic.y"
+#line 847 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_DOTTED;
@@ -4288,7 +4276,7 @@ case 103:
}
break;
case 104:
-#line 847 "pic.y"
+#line 853 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= IS_DOTTED;
@@ -4296,7 +4284,7 @@ case 104:
}
break;
case 105:
-#line 853 "pic.y"
+#line 859 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_DASHED;
@@ -4304,7 +4292,7 @@ case 105:
}
break;
case 106:
-#line 859 "pic.y"
+#line 865 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= IS_DASHED;
@@ -4312,14 +4300,14 @@ case 106:
}
break;
case 107:
-#line 865 "pic.y"
+#line 871 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_DEFAULT_FILLED;
}
break;
case 108:
-#line 870 "pic.y"
+#line 876 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= IS_FILLED;
@@ -4327,7 +4315,7 @@ case 108:
}
break;
case 109:
-#line 876 "pic.y"
+#line 882 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
/* line chop chop means line chop 0 chop 0*/
@@ -4345,7 +4333,7 @@ case 109:
}
break;
case 110:
-#line 892 "pic.y"
+#line 898 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
if (yyval.spec->flags & IS_DEFAULT_CHOPPED) {
@@ -4364,56 +4352,56 @@ case 110:
}
break;
case 111:
-#line 909 "pic.y"
+#line 915 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_SAME;
}
break;
case 112:
-#line 914 "pic.y"
+#line 920 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_INVISIBLE;
}
break;
case 113:
-#line 919 "pic.y"
+#line 925 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= HAS_LEFT_ARROW_HEAD;
}
break;
case 114:
-#line 924 "pic.y"
+#line 930 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD;
}
break;
case 115:
-#line 929 "pic.y"
+#line 935 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
}
break;
case 116:
-#line 934 "pic.y"
+#line 940 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_CLOCKWISE;
}
break;
case 117:
-#line 939 "pic.y"
+#line 945 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags &= ~IS_CLOCKWISE;
}
break;
case 118:
-#line 944 "pic.y"
+#line 950 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
text_item **p;
@@ -4423,7 +4411,7 @@ case 118:
}
break;
case 119:
-#line 952 "pic.y"
+#line 958 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4435,7 +4423,7 @@ case 119:
}
break;
case 120:
-#line 962 "pic.y"
+#line 968 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4447,7 +4435,7 @@ case 120:
}
break;
case 121:
-#line 972 "pic.y"
+#line 978 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4459,7 +4447,7 @@ case 121:
}
break;
case 122:
-#line 982 "pic.y"
+#line 988 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4471,7 +4459,7 @@ case 122:
}
break;
case 123:
-#line 992 "pic.y"
+#line 998 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_THICKNESS;
@@ -4479,20 +4467,20 @@ case 123:
}
break;
case 124:
-#line 998 "pic.y"
+#line 1004 "/home/cjk/groff/pic/pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_ALIGNED;
}
break;
case 125:
-#line 1006 "pic.y"
+#line 1012 "/home/cjk/groff/pic/pic.y"
{
yyval.lstr = yyvsp[0].lstr;
}
break;
case 126:
-#line 1010 "pic.y"
+#line 1016 "/home/cjk/groff/pic/pic.y"
{
yyval.lstr.filename = yyvsp[-2].lstr.filename;
yyval.lstr.lineno = yyvsp[-2].lstr.lineno;
@@ -4502,7 +4490,7 @@ case 126:
}
break;
case 127:
-#line 1021 "pic.y"
+#line 1027 "/home/cjk/groff/pic/pic.y"
{
yyval.dv.v = 0;
yyval.dv.nv = 0;
@@ -4510,7 +4498,7 @@ case 127:
}
break;
case 128:
-#line 1027 "pic.y"
+#line 1033 "/home/cjk/groff/pic/pic.y"
{
yyval.dv = yyvsp[-2].dv;
if (yyval.dv.nv >= yyval.dv.maxv) {
@@ -4531,11 +4519,11 @@ case 128:
}
break;
case 129:
-#line 1049 "pic.y"
+#line 1055 "/home/cjk/groff/pic/pic.y"
{ yyval.pair = yyvsp[0].pair; }
break;
case 130:
-#line 1051 "pic.y"
+#line 1057 "/home/cjk/groff/pic/pic.y"
{
position pos = yyvsp[0].pl;
yyval.pair.x = pos.x;
@@ -4543,58 +4531,58 @@ case 130:
}
break;
case 131:
-#line 1060 "pic.y"
+#line 1066 "/home/cjk/groff/pic/pic.y"
{ yyval.pair = yyvsp[0].pair; }
break;
case 132:
-#line 1062 "pic.y"
+#line 1068 "/home/cjk/groff/pic/pic.y"
{
yyval.pair.x = yyvsp[-2].pair.x + yyvsp[0].pair.x;
yyval.pair.y = yyvsp[-2].pair.y + yyvsp[0].pair.y;
}
break;
case 133:
-#line 1067 "pic.y"
+#line 1073 "/home/cjk/groff/pic/pic.y"
{
yyval.pair.x = yyvsp[-2].pair.x - yyvsp[0].pair.x;
yyval.pair.y = yyvsp[-2].pair.y - yyvsp[0].pair.y;
}
break;
case 134:
-#line 1072 "pic.y"
+#line 1078 "/home/cjk/groff/pic/pic.y"
{
yyval.pair.x = yyvsp[-3].pair.x;
yyval.pair.y = yyvsp[-1].pair.y;
}
break;
case 135:
-#line 1077 "pic.y"
+#line 1083 "/home/cjk/groff/pic/pic.y"
{
yyval.pair.x = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.x + yyvsp[-4].x*yyvsp[0].pair.x;
yyval.pair.y = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.y + yyvsp[-4].x*yyvsp[0].pair.y;
}
break;
case 136:
-#line 1082 "pic.y"
+#line 1088 "/home/cjk/groff/pic/pic.y"
{
yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x;
yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y;
}
break;
case 139:
-#line 1095 "pic.y"
+#line 1101 "/home/cjk/groff/pic/pic.y"
{ yyval.pair.x = yyvsp[-2].x; yyval.pair.y = yyvsp[0].x; }
break;
case 140:
-#line 1097 "pic.y"
+#line 1103 "/home/cjk/groff/pic/pic.y"
{ yyval.pair = yyvsp[-1].pair; }
break;
case 141:
-#line 1102 "pic.y"
+#line 1108 "/home/cjk/groff/pic/pic.y"
{ yyval.pl = yyvsp[0].pl; }
break;
case 142:
-#line 1104 "pic.y"
+#line 1110 "/home/cjk/groff/pic/pic.y"
{
path pth(yyvsp[0].crn);
if (!pth.follow(yyvsp[-1].pl, & yyval.pl))
@@ -4602,7 +4590,7 @@ case 142:
}
break;
case 143:
-#line 1110 "pic.y"
+#line 1116 "/home/cjk/groff/pic/pic.y"
{
path pth(yyvsp[-1].crn);
if (!pth.follow(yyvsp[0].pl, & yyval.pl))
@@ -4610,7 +4598,7 @@ case 143:
}
break;
case 144:
-#line 1116 "pic.y"
+#line 1122 "/home/cjk/groff/pic/pic.y"
{
path pth(yyvsp[-2].crn);
if (!pth.follow(yyvsp[0].pl, & yyval.pl))
@@ -4618,7 +4606,7 @@ case 144:
}
break;
case 145:
-#line 1122 "pic.y"
+#line 1128 "/home/cjk/groff/pic/pic.y"
{
yyval.pl.x = current_position.x;
yyval.pl.y = current_position.y;
@@ -4626,7 +4614,7 @@ case 145:
}
break;
case 146:
-#line 1131 "pic.y"
+#line 1137 "/home/cjk/groff/pic/pic.y"
{
place *p = lookup_label(yyvsp[0].str);
if (!p) {
@@ -4638,13 +4626,13 @@ case 146:
}
break;
case 147:
-#line 1141 "pic.y"
+#line 1147 "/home/cjk/groff/pic/pic.y"
{
yyval.pl.obj = yyvsp[0].obj;
}
break;
case 148:
-#line 1145 "pic.y"
+#line 1151 "/home/cjk/groff/pic/pic.y"
{
path pth(yyvsp[0].str);
if (!pth.follow(yyvsp[-2].pl, & yyval.pl))
@@ -4652,26 +4640,26 @@ case 148:
}
break;
case 149:
-#line 1154 "pic.y"
+#line 1160 "/home/cjk/groff/pic/pic.y"
{ yyval.n = yyvsp[0].n; }
break;
case 150:
-#line 1156 "pic.y"
+#line 1162 "/home/cjk/groff/pic/pic.y"
{
/* XXX Check for overflow (and non-integers?).*/
yyval.n = (int)yyvsp[-1].x;
}
break;
case 151:
-#line 1164 "pic.y"
+#line 1170 "/home/cjk/groff/pic/pic.y"
{ yyval.n = 1; }
break;
case 152:
-#line 1166 "pic.y"
+#line 1172 "/home/cjk/groff/pic/pic.y"
{ yyval.n = yyvsp[-1].n; }
break;
case 153:
-#line 1171 "pic.y"
+#line 1177 "/home/cjk/groff/pic/pic.y"
{
int count = 0;
object *p;
@@ -4688,7 +4676,7 @@ case 153:
}
break;
case 154:
-#line 1186 "pic.y"
+#line 1192 "/home/cjk/groff/pic/pic.y"
{
int count = 0;
object *p;
@@ -4705,88 +4693,88 @@ case 154:
}
break;
case 155:
-#line 1204 "pic.y"
+#line 1210 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = BOX_OBJECT; }
break;
case 156:
-#line 1206 "pic.y"
+#line 1212 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = CIRCLE_OBJECT; }
break;
case 157:
-#line 1208 "pic.y"
+#line 1214 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = ELLIPSE_OBJECT; }
break;
case 158:
-#line 1210 "pic.y"
+#line 1216 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = ARC_OBJECT; }
break;
case 159:
-#line 1212 "pic.y"
+#line 1218 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = LINE_OBJECT; }
break;
case 160:
-#line 1214 "pic.y"
+#line 1220 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = ARROW_OBJECT; }
break;
case 161:
-#line 1216 "pic.y"
+#line 1222 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = SPLINE_OBJECT; }
break;
case 162:
-#line 1218 "pic.y"
+#line 1224 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = BLOCK_OBJECT; }
break;
case 163:
-#line 1220 "pic.y"
+#line 1226 "/home/cjk/groff/pic/pic.y"
{ yyval.obtype = TEXT_OBJECT; }
break;
case 164:
-#line 1225 "pic.y"
+#line 1231 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = new path(yyvsp[0].str);
}
break;
case 165:
-#line 1229 "pic.y"
+#line 1235 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = yyvsp[-2].pth;
yyval.pth->append(yyvsp[0].str);
}
break;
case 166:
-#line 1237 "pic.y"
+#line 1243 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = new path(yyvsp[0].crn);
}
break;
case 167:
-#line 1244 "pic.y"
+#line 1250 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = yyvsp[0].pth;
}
break;
case 168:
-#line 1248 "pic.y"
+#line 1254 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = yyvsp[-1].pth;
yyval.pth->append(yyvsp[0].crn);
}
break;
case 169:
-#line 1256 "pic.y"
+#line 1262 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = yyvsp[0].pth;
}
break;
case 170:
-#line 1260 "pic.y"
+#line 1266 "/home/cjk/groff/pic/pic.y"
{
yyval.pth = yyvsp[-3].pth;
yyval.pth->set_ypath(yyvsp[-1].pth);
}
break;
case 171:
-#line 1266 "pic.y"
+#line 1272 "/home/cjk/groff/pic/pic.y"
{
lex_warning("`%1%2 last %3' in `with' argument ignored",
yyvsp[-3].n, ordinal_postfix(yyvsp[-3].n), object_type_name(yyvsp[-1].obtype));
@@ -4794,7 +4782,7 @@ case 171:
}
break;
case 172:
-#line 1272 "pic.y"
+#line 1278 "/home/cjk/groff/pic/pic.y"
{
lex_warning("`last %1' in `with' argument ignored",
object_type_name(yyvsp[-1].obtype));
@@ -4802,7 +4790,7 @@ case 172:
}
break;
case 173:
-#line 1278 "pic.y"
+#line 1284 "/home/cjk/groff/pic/pic.y"
{
lex_warning("`%1%2 %3' in `with' argument ignored",
yyvsp[-2].n, ordinal_postfix(yyvsp[-2].n), object_type_name(yyvsp[-1].obtype));
@@ -4810,7 +4798,7 @@ case 173:
}
break;
case 174:
-#line 1284 "pic.y"
+#line 1290 "/home/cjk/groff/pic/pic.y"
{
lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str);
a_delete yyvsp[-1].str;
@@ -4818,119 +4806,119 @@ case 174:
}
break;
case 175:
-#line 1293 "pic.y"
+#line 1299 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north; }
break;
case 176:
-#line 1295 "pic.y"
+#line 1301 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::east; }
break;
case 177:
-#line 1297 "pic.y"
+#line 1303 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::west; }
break;
case 178:
-#line 1299 "pic.y"
+#line 1305 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south; }
break;
case 179:
-#line 1301 "pic.y"
+#line 1307 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north_east; }
break;
case 180:
-#line 1303 "pic.y"
+#line 1309 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object:: south_east; }
break;
case 181:
-#line 1305 "pic.y"
+#line 1311 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north_west; }
break;
case 182:
-#line 1307 "pic.y"
+#line 1313 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south_west; }
break;
case 183:
-#line 1309 "pic.y"
+#line 1315 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::center; }
break;
case 184:
-#line 1311 "pic.y"
+#line 1317 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::start; }
break;
case 185:
-#line 1313 "pic.y"
+#line 1319 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::end; }
break;
case 186:
-#line 1315 "pic.y"
+#line 1321 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north; }
break;
case 187:
-#line 1317 "pic.y"
+#line 1323 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south; }
break;
case 188:
-#line 1319 "pic.y"
+#line 1325 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::west; }
break;
case 189:
-#line 1321 "pic.y"
+#line 1327 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::east; }
break;
case 190:
-#line 1323 "pic.y"
+#line 1329 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north_west; }
break;
case 191:
-#line 1325 "pic.y"
+#line 1331 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south_west; }
break;
case 192:
-#line 1327 "pic.y"
+#line 1333 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north_east; }
break;
case 193:
-#line 1329 "pic.y"
+#line 1335 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south_east; }
break;
case 194:
-#line 1331 "pic.y"
+#line 1337 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::west; }
break;
case 195:
-#line 1333 "pic.y"
+#line 1339 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::east; }
break;
case 196:
-#line 1335 "pic.y"
+#line 1341 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north_west; }
break;
case 197:
-#line 1337 "pic.y"
+#line 1343 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south_west; }
break;
case 198:
-#line 1339 "pic.y"
+#line 1345 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::north_east; }
break;
case 199:
-#line 1341 "pic.y"
+#line 1347 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::south_east; }
break;
case 200:
-#line 1343 "pic.y"
+#line 1349 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::center; }
break;
case 201:
-#line 1345 "pic.y"
+#line 1351 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::start; }
break;
case 202:
-#line 1347 "pic.y"
+#line 1353 "/home/cjk/groff/pic/pic.y"
{ yyval.crn = &object::end; }
break;
case 203:
-#line 1352 "pic.y"
+#line 1358 "/home/cjk/groff/pic/pic.y"
{
if (!lookup_variable(yyvsp[0].str, & yyval.x)) {
lex_error("there is no variable `%1'", yyvsp[0].str);
@@ -4940,11 +4928,11 @@ case 203:
}
break;
case 204:
-#line 1360 "pic.y"
+#line 1366 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[0].x; }
break;
case 205:
-#line 1362 "pic.y"
+#line 1368 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->origin().x;
@@ -4953,7 +4941,7 @@ case 205:
}
break;
case 206:
-#line 1369 "pic.y"
+#line 1375 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->origin().y;
@@ -4962,7 +4950,7 @@ case 206:
}
break;
case 207:
-#line 1376 "pic.y"
+#line 1382 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->height();
@@ -4971,7 +4959,7 @@ case 207:
}
break;
case 208:
-#line 1383 "pic.y"
+#line 1389 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->width();
@@ -4980,7 +4968,7 @@ case 208:
}
break;
case 209:
-#line 1390 "pic.y"
+#line 1396 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->radius();
@@ -4989,19 +4977,19 @@ case 209:
}
break;
case 210:
-#line 1397 "pic.y"
+#line 1403 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[-2].x + yyvsp[0].x; }
break;
case 211:
-#line 1399 "pic.y"
+#line 1405 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[-2].x - yyvsp[0].x; }
break;
case 212:
-#line 1401 "pic.y"
+#line 1407 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[-2].x * yyvsp[0].x; }
break;
case 213:
-#line 1403 "pic.y"
+#line 1409 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[0].x == 0.0) {
lex_error("division by zero");
@@ -5011,7 +4999,7 @@ case 213:
}
break;
case 214:
-#line 1411 "pic.y"
+#line 1417 "/home/cjk/groff/pic/pic.y"
{
if (yyvsp[0].x == 0.0) {
lex_error("modulus by zero");
@@ -5021,7 +5009,7 @@ case 214:
}
break;
case 215:
-#line 1419 "pic.y"
+#line 1425 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = pow(yyvsp[-2].x, yyvsp[0].x);
@@ -5036,15 +5024,15 @@ case 215:
}
break;
case 216:
-#line 1432 "pic.y"
+#line 1438 "/home/cjk/groff/pic/pic.y"
{ yyval.x = -yyvsp[0].x; }
break;
case 217:
-#line 1434 "pic.y"
+#line 1440 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[-1].x; }
break;
case 218:
-#line 1436 "pic.y"
+#line 1442 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = sin(yyvsp[-1].x);
@@ -5055,7 +5043,7 @@ case 218:
}
break;
case 219:
-#line 1445 "pic.y"
+#line 1451 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = cos(yyvsp[-1].x);
@@ -5066,7 +5054,7 @@ case 219:
}
break;
case 220:
-#line 1454 "pic.y"
+#line 1460 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x);
@@ -5081,7 +5069,7 @@ case 220:
}
break;
case 221:
-#line 1467 "pic.y"
+#line 1473 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = log10(yyvsp[-1].x);
@@ -5092,7 +5080,7 @@ case 221:
}
break;
case 222:
-#line 1476 "pic.y"
+#line 1482 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = pow(10.0, yyvsp[-1].x);
@@ -5103,7 +5091,7 @@ case 222:
}
break;
case 223:
-#line 1485 "pic.y"
+#line 1491 "/home/cjk/groff/pic/pic.y"
{
errno = 0;
yyval.x = sqrt(yyvsp[-1].x);
@@ -5114,23 +5102,23 @@ case 223:
}
break;
case 224:
-#line 1494 "pic.y"
+#line 1500 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; }
break;
case 225:
-#line 1496 "pic.y"
+#line 1502 "/home/cjk/groff/pic/pic.y"
{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; }
break;
case 226:
-#line 1498 "pic.y"
+#line 1504 "/home/cjk/groff/pic/pic.y"
{ yyval.x = floor(yyvsp[-1].x); }
break;
case 227:
-#line 1500 "pic.y"
+#line 1506 "/home/cjk/groff/pic/pic.y"
{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); }
break;
case 228:
-#line 1502 "pic.y"
+#line 1508 "/home/cjk/groff/pic/pic.y"
{
/* return a random number in the range [0,1) */
/* portable, but not very random */
@@ -5138,42 +5126,46 @@ case 228:
}
break;
case 229:
-#line 1508 "pic.y"
-{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); }
+#line 1514 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = 0; srand((unsigned int)yyvsp[-1].x); }
break;
case 230:
-#line 1510 "pic.y"
-{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); }
+#line 1516 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); }
break;
case 231:
-#line 1512 "pic.y"
-{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); }
+#line 1518 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); }
break;
case 232:
-#line 1514 "pic.y"
-{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); }
+#line 1520 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); }
break;
case 233:
-#line 1516 "pic.y"
-{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); }
+#line 1522 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); }
break;
case 234:
-#line 1518 "pic.y"
-{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); }
+#line 1524 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); }
break;
case 235:
-#line 1520 "pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
+#line 1526 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); }
break;
case 236:
-#line 1522 "pic.y"
-{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
+#line 1528 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 237:
-#line 1524 "pic.y"
+#line 1530 "/home/cjk/groff/pic/pic.y"
+{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
+break;
+case 238:
+#line 1532 "/home/cjk/groff/pic/pic.y"
{ yyval.x = (yyvsp[0].x == 0.0); }
break;
-#line 5174 "y.tab.c"
+#line 5165 "y.tab.c"
}
yyssp -= yym;
yystate = *yyssp;
@@ -5183,8 +5175,8 @@ break;
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
#endif
yystate = YYFINAL;
*++yyssp = YYFINAL;
@@ -5198,8 +5190,8 @@ break;
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
}
#endif
}
@@ -5213,17 +5205,12 @@ break;
yystate = yydgoto[yym];
#if YYDEBUG
if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
-to state %d\n", *yyssp, yystate);
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
- if (yyssp >= yysse)
+ if (yyssp >= yyss + yystacksize - 1)
{
- int depth = yyssp - yyss;
- if (yygrow () != 0)
- goto yyoverflow;
- yysse = yyss + yystacksize - 1;
- yyssp = yyss + depth;
- yyvsp = yyvs + depth;
+ goto yyoverflow;
}
*++yyssp = yystate;
*++yyvsp = yyval;
@@ -5235,52 +5222,3 @@ yyabort:
yyaccept:
return (0);
}
-
-static int
-yygrow ()
-{
- int old_stacksize = yystacksize;
- short *new_yyss;
- YYSTYPE *new_yyvs;
-
- if (yystacksize >= YYMAXDEPTH)
- return (1);
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: growing stack size from %d to %d\n",
- old_stacksize, yystacksize);
-#endif
- new_yyss = (short *) yyrealloc (yyss, yystacksize * sizeof (short));
- if (new_yyss == 0)
- return (1);
- new_yyvs = (YYSTYPE *) yyrealloc (yyvs, yystacksize * sizeof (YYSTYPE));
- if (new_yyvs == 0)
- {
- yyfree (new_yyss);
- return (1);
- }
- yyss = new_yyss;
- yyvs = new_yyvs;
- return (0);
-}
-
-static YYPTR
-YYDEFUN (yymalloc, (bytes), unsigned bytes)
-{
- YYPTR ptr = (YYPTR) malloc (bytes);
- if (ptr != 0) return (ptr);
- yyerror ("yyparse: memory exhausted");
- return (0);
-}
-
-static YYPTR
-YYDEFUN (yyrealloc, (old, bytes), YYPTR old YYAND unsigned bytes)
-{
- YYPTR ptr = (YYPTR) realloc (old, bytes);
- if (ptr != 0) return (ptr);
- yyerror ("yyparse: memory exhausted");
- return (0);
-}
diff --git a/contrib/groff/pic/pic.h b/contrib/groff/pic/pic.h
index 77e59c7e7910..72485a396333 100644
--- a/contrib/groff/pic/pic.h
+++ b/contrib/groff/pic/pic.h
@@ -24,11 +24,11 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <stdlib.h>
#include <errno.h>
-#ifndef MATH_H_DECLARES_HYPOT
+#ifdef NEED_DECLARATION_HYPOT
extern "C" {
double hypot(double, double);
}
-#endif
+#endif /* NEED_DECLARATION_HYPOT */
#include "assert.h"
#include "cset.h"
diff --git a/contrib/groff/pic/pic.man b/contrib/groff/pic/pic.man
index 70ab94631bb0..311a04e609dc 100644
--- a/contrib/groff/pic/pic.man
+++ b/contrib/groff/pic/pic.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 Free Software Foundation, Inc.
+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
@@ -52,7 +52,6 @@ the original English.
\&.\|.\|.
]
.SH DESCRIPTION
-.LP
This manual page describes the GNU version of
.BR pic ,
which is part of the groff document formatting system.
@@ -82,7 +81,6 @@ appropriate definitions can be obtained with
.BR \-mpic :
these will center each picture.
.SH OPTIONS
-.LP
Options that do not take arguments may be grouped behind a single
.BR \- .
The special option
@@ -118,7 +116,8 @@ The extensions are described in
.BR groff_out (@MAN5EXT@).
The
.B \-n
-option also causes pic
+option also causes
+.B pic
not to use zero-length lines to draw dots in troff mode.
.TP
.B \-t
@@ -179,15 +178,20 @@ output generated by
.B pic
is device-independent.
.SH USAGE
-This section describes only the differences between GNU pic and the original
-version of pic.
-Many of these differences also apply to newer versions of Unix pic.
+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, pic will define a vbox called
+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
@@ -404,7 +408,8 @@ 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;
-pic does only very limited checking of the string.
+.B pic
+does only very limited checking of the string.
This is deprecated in favour of
.BR sprintf .
.TP
@@ -472,6 +477,9 @@ The syntax for expressions has been significantly extended:
.IR x ;
deprecated)
.br
+.BI srand( x )
+(set the random number seed)
+.br
.BI max( e1 , \ e2 )
.br
.BI min( e1 , \ e2 )
@@ -577,13 +585,15 @@ 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 pic will always scale a picture by the same amount
-vertically as horizontally.
+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 pic which may scale a picture by a
-different amount vertically than horizontally if a height is
-specified.
+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.
@@ -684,7 +694,9 @@ Initially
.B arrowhead
has a value of 1.
.LP
-The troff output of pic is device-independent.
+The troff output of
+.B pic
+is device-independent.
The
.B \-T
option is therefore redundant.
@@ -723,6 +735,98 @@ 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
@@ -735,15 +839,33 @@ macros.
.SH "SEE ALSO"
.BR @g@troff (@MAN1EXT@),
.BR groff_out (@MAN5EXT@),
-.BR tex (1)
-.br
+.BR tex (1),
+.BR gs (1),
+.BR ps2eps (1),
+.BR pstopnm (1),
+.BR ps2epsi (1),
+.BR pnm (5)
+.LP
Tpic: Pic for \*(tx
-.br
+.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
@@ -757,3 +879,5 @@ 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
index 46f1a8d96d52..d9191b459029 100644
--- a/contrib/groff/pic/pic.y
+++ b/contrib/groff/pic/pic.y
@@ -37,8 +37,14 @@ extern "C" {
#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") */
@@ -171,6 +177,7 @@ char *do_sprintf(const char *form, const double *v, int nv);
%token K_MIN
%token INT
%token RAND
+%token SRAND
%token COPY
%token THRU
%token TOP
@@ -225,7 +232,7 @@ 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 LAST
+%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 '-' */
@@ -1507,6 +1514,8 @@ expr:
/* portable, but not very random */
$$ = (rand() & 0x7fff) / double(0x8000);
}
+ | SRAND '(' any_expr ')'
+ { $$ = 0; srand((unsigned int)$3); }
| expr '<' expr
{ $$ = ($1 < $3); }
| expr LESSEQUAL expr
diff --git a/contrib/groff/pic/pic_tab.h b/contrib/groff/pic/pic_tab.h
new file mode 100644
index 000000000000..2a3f9d816f25
--- /dev/null
+++ b/contrib/groff/pic/pic_tab.h
@@ -0,0 +1,130 @@
+#define LABEL 257
+#define VARIABLE 258
+#define NUMBER 259
+#define TEXT 260
+#define COMMAND_LINE 261
+#define DELIMITED 262
+#define ORDINAL 263
+#define TH 264
+#define LEFT_ARROW_HEAD 265
+#define RIGHT_ARROW_HEAD 266
+#define DOUBLE_ARROW_HEAD 267
+#define LAST 268
+#define UP 269
+#define DOWN 270
+#define LEFT 271
+#define RIGHT 272
+#define BOX 273
+#define CIRCLE 274
+#define ELLIPSE 275
+#define ARC 276
+#define LINE 277
+#define ARROW 278
+#define MOVE 279
+#define SPLINE 280
+#define HEIGHT 281
+#define RADIUS 282
+#define WIDTH 283
+#define DIAMETER 284
+#define FROM 285
+#define TO 286
+#define AT 287
+#define WITH 288
+#define BY 289
+#define THEN 290
+#define DOTTED 291
+#define DASHED 292
+#define CHOP 293
+#define SAME 294
+#define INVISIBLE 295
+#define LJUST 296
+#define RJUST 297
+#define ABOVE 298
+#define BELOW 299
+#define OF 300
+#define THE 301
+#define WAY 302
+#define BETWEEN 303
+#define AND 304
+#define HERE 305
+#define DOT_N 306
+#define DOT_E 307
+#define DOT_W 308
+#define DOT_S 309
+#define DOT_NE 310
+#define DOT_SE 311
+#define DOT_NW 312
+#define DOT_SW 313
+#define DOT_C 314
+#define DOT_START 315
+#define DOT_END 316
+#define DOT_X 317
+#define DOT_Y 318
+#define DOT_HT 319
+#define DOT_WID 320
+#define DOT_RAD 321
+#define SIN 322
+#define COS 323
+#define ATAN2 324
+#define LOG 325
+#define EXP 326
+#define SQRT 327
+#define K_MAX 328
+#define K_MIN 329
+#define INT 330
+#define RAND 331
+#define SRAND 332
+#define COPY 333
+#define THRU 334
+#define TOP 335
+#define BOTTOM 336
+#define UPPER 337
+#define LOWER 338
+#define SH 339
+#define PRINT 340
+#define CW 341
+#define CCW 342
+#define FOR 343
+#define DO 344
+#define IF 345
+#define ELSE 346
+#define ANDAND 347
+#define OROR 348
+#define NOTEQUAL 349
+#define EQUALEQUAL 350
+#define LESSEQUAL 351
+#define GREATEREQUAL 352
+#define LEFT_CORNER 353
+#define RIGHT_CORNER 354
+#define CENTER 355
+#define END 356
+#define START 357
+#define RESET 358
+#define UNTIL 359
+#define PLOT 360
+#define THICKNESS 361
+#define FILL 362
+#define ALIGNED 363
+#define SPRINTF 364
+#define COMMAND 365
+#define DEFINE 366
+#define UNDEF 367
+typedef 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;
+} YYSTYPE;
+extern YYSTYPE yylval;
diff --git a/contrib/groff/pic/troff.cc b/contrib/groff/pic/troff.cc
index 16568542b825..53761b2f2cff 100644
--- a/contrib/groff/pic/troff.cc
+++ b/contrib/groff/pic/troff.cc
@@ -20,6 +20,7 @@ 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;
@@ -272,7 +273,7 @@ void troff_output::start_picture(double sc,
printf(" %s\n", args);
else
putchar('\n');
- printf(".if '\\*(.T'html' \\X(graphic-start(\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");
@@ -291,7 +292,7 @@ void troff_output::finish_picture()
printf(".if \\n(" FILL_REG " .fi\n");
printf(".br\n");
printf(".nr " EQN_NO_EXTRA_SPACE_REG " 0\n");
- printf(".if '\\*(.T'html' \\X(graphic-end(\n");
+ graphic_end();
// this is a little gross
set_location(current_filename, current_lineno);
fputs(flyback_flag ? ".PF\n" : ".PE\n", stdout);
diff --git a/contrib/groff/refer/Makefile.sub b/contrib/groff/refer/Makefile.sub
index 287346245866..1631b5e36e05 100644
--- a/contrib/groff/refer/Makefile.sub
+++ b/contrib/groff/refer/Makefile.sub
@@ -2,9 +2,22 @@ PROG=refer
MAN1=refer.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=command.o label.o ref.o refer.o token.o
-CCSRCS=command.cc ref.cc refer.cc token.cc
-HDRS=refer.h token.h command.h ref.h
-GRAM=label.y
-YTABC=label.cc
+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/label.cc b/contrib/groff/refer/label.cc
index 5d1ae90bbd58..c6dc07cd4817 100644
--- a/contrib/groff/refer/label.cc
+++ b/contrib/groff/refer/label.cc
@@ -1,26 +1,14 @@
-#if defined(__STDC__) || defined(__cplusplus)
-#define YYCONST const
-#define YYPARAMS(x) x
-#define YYDEFUN(name, arglist, args) name(args)
-#define YYAND ,
-#define YYPTR void *
-#else
-#define YYCONST
-#define YYPARAMS(x) ()
-#define YYDEFUN(name, arglist, args) name arglist args;
-#define YYAND ;
-#define YYPTR char *
-#endif
#ifndef lint
-YYCONST static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley +Cygnus.28) 01/20/91";
+/*static char yysccsid[] = "from: @(#)yaccpar 1.9 (Berkeley) 02/21/93";*/
+static char yyrcsid[] = "$Id: label.cc,v 1.2 2000/02/28 11:02:12 wlemb Exp $";
#endif
#define YYBYACC 1
-#ifndef YYDONT_INCLUDE_STDIO
-#include <stdio.h>
-#endif
-#ifdef __cplusplus
-#include <stdlib.h> /* for malloc/realloc/free */
-#endif
+#define YYMAJOR 1
+#define YYMINOR 9
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING (yyerrflag!=0)
+#define YYPREFIX "yy"
#line 22 "label.y"
#include "refer.h"
@@ -80,7 +68,7 @@ class field_expr : public expression {
int number;
char name;
public:
- field_expr(char nm, int num) : name(nm), number(num) { }
+ field_expr(char nm, int num) : number(num), name(nm) { }
void evaluate(int, const reference &, string &, substring_position &);
unsigned analyze() { return CONTAINS_VARIABLE; }
};
@@ -139,14 +127,14 @@ class extractor_expr : public unary_expr {
public:
enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
extractor_expr(expression *e, extractor_func *f, int pt)
- : unary_expr(e), func(f), part(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) : n(i), unary_expr(e) { }
+ truncate_expr(expression *e, int i) : unary_expr(e), n(i) { }
void evaluate(int, const reference &, string &, substring_position &);
};
@@ -226,52 +214,52 @@ typedef union {
struct { int ndigits; int val; } dig;
struct { int start; int len; } str;
} YYSTYPE;
-#line 230 "y.tab.c"
+#line 218 "y.tab.c"
#define TOKEN_LETTER 257
#define TOKEN_LITERAL 258
#define TOKEN_DIGIT 259
#define YYERRCODE 256
-static YYCONST short yylhs[] = { -1,
+short yylhs[] = { -1,
0, 1, 1, 6, 6, 2, 2, 2, 3, 3,
5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 9, 9, 7, 7, 8, 8,
10, 10, 10,
};
-static YYCONST short yylen[] = { 2,
+short yylen[] = { 2,
1, 1, 5, 0, 1, 1, 3, 3, 1, 2,
1, 3, 1, 1, 1, 2, 2, 2, 5, 3,
3, 2, 3, 3, 0, 1, 1, 2, 1, 2,
0, 1, 1,
};
-static YYCONST short yydefred[] = { 0,
+short yydefred[] = { 0,
0, 14, 13, 0, 0, 0, 0, 5, 0, 0,
0, 0, 1, 27, 0, 17, 29, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 22, 0, 28,
30, 23, 24, 0, 0, 0, 32, 33, 0, 0,
0, 0, 0, 0, 3, 0, 19,
};
-static YYCONST short yydgoto[] = { 7,
+short yydgoto[] = { 7,
8, 9, 10, 11, 12, 13, 15, 18, 47, 39,
};
-static YYCONST short yysindex[] = { -32,
+short yysindex[] = { -32,
-257, 0, 0, -240, -32, -32, 0, 0, -18, -32,
-36, -114, 0, 0, -246, 0, 0, -241, -14, -39,
-32, -32, -32, -114, -21, -257, -257, 0, -32, 0,
0, 0, 0, -25, -32, -32, 0, 0, -223, -246,
-246, -36, -32, -257, 0, -246, 0,
};
-static YYCONST short yyrindex[] = { 35,
+short yyrindex[] = { 35,
1, 0, 0, 0, -5, -4, 0, 0, 14, 208,
159, 224, 0, 0, 11, 0, 0, 40, 0, 0,
2, 0, 0, 253, -220, 0, 0, 0, 0, 0,
0, 0, 0, 0, 263, 281, 0, 0, 0, 50,
105, 214, 0, 115, 0, 149, 0,
};
-static YYCONST short yygindex[] = { 0,
+short yygindex[] = { 0,
19, 0, 7, 37, -10, 10, -23, 0, 0, 0,
};
#define YYTABLESIZE 511
-static YYCONST short yytable[] = { 24,
+short yytable[] = { 24,
15, 14, 40, 41, 4, 28, 26, 5, 27, 25,
16, 29, 30, 2, 19, 20, 16, 31, 17, 23,
46, 37, 33, 38, 24, 24, 32, 6, 35, 36,
@@ -325,7 +313,7 @@ static YYCONST short yytable[] = { 24,
0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
10,
};
-static YYCONST short yycheck[] = { 10,
+short yycheck[] = { 10,
0, 259, 26, 27, 37, 42, 43, 40, 45, 46,
0, 126, 259, 0, 5, 6, 257, 259, 259, 38,
44, 43, 62, 45, 35, 36, 41, 60, 22, 23,
@@ -385,7 +373,7 @@ static YYCONST short yycheck[] = { 10,
#endif
#define YYMAXTOKEN 259
#if YYDEBUG
-static YYCONST char *YYCONST yyname[] = {
+char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'","'.'",0,0,0,0,0,0,0,0,0,0,0,
"':'",0,"'<'",0,"'>'","'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -395,7 +383,7 @@ static YYCONST char *YYCONST yyname[] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,"TOKEN_LETTER","TOKEN_LITERAL","TOKEN_DIGIT",
};
-static YYCONST char *YYCONST yyrule[] = {
+char *yyrule[] = {
"$accept : expr",
"expr : optional_conditional",
"conditional : alternative",
@@ -432,13 +420,6 @@ static YYCONST char *YYCONST yyrule[] = {
"flag : '-'",
};
#endif
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#ifndef YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
@@ -446,23 +427,21 @@ static YYCONST char *YYCONST yyrule[] = {
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
#endif
#endif
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
-static short *yyss;
-static YYSTYPE *yyvs;
-static int yystacksize;
-static int yygrow ();
-static YYPTR yymalloc YYPARAMS((unsigned));
-static YYPTR yyrealloc YYPARAMS((YYPTR, unsigned));
-#define yyfree(x) free(x)
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#define yystacksize YYSTACKSIZE
#line 397 "label.y"
/* bison defines const to be empty unless __STDC__ is defined, which it
@@ -579,7 +558,7 @@ void format_expr::evaluate(int tentative, const reference &ref,
if (type != '0')
result += format_serial(type, num + 1);
else {
- const char *ptr = itoa(num + first_number);
+ const char *ptr = i_to_a(num + first_number);
int pad = width - strlen(ptr);
while (--pad >= 0)
result += '0';
@@ -600,7 +579,7 @@ static const char *format_serial(char c, int n)
// numerals; I can find no historical basis for this usage
const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
if (n >= 40000)
- return itoa(n);
+ return i_to_a(n);
while (n >= 10000) {
*p++ = s[0];
n -= 10000;
@@ -998,7 +977,7 @@ int reference::merge_labels_by_parts(reference **v, int n, label_type type,
string label_pool;
label_info::label_info(const string &s)
-: count(0), total(1), length(s.length()), start(label_pool.length())
+: start(label_pool.length()), length(s.length()), count(0), total(1)
{
label_pool += s;
}
@@ -1245,28 +1224,22 @@ int reference::get_nauthors() const
}
return nauthors;
}
-#line 1249 "y.tab.c"
+#line 1228 "y.tab.c"
#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
-
-#if YYDEBUG
-#ifdef __cplusplus
-extern "C" char *getenv();
-#else
-extern char *getenv();
-#endif
-#endif
-
int
+#if defined(__STDC__)
+yyparse(void)
+#else
yyparse()
+#endif
{
register int yym, yyn, yystate;
- register YYSTYPE *yyvsp;
- register short *yyssp;
- short *yysse;
#if YYDEBUG
- register YYCONST char *yys;
+ register char *yys;
+ extern char *getenv();
if (yys = getenv("YYDEBUG"))
{
@@ -1280,26 +1253,12 @@ yyparse()
yyerrflag = 0;
yychar = (-1);
- if (yyss == 0)
- {
- yyss = (short *) yymalloc (YYINITDEPTH * sizeof (short));
- if (yyss == 0)
- goto yyabort;
- yyvs = (YYSTYPE *) yymalloc (YYINITDEPTH * sizeof (YYSTYPE));
- if (yyvs == 0)
- {
- yyfree (yyss);
- goto yyabort;
- }
- yystacksize = YYINITDEPTH;
- }
- yysse = yyss + yystacksize - 1;
yyssp = yyss;
yyvsp = yyvs;
*yyssp = yystate = 0;
yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
@@ -1309,8 +1268,8 @@ yyloop:
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
}
#endif
}
@@ -1319,18 +1278,12 @@ yyloop:
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
#endif
- if (yyssp >= yysse)
+ if (yyssp >= yyss + yystacksize - 1)
{
- /* FIXME: Rework so there's only one of these. */
- int depth = yyssp - yyss;
- if (yygrow () != 0)
- goto yyoverflow;
- yysse = yyss + yystacksize - 1;
- yyssp = yyss + depth;
- yyvsp = yyvs + depth;
+ goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
@@ -1345,10 +1298,6 @@ yyloop:
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
@@ -1366,17 +1315,12 @@ yyinrecovery:
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
#endif
- if (yyssp >= yysse)
+ if (yyssp >= yyss + yystacksize - 1)
{
- int depth = yyssp - yyss;
- if (yygrow () != 0)
- goto yyoverflow;
- yysse = yyss + yystacksize - 1;
- yyssp = yyss + depth;
- yyvsp = yyvs + depth;
+ goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
@@ -1386,8 +1330,8 @@ yyinrecovery:
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
--yyssp;
@@ -1404,8 +1348,8 @@ yyinrecovery:
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
}
#endif
yychar = (-1);
@@ -1414,8 +1358,8 @@ yyinrecovery:
yyreduce:
#if YYDEBUG
if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
yym = yylen[yyn];
yyval = yyvsp[1-yym];
@@ -1599,7 +1543,7 @@ case 33:
#line 393 "label.y"
{ yyval.num = -1; }
break;
-#line 1603 "y.tab.c"
+#line 1547 "y.tab.c"
}
yyssp -= yym;
yystate = *yyssp;
@@ -1609,8 +1553,8 @@ break;
{
#if YYDEBUG
if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
#endif
yystate = YYFINAL;
*++yyssp = YYFINAL;
@@ -1624,8 +1568,8 @@ break;
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
}
#endif
}
@@ -1639,17 +1583,12 @@ break;
yystate = yydgoto[yym];
#if YYDEBUG
if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
-to state %d\n", *yyssp, yystate);
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
- if (yyssp >= yysse)
+ if (yyssp >= yyss + yystacksize - 1)
{
- int depth = yyssp - yyss;
- if (yygrow () != 0)
- goto yyoverflow;
- yysse = yyss + yystacksize - 1;
- yyssp = yyss + depth;
- yyvsp = yyvs + depth;
+ goto yyoverflow;
}
*++yyssp = yystate;
*++yyvsp = yyval;
@@ -1661,52 +1600,3 @@ yyabort:
yyaccept:
return (0);
}
-
-static int
-yygrow ()
-{
- int old_stacksize = yystacksize;
- short *new_yyss;
- YYSTYPE *new_yyvs;
-
- if (yystacksize >= YYMAXDEPTH)
- return (1);
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: growing stack size from %d to %d\n",
- old_stacksize, yystacksize);
-#endif
- new_yyss = (short *) yyrealloc (yyss, yystacksize * sizeof (short));
- if (new_yyss == 0)
- return (1);
- new_yyvs = (YYSTYPE *) yyrealloc (yyvs, yystacksize * sizeof (YYSTYPE));
- if (new_yyvs == 0)
- {
- yyfree (new_yyss);
- return (1);
- }
- yyss = new_yyss;
- yyvs = new_yyvs;
- return (0);
-}
-
-static YYPTR
-YYDEFUN (yymalloc, (bytes), unsigned bytes)
-{
- YYPTR ptr = (YYPTR) malloc (bytes);
- if (ptr != 0) return (ptr);
- yyerror ("yyparse: memory exhausted");
- return (0);
-}
-
-static YYPTR
-YYDEFUN (yyrealloc, (old, bytes), YYPTR old YYAND unsigned bytes)
-{
- YYPTR ptr = (YYPTR) realloc (old, bytes);
- if (ptr != 0) return (ptr);
- yyerror ("yyparse: memory exhausted");
- return (0);
-}
diff --git a/contrib/groff/refer/label.y b/contrib/groff/refer/label.y
index 474158df0c77..2c7c90951ab0 100644
--- a/contrib/groff/refer/label.y
+++ b/contrib/groff/refer/label.y
@@ -77,7 +77,7 @@ class field_expr : public expression {
int number;
char name;
public:
- field_expr(char nm, int num) : name(nm), number(num) { }
+ field_expr(char nm, int num) : number(num), name(nm) { }
void evaluate(int, const reference &, string &, substring_position &);
unsigned analyze() { return CONTAINS_VARIABLE; }
};
@@ -136,14 +136,14 @@ class extractor_expr : public unary_expr {
public:
enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
extractor_expr(expression *e, extractor_func *f, int pt)
- : unary_expr(e), func(f), part(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) : n(i), unary_expr(e) { }
+ truncate_expr(expression *e, int i) : unary_expr(e), n(i) { }
void evaluate(int, const reference &, string &, substring_position &);
};
@@ -509,7 +509,7 @@ void format_expr::evaluate(int tentative, const reference &ref,
if (type != '0')
result += format_serial(type, num + 1);
else {
- const char *ptr = itoa(num + first_number);
+ const char *ptr = i_to_a(num + first_number);
int pad = width - strlen(ptr);
while (--pad >= 0)
result += '0';
@@ -530,7 +530,7 @@ static const char *format_serial(char c, int n)
// numerals; I can find no historical basis for this usage
const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
if (n >= 40000)
- return itoa(n);
+ return i_to_a(n);
while (n >= 10000) {
*p++ = s[0];
n -= 10000;
@@ -928,7 +928,7 @@ int reference::merge_labels_by_parts(reference **v, int n, label_type type,
string label_pool;
label_info::label_info(const string &s)
-: count(0), total(1), length(s.length()), start(label_pool.length())
+: start(label_pool.length()), length(s.length()), count(0), total(1)
{
label_pool += s;
}
diff --git a/contrib/groff/refer/ref.cc b/contrib/groff/refer/ref.cc
index 9347e96552ad..c3517b194598 100644
--- a/contrib/groff/refer/ref.cc
+++ b/contrib/groff/refer/ref.cc
@@ -51,7 +51,7 @@ const char *reference_types[] = {
static string temp_fields[256];
reference::reference(const char *start, int len, reference_id *ridp)
-: no(-1), field(0), nfields(0), h(0), merged(0), label_ptr(0),
+: h(0), merged(0), no(-1), field(0), nfields(0), label_ptr(0),
computed_authors(0), last_needed_author(-1), nauthors(-1)
{
int i;
diff --git a/contrib/groff/refer/refer.cc b/contrib/groff/refer/refer.cc
index 065faf6533e3..70c696f4a9d3 100644
--- a/contrib/groff/refer/refer.cc
+++ b/contrib/groff/refer/refer.cc
@@ -336,8 +336,8 @@ int main(int argc, char **argv)
}
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU refer version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU refer version %s\n", Version_string);
fflush(stderr);
opt++;
break;
@@ -513,7 +513,7 @@ static void do_file(const char *filename)
if ((flags & FORCE_LEFT_BRACKET) || !have_text)
pending_line += PRE_LABEL_MARKER;
pending_line += pre;
- char lm = LABEL_MARKER + lt;
+ char lm = LABEL_MARKER + (int)lt;
pending_line += lm;
pending_line += post;
if ((flags & FORCE_RIGHT_BRACKET) || !have_text)
@@ -921,7 +921,7 @@ void label_processing_state::process(int c)
extern "C" {
-static int rcompare(const void *p1, const void *p2)
+int rcompare(const void *p1, const void *p2)
{
return compare_reference(**(reference **)p1, **(reference **)p2);
}
diff --git a/contrib/groff/refer/refer.man b/contrib/groff/refer/refer.man
index 6b09c973a931..13708cf0e568 100644
--- a/contrib/groff/refer/refer.man
+++ b/contrib/groff/refer/refer.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -58,6 +58,9 @@ the original English.
.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 ,
diff --git a/contrib/groff/soelim/Makefile.sub b/contrib/groff/soelim/Makefile.sub
index 7c873a6a9c2b..77007e25f452 100644
--- a/contrib/groff/soelim/Makefile.sub
+++ b/contrib/groff/soelim/Makefile.sub
@@ -2,5 +2,5 @@ PROG=soelim
MAN1=soelim.n
XLIBS=$(LIBGROFF)
OBJS=soelim.o
-CCSRCS=soelim.cc
+CCSRCS=$(srcdir)/soelim.cc
NAMEPREFIX=$(g)
diff --git a/contrib/groff/soelim/soelim.cc b/contrib/groff/soelim/soelim.cc
index a6f63ae5d1aa..257fc88a2604 100644
--- a/contrib/groff/soelim/soelim.cc
+++ b/contrib/groff/soelim/soelim.cc
@@ -28,6 +28,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "errarg.h"
#include "error.h"
#include "stringclass.h"
+#include "nonposix.h"
static int include_list_length;
static char **include_list;
@@ -43,8 +44,16 @@ static void
include_path_append(char *path)
{
++include_list_length;
- size_t nbytes = include_list_length * sizeof(include_list[0]);
- include_list = (char **)realloc((void *)include_list, nbytes);
+ 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;
}
@@ -64,8 +73,8 @@ int main(int argc, char **argv)
switch (opt) {
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU soelim version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU soelim version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -149,7 +158,7 @@ int do_file(const char *filename)
whole_filename = filename;
whole_filename += '\0';
}
- else if (filename[0] == '/') {
+ else if (IS_ABSOLUTE(filename)) {
whole_filename = filename;
whole_filename += '\0';
errno = 0;
diff --git a/contrib/groff/soelim/soelim.man b/contrib/groff/soelim/soelim.man
index 7026f3ee3813..0d927f7719e3 100644
--- a/contrib/groff/soelim/soelim.man
+++ b/contrib/groff/soelim/soelim.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 Free Software Foundation, Inc.
+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
@@ -30,6 +30,10 @@ the original English.
[
.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
diff --git a/contrib/groff/src/devices/grotty/grotty.man b/contrib/groff/src/devices/grotty/grotty.man
index d8d6ebdeb0a1..51c6a498126f 100644
--- a/contrib/groff/src/devices/grotty/grotty.man
+++ b/contrib/groff/src/devices/grotty/grotty.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -28,6 +28,10 @@ grotty \- groff driver for typewriter-like devices
] [
.IR files \|.\|.\|.
]
+.PP
+It is possible to have whitespace between the
+.B \-F
+option and its parameter.
.SH DESCRIPTION
.B grotty
translates the output of GNU
@@ -39,10 +43,13 @@ should invoked by using the
.B groff
command
with a
-.B \-Tascii
-or
+.BR \-Tascii ,
.B \-Tlatin1
-option.
+or
+.B \-Tutf8
+option on ASCII based systems, and with
+.B \-Tcp1047
+on EBCDIC based hosts.
If no files are given,
.B grotty
will read the standard input.
@@ -118,9 +125,11 @@ Search the directory
for font and device description files;
.I name
is the name of the device, usually
-.B ascii
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
or
-.BR latin1 .
+.BR cp1047 .
.TP
.B \-h
Use horizontal tabs in the output.
@@ -172,22 +181,48 @@ Device description file for
.B ascii
device.
.TP
-.B @FONTDIR@/devascii/ F
+.BI @FONTDIR@/devascii/ F
Font description file for font
.I F
of
-.B ascii device.
+.B ascii
+device.
.TP
.B @FONTDIR@/devlatin1/DESC
Device description file for
.B latin1
device.
.TP
-.B @FONTDIR@/devlatin1/ F
+.BI @FONTDIR@/devlatin1/ F
+Font description file for font
+.I F
+of
+.B latin1
+device.
+.TP
+.B @FONTDIR@/devutf8/DESC
+Device description file for
+.B utf8
+device.
+.TP
+.BI @FONTDIR@/devutf8/ F
+Font description file for font
+.I F
+of
+.B utf8
+device.
+.TP
+.B @FONTDIR@/devcp1047/DESC
+Device description file for
+.B cp1047
+device.
+.TP
+.BI @FONTDIR@/devcp1047/ F
Font description file for font
.I F
of
-.B latin1 device.
+.B cp1047
+device.
.TP
.B @MACRODIR@/tmac.tty
Macros for use with
@@ -196,6 +231,10 @@ Macros for use with
.B @MACRODIR@/tmac.tty-char
Additional klugey character definitions for use with
.BR grotty .
+.LP
+Note that on EBCDIC hosts, only files for the
+.B cp1047
+device will be installed.
.SH BUGS
.LP
.B grotty
diff --git a/contrib/groff/src/libs/libgroff/illegal.cc b/contrib/groff/src/libs/libgroff/illegal.cc
index 10f4d5bd7d54..c1bdbc507966 100644
--- a/contrib/groff/src/libs/libgroff/illegal.cc
+++ b/contrib/groff/src/libs/libgroff/illegal.cc
@@ -3,6 +3,7 @@
// Table of illegal input characters.
char illegal_char_table[256]= {
+#ifndef IS_EBCDIC_HOST
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -19,4 +20,22 @@ char illegal_char_table[256]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#else
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#endif
};
diff --git a/contrib/groff/src/preproc/eqn/neqn.sh b/contrib/groff/src/preproc/eqn/neqn.sh
index 770376732b29..6a60d138391d 100644
--- a/contrib/groff/src/preproc/eqn/neqn.sh
+++ b/contrib/groff/src/preproc/eqn/neqn.sh
@@ -1,5 +1,5 @@
#!/bin/sh
# Provision of this shell script should not be taken to imply that use of
-# GNU eqn with groff -Tascii|-Tlatin1 is supported.
+# GNU eqn with groff -Tascii|-Tlatin1|-Tutf8|-Tcp1047 is supported.
exec @g@eqn -Tascii ${1+"$@"}
diff --git a/contrib/groff/src/roff/groff/groff.man b/contrib/groff/src/roff/groff/groff.man
index aa57f31f1de4..23dbf8e793b8 100644
--- a/contrib/groff/src/roff/groff/groff.man
+++ b/contrib/groff/src/roff/groff/groff.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1999 Free Software Foundation, Inc.
+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
@@ -31,55 +31,37 @@ the original English.
.SH NAME
groff \- front end for the groff document formatting system
.SH SYNOPSIS
+.nr a \n(.j
+.ad l
+.nr i \n(.i
+.in +\w'\fBgroff 'u
+.ti \niu
.B groff
-[
-.B \-abehilpstvzCENRSUVXZ
-]
-[
-.BI \-w name
-]
-[
-.BI \-W name
-]
-[
-.BI \-m name
-]
-[
-.BI \-F dir
-]
-[
-.BI \-I dir
-]
-[
-.BI \-T dev
-]
-[
-.BI \-f fam
-]
-[
-.BI \-M dir
-]
-[
-.BI \-d cs
-]
-[
-.BI \-r cn
-]
-[
-.BI \-n num
-]
-[
-.BI \-o list
-]
-[
-.BI \-P arg
-]
-[
-.BI \-L arg
-]
-[
-.IR files \|.\|.\|.\|
-]
+.de OP
+.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
+.el .RB "[\ " "\\$1" "\ ]"
+..
+.OP \-abeghilpstvzCEGNRSUVXZ
+.OP \-w name
+.OP \-W name
+.OP \-m name
+.OP \-F dir
+.OP \-I dir
+.OP \-T dev
+.OP \-f fam
+.OP \-M dir
+.OP \-d cs
+.OP \-r cn
+.OP \-n num
+.OP \-o list
+.OP \-P arg
+.OP \-L arg
+.RI "[\ " files\|.\|.\|. "\ ]"
+.br
+.ad \na
+.PP
+It is possible to have whitespace between a command line option and its
+parameter.
.SH DESCRIPTION
.B groff
is a front-end to the groff document formatting system.
@@ -105,11 +87,22 @@ For a 100dpi X11 previewer.
For typewriter-like devices.
.TP
.B latin1
-For typewriter-like devices using the ISO Latin-1 character set.
+For typewriter-like devices using the ISO Latin-1 (ISO 8859-1) character set.
+.TP
+.B utf8
+For typewriter-like devices using the Unicode (ISO 10646) character set with
+UTF-8 encoding.
+.TP
+.B cp1047
+For typewriter-like devices which use the EBCDIC code page IBM cp1047
+(e.g. OS/390 Unix).
.TP
.B lj4
For an HP LaserJet4-compatible (or other PCL5-compatible) printer.
.TP
+.B lbp
+For Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
+.TP
.B html
To produce HTML output.
.LP
@@ -125,6 +118,8 @@ The default device is
It can optionally preprocess with any of
.BR @g@pic ,
.BR @g@eqn ,
+.BR @g@grn ,
+.BR grap ,
.BR @g@tbl ,
.BR @g@refer ,
or
@@ -151,6 +146,12 @@ Preprocess with @g@eqn.
.B \-t
Preprocess with @g@tbl.
.TP
+.B \-g
+Preprocess with @g@grn.
+.TP
+.B \-G
+Preprocess with grap.
+.TP
.B \-p
Preprocess with @g@pic.
.TP
@@ -159,7 +160,7 @@ Preprocess with @g@soelim.
.TP
.BI \-I dir
This option is as described in
-.BR @g@soelim (@MAN1EXT@) .
+.BR @g@soelim (@MAN1EXT@).
This option implies the
.B \-s
option.
@@ -270,8 +271,8 @@ option to
and use the
.B \%\-msafer
macros with
-.BR @g@troff .
-(enabled by default)
+.B @g@troff
+(enabled by default).
.TP
.B \-U
Unsafe mode. Reverts to the old unsafe behaviour.
@@ -323,10 +324,12 @@ This also applies to
.BR tbl ,
.BR pic ,
.BR eqn ,
+.BR grn ,
.BR refer ,
and
.BR soelim .
It does not apply to
+.BR grap ,
.BR grops ,
.BR grodvi ,
.BR grotty ,
@@ -380,6 +383,28 @@ Font file for font
.I F
of device
.IR name .
+.LP
+Note that on EBCDIC hosts, output devices
+.BR ascii ,
+.BR latin1 ,
+and
+.B utf8
+aren't available.
+Similarly,
+.B cp1047
+is not available on ASCII based operating systems.
+.SH EXAMPLE
+To print the man page
+.B foo.1
+to the standard output using the latin-1 output device and
+.B less
+as the pager, the following command can be used:
+.IP
+.B groff -mandoc -Tlatin1 foo.1 | less
+.PP
+Alternatively, you can say
+.IP
+.B groff -m mandoc -Tlatin1 foo.1 | less
.SH AUTHOR
James Clark <jjc@jclark.com>
.SH BUGS
@@ -388,7 +413,7 @@ Include a complete, self-contained example
that will allow the bug to be reproduced,
and say which version of groff you are using.
.SH COPYRIGHT
-Copyright \(co 1989, 1990, 1991, 1992, 1999 Free Software Foundation, Inc.
+Copyright \(co 1989-2000 Free Software Foundation, Inc.
.LP
groff is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@ -406,17 +431,29 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.SH AVAILABILITY
The most recent released version of groff is always available for
anonymous ftp from ftp.gnu.org in the directory gnu/groff.
+.LP
+.B groff
+only supports the freely available
+.B grap
+implementation written by Ted Faber <faber@lunabase.org>.
+The actual version can be found at
+.IP
+\%http://www.lunabase.org/~faber/Vault/software/grap/
.SH "SEE ALSO"
.BR grog (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@),
-.BR @g@soelim (@MAN1EXT@) ,
+.BR @g@grn (@MAN1EXT@),
+.BR grap (1),
+.BR @g@soelim (@MAN1EXT@),
.BR @g@refer (@MAN1EXT@),
.BR grops (@MAN1EXT@),
.BR grodvi (@MAN1EXT@),
.BR grotty (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
+.BR grolbp (@MAN1EXT@),
.BR grohtml (@MAN1EXT@),
.BR gxditview (@MAN1EXT@),
.BR groff_font (@MAN5EXT@),
diff --git a/contrib/groff/src/roff/nroff/nroff.man b/contrib/groff/src/roff/nroff/nroff.man
index 4087ebe53a56..a01ea59d8333 100644
--- a/contrib/groff/src/roff/nroff/nroff.man
+++ b/contrib/groff/src/roff/nroff/nroff.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 Free Software Foundation, Inc.
+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
@@ -20,31 +20,26 @@ the original English.
.SH NAME
@g@nroff \- emulate nroff command with groff
.SH SYNOPSIS
+.nr a \n(.j
+.ad l
+.nr i \n(.i
+.in +\w'\fB@g@nroff 'u
+.ti \niu
.B @g@nroff
-[
-.B \-h
-]
-[
-.B \-i
-]
-[
-.BI \-m name
-]
-[
-.BI \-n num
-]
-[
-.BI \-o list
-]
-[
-.BI \-r cn
-]
-[
-.BI \-T name
-]
-[
-.I file\|.\|.\|.
-]
+.de OP
+.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
+.el .RB "[\ " "\\$1" "\ ]"
+..
+.OP \-h
+.OP \-i
+.OP \-m name
+.OP \-n num
+.OP \-o list
+.OP \-r cn
+.OP \-T name
+.RI "[\ " file\|.\|.\|. "\ ]"
+.br
+.ad \na
.SH DESCRIPTION
The
.B @g@nroff
@@ -54,9 +49,11 @@ command using groff.
The
.B \-T
option with an argument other than
-.B ascii
-and
-.B latin1
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
+or
+.B cp1047
will be ignored.
The
.B \-h
@@ -85,9 +82,16 @@ Options
.B \-S
(safer) and
.B \-U
-(unsafe) are passed to groff.
+(unsafe) are passed to
+.BR groff .
.B \-S
is passed by default.
+.SH NOTES
+This shell script is basically intended for use with
+.BR man (1),
+so warnings are suppressed.
+nroff-style character definitions (in the file tmac.tty-char) are also
+loaded to emulate unrepresentable glyphs.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
diff --git a/contrib/groff/src/roff/nroff/nroff.sh b/contrib/groff/src/roff/nroff/nroff.sh
index ee4e332c9108..b1cab83612a2 100755
--- a/contrib/groff/src/roff/nroff/nroff.sh
+++ b/contrib/groff/src/roff/nroff/nroff.sh
@@ -3,66 +3,81 @@
prog="$0"
# Default device.
-if test "X$LC_CTYPE" = "Xiso_8859_1" || test "X$LESSCHARSET" = "Xlatin1"
-then
- T=-Tlatin1
-else
- T=-Tascii
-fi
+# First try the "locale charmap" command, because it's most reliable.
+# On systems where it doesn't exist, look at the environment variables.
+case "`locale charmap 2>/dev/null`" in
+ UTF-8)
+ T=-Tutf8 ;;
+ ISO-8859-1)
+ T=-Tlatin1 ;;
+ IBM-1047)
+ T=-Tcp1047 ;;
+ *)
+ case "${LC_ALL-${LC_CTYPE-${LANG}}}" in
+ *.UTF-8)
+ T=-Tutf8 ;;
+ iso_8859_1 | *.ISO-8859-1)
+ T=-Tlatin1 ;;
+ *.IBM-1047)
+ T=-Tcp1047 ;;
+ *)
+ case "$LESSCHARSET" in
+ utf-8)
+ T=-Tutf8 ;;
+ latin1)
+ T=-Tlatin1 ;;
+ cp1047)
+ T=-Tcp1047 ;;
+ *)
+ T=-Tascii ;;
+ esac ;;
+ esac ;;
+esac
opts=
safer=-S
-for i
-do
- case $1 in
- -h)
- opts="$opts -P-h"
- ;;
- -[eq]|-s*)
- # ignore these options
- ;;
- -[mrnoT])
- echo "$prog: option $1 requires an argument" >&2
- exit 1
- ;;
- -i|-[mrno]*)
- opts="$opts $1";
- ;;
+# `for i; do' doesn't work with some versions of sh
- -Tascii|-Tlatin1)
- T=$1
- ;;
- -T*)
- # ignore other devices
- ;;
- -S)
- # safer behaviour
- safer=-S
- ;;
- -U)
- # unsafe behaviour
- safer=-U
- ;;
- -u*)
- # Solaris 2.2 `man' uses -u0; ignore it,
- # since `less' and `more' can use the emboldening info.
- ;;
- --)
- shift
- break
- ;;
- -)
- break
- ;;
- -*)
- echo "$prog: invalid option $1" >&2
- exit 1
- ;;
- *)
- break
- ;;
- esac
- shift
+for i
+ do
+ case $1 in
+ -h)
+ opts="$opts -P-h" ;;
+ -[eq] | -s*)
+ # ignore these options
+ ;;
+ -[mrnoT])
+ echo "$prog: option $1 requires an argument" >&2
+ exit 1 ;;
+ -i | -[mrno]*)
+ opts="$opts $1" ;;
+ -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047)
+ T=$1 ;;
+ -T*)
+ # ignore other devices
+ ;;
+ -S)
+ # safer behaviour
+ safer=-S ;;
+ -U)
+ # unsafe behaviour
+ safer=-U ;;
+ -u*)
+ # Solaris 2.2 `man' uses -u0; ignore it,
+ # since `less' and `more' can use the emboldening info.
+ ;;
+ --)
+ shift
+ break ;;
+ -)
+ break ;;
+ -*)
+ echo "$prog: invalid option $1" >&2
+ exit 1 ;;
+ *)
+ break ;;
+ esac
+ shift
done
# This shell script is intended for use with man, so warnings are
diff --git a/contrib/groff/tbl/Makefile.sub b/contrib/groff/tbl/Makefile.sub
index 8ab4a74785e0..224baffcf329 100644
--- a/contrib/groff/tbl/Makefile.sub
+++ b/contrib/groff/tbl/Makefile.sub
@@ -1,7 +1,12 @@
PROG=tbl
MAN1=tbl.n
XLIBS=$(LIBGROFF)
-OBJS=main.o table.o
-CCSRCS=main.cc table.cc
-HDRS=table.h
+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
index 3956a494bcef..5ff69e8914ff 100644
--- a/contrib/groff/tbl/main.cc
+++ b/contrib/groff/tbl/main.cc
@@ -229,14 +229,15 @@ void process_input_file(FILE *fp)
c = getc(fp);
}
putchar('\n');
- printf(".if '\\*(.T'html' \\X(graphic-start(\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()) {
- printf(".if '\\*(.T'html' \\X(graphic-end(\n");
fputs(".TE", stdout);
while ((c = getc(fp)) != '\n') {
if (c == EOF) {
@@ -334,7 +335,7 @@ struct options {
};
options::options()
-: flags(0), tab_char('\t'), decimal_point_char('.'), linesize(0)
+: flags(0), linesize(0), tab_char('\t'), decimal_point_char('.')
{
delim[0] = delim[1] = '\0';
}
@@ -1460,8 +1461,8 @@ int main(int argc, char **argv)
break;
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU tbl version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU tbl version %s\n", Version_string);
fflush(stderr);
break;
}
diff --git a/contrib/groff/tbl/table.cc b/contrib/groff/tbl/table.cc
index 893e1b36356d..354c7d885089 100644
--- a/contrib/groff/tbl/table.cc
+++ b/contrib/groff/tbl/table.cc
@@ -326,8 +326,8 @@ public:
};
table_entry::table_entry(const entry_modifier *m)
-: next(0), start_row(-1), end_row(-1), start_col(-1), end_col(-1), mod(m),
- input_lineno(-1), input_filename(0)
+: next(0), input_lineno(-1), input_filename(0),
+ start_row(-1), end_row(-1), start_col(-1), end_col(-1), mod(m)
{
}
@@ -445,7 +445,7 @@ int empty_entry::line_type()
}
text_entry::text_entry(char *s, const entry_modifier *m)
-: contents(s), simple_entry(m)
+: simple_entry(m), contents(s)
{
}
@@ -1009,7 +1009,7 @@ struct stuff {
virtual int is_double_line() { return 0; };
};
-stuff::stuff(int r) : row(r), next(0), printed(0)
+stuff::stuff(int r) : next(0), row(r), printed(0)
{
}
@@ -1029,7 +1029,7 @@ struct text_stuff : public stuff {
text_stuff::text_stuff(const string &s, int r, const char *fn, int ln)
-: contents(s), stuff(r), filename(fn), lineno(ln)
+: stuff(r), contents(s), filename(fn), lineno(ln)
{
}
@@ -1105,7 +1105,7 @@ struct vertical_rule {
};
vertical_rule::vertical_rule(int sr, int er, int c, int dbl, vertical_rule *p)
-: start_row(sr), end_row(er), col(c), is_double(dbl), next(p)
+: next(p), start_row(sr), end_row(er), col(c), is_double(dbl)
{
}
@@ -1199,11 +1199,11 @@ void vertical_rule::print()
}
table::table(int nc, unsigned f, int ls, char dpc)
-: ncolumns(nc), flags(f), linesize(ls), decimal_point_char(dpc),
- nrows(0), allocated_rows(0), entry(0), entry_list(0),
- entry_list_tailp(&entry_list),
- left_separation(0), right_separation(0), stuff_list(0), vline(0),
- vrule_list(0), row_is_all_lines(0), span_list(0)
+: 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;
@@ -1969,7 +1969,7 @@ void table::sum_columns(int start_col, int end_col)
}
horizontal_span::horizontal_span(int sc, int ec, horizontal_span *p)
-: start_col(sc), end_col(ec), next(p)
+: next(p), start_col(sc), end_col(ec)
{
}
diff --git a/contrib/groff/test-groff b/contrib/groff/test-groff
index 35fd0e07c20e..83492ea6ef32 100755
--- a/contrib/groff/test-groff
+++ b/contrib/groff/test-groff
@@ -2,25 +2,40 @@
# This script runs groff without requiring that it be installed.
# The current directory must be the build directory.
-builddir=.
+builddir=./src
srcdir=`echo $0 | sed -e 's;/[^/]*$;;'`
-if test ! -d groff || test ! -r groff/groff
+if test ! -d $builddir/roff/groff || test ! -r $builddir/roff/groff/groff
then
echo $0 must be run with the build directory as the current directory 2>&1
exit 1
fi
-PATH=$builddir/troff:$builddir/pic:$builddir/eqn:$builddir/tbl:$builddir/refer:$builddir/soelim:$builddir/grops:$builddir/grodvi:$builddir/grotty:$srcdir/$builddir/xditview:$PATH
+PATH=\
+$builddir/roff/troff:\
+$builddir/preproc/pic:\
+$builddir/preproc/eqn:\
+$builddir/preproc/tbl:\
+$builddir/preproc/grn:\
+$builddir/preproc/refer:\
+$builddir/preproc/soelim:\
+$builddir/devices/grops:\
+$builddir/devices/grodvi:\
+$builddir/devices/grotty:\
+$builddir/devices/grolj4:\
+$builddir/devices/grolbp:\
+$builddir/devices/grohtml:\
+$srcdir/$builddir/xditview:\
+$PATH
test -n "$srcdir" || srcdir=.
-XENVIRONMENT=`cd $srcdir; pwd`/xditview/GXditview.ad
+XENVIRONMENT=`cd $srcdir; pwd`/src/xditview/GXditview.ad
export XENVIRONMENT
GROFF_COMMAND_PREFIX=
-GROFF_FONT_PATH=$builddir:$srcdir
-GROFF_TMAC_PATH=$srcdir/tmac:$srcdir/troff
+GROFF_FONT_PATH=$builddir:$srcdir/font
+GROFF_TMAC_PATH=$srcdir/tmac:$srcdir/src/roff/troff
export PATH GROFF_COMMAND_PREFIX GROFF_FONT_PATH GROFF_TMAC_PATH
-exec $builddir/groff/groff ${1+"$@"}
+exec $builddir/roff/groff/groff ${1+"$@"}
diff --git a/contrib/groff/tfmtodit/Makefile.sub b/contrib/groff/tfmtodit/Makefile.sub
index aa430e2daf80..057bb3e66131 100644
--- a/contrib/groff/tfmtodit/Makefile.sub
+++ b/contrib/groff/tfmtodit/Makefile.sub
@@ -3,4 +3,4 @@ MAN1=tfmtodit.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
OBJS=tfmtodit.o
-CCSRCS=tfmtodit.cc
+CCSRCS=$(srcdir)/tfmtodit.cc
diff --git a/contrib/groff/tfmtodit/tfmtodit.cc b/contrib/groff/tfmtodit/tfmtodit.cc
index 18f9ed168431..ab3ab38fe051 100644
--- a/contrib/groff/tfmtodit/tfmtodit.cc
+++ b/contrib/groff/tfmtodit/tfmtodit.cc
@@ -57,6 +57,7 @@ both be zero. */
#include "error.h"
#include "assert.h"
#include "cset.h"
+#include "nonposix.h"
/* Values in the tfm file should be multiplied by this. */
@@ -125,7 +126,7 @@ public:
kern_iterator::kern_iterator(tfm *p)
-: t(p), i(-1), c(t->bc)
+: t(p), c(t->bc), i(-1)
{
}
@@ -273,7 +274,7 @@ int read4(unsigned char *&s)
int tfm::load(const char *file)
{
errno = 0;
- FILE *fp = fopen(file, "r");
+ FILE *fp = fopen(file, FOPEN_RB);
if (!fp) {
error("can't open `%1': %2", file, strerror(errno));
return 0;
@@ -413,7 +414,7 @@ int gf::load(const char *file)
int left_adj, right_adj;
const int gf_id_byte = 131;
errno = 0;
- FILE *fp = fopen(file, "r");
+ FILE *fp = fopen(file, FOPEN_RB);
if (!fp) {
error("can't open `%1': %2", file, strerror(errno));
return 0;
@@ -711,8 +712,8 @@ int main(int argc, char **argv)
}
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "tfmtodit version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "tfmtodit version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -750,7 +751,18 @@ int main(int argc, char **argv)
int len = strlen(internal_name);
if (len > 4 && strcmp(internal_name + len - 4, ".tfm") == 0)
internal_name[len - 4] = '\0';
- char *s = strrchr(internal_name, '/');
+ // 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)) {
diff --git a/contrib/groff/tfmtodit/tfmtodit.man b/contrib/groff/tfmtodit/tfmtodit.man
index f17c4414adaf..6e50aa28d6c9 100644
--- a/contrib/groff/tfmtodit/tfmtodit.man
+++ b/contrib/groff/tfmtodit/tfmtodit.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+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
@@ -28,19 +28,27 @@ the original English.
.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
-[
-.B \-sv
-]
-[
-.BI \-g gf_file
-]
-[
-.BI \-k skewchar
-]
+.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
diff --git a/contrib/groff/tmac/Makefile.sub b/contrib/groff/tmac/Makefile.sub
index 5fd7b4daa774..be06cc7c9201 100644
--- a/contrib/groff/tmac/Makefile.sub
+++ b/contrib/groff/tmac/Makefile.sub
@@ -1,24 +1,37 @@
-MAN7=groff_ms.n groff_man.n groff_me.n groff_msafer.n \
- groff_mdoc.n groff_mdoc.samples.n
+MAN5=\
+ groff_tmac.n
+MAN7=\
+ groff_ms.n \
+ groff_man.n \
+ groff_me.n \
+ groff_msafer.n \
+ groff_mdoc.n \
+ groff_mdoc.samples.n \
+ groff_markup.n
-NORMALFILES=tmac.andoc tmac.pic tmac.ps tmac.psnew tmac.psold tmac.pspic \
- tmac.psatk tmac.dvi tmac.tty tmac.tty-char tmac.X tmac.Xps tmac.latin1 \
- tmac.lj4 eqnrc troffrc tmac.safer tmac.html tmac.arkup
-SPECIALFILES=tmac.an tmac.s
+NORMALFILES=\
+ tmac.mandoc tmac.andoc tmac.pic tmac.ps tmac.psnew tmac.psold tmac.pspic \
+ tmac.psatk tmac.dvi tmac.tty tmac.tty-char tmac.X tmac.Xps tmac.latin1 \
+ tmac.lj4 eqnrc troffrc troffrc-end tmac.safer tmac.html tmac.markup \
+ tmac.arkup tmac.a4 tmac.trace tmac.me tmac.mdoc
+SPECIALFILES=tmac.an tmac.s tmac.man tmac.ms
STRIPFILES=tmac.e tmac.doc tmac.doc.old
MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms
mdocdir=$(tmacdir)/mdoc
-CLEANADD=stamp-strip stamp-wrap tmac.e-s tmac.doc-s tmac.doc.old-s \
- doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s *-wrap
+CLEANADD=\
+ stamp-strip stamp-wrap stamp-sed tmac.e-s tmac.doc-s tmac.doc.old-s \
+ doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s *-wrap \
+ tmac.man-sed tmac.ms-sed
tmac_s_prefix=
tmac_an_prefix=
tmac_wrap=
sys_tmac_prefix=
-all: stamp-strip stamp-wrap
+all: stamp-strip stamp-wrap stamp-sed
-install_data: $(NORMALFILES) $(SPECIALFILES) stamp-wrap stamp-strip man.local
- -test -d $(tmacdir) || mkdir $(tmacdir)
+install_data: $(NORMALFILES) $(SPECIALFILES) \
+ stamp-wrap stamp-strip stamp-sed man.local
+ -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
if test -n "$(tmac_wrap)"; then \
for m in ""$(tmac_wrap); do \
$(INSTALL_DATA) $$m-wrap $(tmacdir)/tmac.$$m; \
@@ -30,13 +43,17 @@ install_data: $(NORMALFILES) $(SPECIALFILES) stamp-wrap stamp-strip man.local
done
-rm -f $(tmacdir)/tmac.$(tmac_s_prefix)s
$(INSTALL_DATA) $(srcdir)/tmac.s $(tmacdir)/tmac.$(tmac_s_prefix)s
+ -rm -f $(tmacdir)/tmac.ms
+ $(INSTALL_DATA) tmac.ms-sed $(tmacdir)/tmac.ms
-rm -f $(tmacdir)/tmac.$(tmac_an_prefix)an
$(INSTALL_DATA) $(srcdir)/tmac.an $(tmacdir)/tmac.$(tmac_an_prefix)an
+ -rm -f $(tmacdir)/tmac.man
+ $(INSTALL_DATA) tmac.man-sed $(tmacdir)/tmac.man
for f in $(STRIPFILES); do \
rm -f $(tmacdir)/$$f; \
$(INSTALL_DATA) $$f-s $(tmacdir)/$$f; \
done
- -test -d $(mdocdir) || mkdir $(mdocdir)
+ -test -d $(mdocdir) || $(mkinstalldirs) $(mdocdir)
for f in $(MDOCFILES); do \
rm -f $(mdocdir)/$$f; \
$(INSTALL_DATA) $$f-s $(mdocdir)/$$f; \
@@ -62,6 +79,15 @@ stamp-wrap:
fi
touch $@
+stamp-sed: tmac.man tmac.ms
+ for f in tmac.man tmac.ms; do \
+ rm -f $$f-sed; \
+ sed -e "s;@TMAC_AN_PREFIX@;$(tmac_an_prefix);g" \
+ -e "s;@TMAC_S_PREFIX@;$(tmac_s_prefix);g" \
+ $(srcdir)/$$f > $$f-sed; \
+ done
+ touch $@
+
uninstall_sub:
-if test -n "$(tmac_wrap)"; then \
for m in ""$(tmac_wrap); do \
@@ -71,6 +97,7 @@ uninstall_sub:
-for f in $(NORMALFILES) $(STRIPFILES); do rm -f $(tmacdir)/$$f; done
-rm -f $(tmacdir)/tmac.$(tmac_s_prefix)s
-rm -f $(tmacdir)/tmac.$(tmac_an_prefix)an
+ -rm -f $(tmacdir)/tmac.man $(tmacdir)/tmac.ms
-if cmp -s $(tmacdir)/man.local $(srcdir)/man.local; then \
rm -f $(tmacdir)/man.local; \
fi
diff --git a/contrib/groff/tmac/eqnrc b/contrib/groff/tmac/eqnrc
index 4b263cfd6464..cfdbf3f9a67a 100644
--- a/contrib/groff/tmac/eqnrc
+++ b/contrib/groff/tmac/eqnrc
@@ -51,12 +51,13 @@ ifdef ps|X|html ! set draw_lines 1 !
ifdef ascii ! define n %1% !
ifdef latin1 ! define n %1% !
+ifdef utf8 ! define n %1% !
+ifdef cp1047 ! define n %1% !
ifdef n !
set nroff 1
!
undef X
-undef ps|X
+undef ps|X|html
undef n
-undef html
.EN
diff --git a/contrib/groff/tmac/groff_man.man b/contrib/groff/tmac/groff_man.man
index 57eb9ec4555b..14bd3b0ceafc 100644
--- a/contrib/groff/tmac/groff_man.man
+++ b/contrib/groff/tmac/groff_man.man
@@ -1,9 +1,34 @@
+.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.
+..
+.de TQ
+.br
+.ns
+.TP \\$1
+..
.TH GROFF_MAN @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
.
.SH NAME
.
-groff_man \- groff `an' macros to support generation of man pages
+groff_man \- groff `man' macros to support generation of man pages
+.
.SH SYNOPSIS
+.
.B groff
.B \-m@TMAC_AN_PREFIX@an
[
@@ -16,14 +41,60 @@ groff_man \- groff `an' macros to support generation of man pages
.SH DESCRIPTION
.
The
-.B tmac.an
+.B tmac.@TMAC_AN_PREFIX@an
macros used to generate man pages with
.I groff
were written by James Clark.
This document provides a brief summary of the use of each macro in that
package.
+.
+.SH OPTIONS
+.
+The
+.B man
+macros understand the following command line options (which define various
+registers).
+.TP
+.B \-rC1
+If more than one manual page is given on the command line, number the
+pages continuously, rather than starting each at\ 1.
+.TP
+.B \-rD1
+Double-sided printing.
+Footers for even and odd pages are formatted differently.
+.TP
+.BI \-rP nnn
+Enumeration of pages will start with
+.I nnn
+rather than with\ 1.
+.TP
+.BI \-rS xx
+Base document font size is
+.I xx
+points
+.RI ( xx
+can be 10, 11, or\ 12) rather than 10\ points.
.TP
-.BI .TP " title section " [ extra1 "] [" extra2 "] [" extra3 ]
+.BI \-rX nnn
+After page\ \c
+.IR nnn ,
+number pages as
+.IR nnn a,
+.IR nnn b,
+.IR nnn c,
+etc.
+For example, the option `\-rX2' will produce the following page numbers:
+1, 2, 2a, 2b, 2c, etc.
+.
+.SH USAGE
+.
+This section describes the available macros for manual pages.
+For further customization, put additional macros and requests into the file
+.B man.local
+which will be loaded immediately after
+.BR tmac.@TMAC_AN_PREFIX@an .
+.TP
+.BI .TH " title section " [ extra1 "] [" extra2 "] [" extra3 ]
Sets the title of the man page to
.I title
and the section to
@@ -33,22 +104,60 @@ The value
.I section
may also have a string appended, e.g. `.pm', to indicate a specific
subsection of the man pages.
+Both
+.I title
+and
+.I section
+are positioned at the left and right in the header line (with
+.I section
+in parentheses immediately appended to
+.IR title .
+.I extra1
+will be positioned in the middle of the footer line.
+.I extra2
+will be positioned at the left in the footer line (resp. at the left on
+even pages and at the right on odd pages if double-sided printing is
+active).
+.I extra3
+is centered in the header line.
+.IP
+For HTML output, headers and footers are completely supressed.
+.IP
+Additionally, this macro starts a new page; the new line number is\ 1 again
+(except if the `-rC1' option is given on the command line) -- this feature
+is intended only for formatting multiple man pages; a single man page should
+contain exactly one
+.B TH
+macro at the beginning of the file.
.TP
-.BI .SH " text for a heading"
-Sets up an unindented and unnumbered section heading.
-Prints out all the text following `.SH' up to the end of the line in bold
-face, with a size slightly smaller than that for indented section headings.
+.BI ".SH [" "text for a heading" ]
+Sets up an unnumbered section heading sticking out to the left.
+Prints out all the text following
+.B SH
+up to the end of the line (resp. the text in the next line if there is no
+argument to
+.BR SH )
+in bold face, one size larger than the base document size.
+Additionally, the left margin for the following text is reset to its default
+value.
.TP
-.BI .SS " text for a heading"
-Sets up an indented section heading.
-Prints out all the text following `.SS' up to the end of the line in bold
-face, with a size slightly larger than that for unindented section headings.
+.BI ".SS [" "text for a heading" ]
+Sets up an secondary, unnumbered section heading.
+Prints out all the text following
+.B SS
+up to the end of the line (resp. the text in the next line if there is no
+argument to
+.BR SS )
+in bold face, at the same size as the base document size.
+Additionally, the left margin for the following text is reset to its default
+value.
.TP
.BI ".TP [" nnn ]
-Sets up an indented paragraph.
+Sets up an indented paragraph with label.
The indentation is set to
.I nnn
-if that argument is supplied.
+if that argument is supplied (the default unit is `n' if omitted), otherwise
+it is set to the default indentation value.
The first line of text following this macro is interpreted as a string to be
printed flush-left, as it is appropriate for a label.
It is not interpreted as part of a paragraph, so there is no attempt to fill
@@ -58,72 +167,149 @@ paragraph starts at the same line (but indented), continuing on the
following lines.
If the label is wider than the indentation, then the descriptive part of the
paragraph begins on the line following the label, entirely indented.
-The `.TP' macro is the macro used for the explanations you are just reading.
+Note that neither font shape nor font size of the label is set to a default
+value; on the other hand, the rest of the text will have default font
+settings.
+The
+.B TP
+macro is the macro used for the explanations you are just reading.
.TP
-.BR ".LP " or " .PP " or " .P"
+.B .LP
+.TQ
+.B .PP
+.TQ
+.B .P
These macros are mutual aliases.
Any of them causes a line break at the current position, followed by a
-vertical space downwards by the amount that is set in the `PD' counter.
+vertical space downwards by the amount specified by the
+.B PD
+macro.
+The font size and shape are reset to the default value (10pt resp. Roman).
+Finally, the current left margin is restored.
.TP
.BI ".IP [" designator "] [" nnn ]
Sets up an indented paragraph, using
.I designator
as a tag to mark its beginning.
-The indentation is permanently set to
+The indentation is set to
.I nnn
-if that argument is supplied.
-To set the indentation back to the previous level, one must call some other
-macro that uses indented paragraphs, and explicitly provide it with the
-value of the previous indentation.
+if that argument is supplied (default unit is `n'), otherwise the default
+indentation value is used.
+Font size and face of the paragraph (but not the designator) are reset to
+its default values.
+To start an indented paragraph with a particular indentation but without a
+designator, use `""' (two doublequotes) as the second argument.
.IP
For example, the following paragraphs were all set up with bullets as the
-designator, using `.IP \\(bu 4':
+designator, using `.IP\ \\(bu\ 4':
+.RS
.IP \(bu 4
-`IP' is one of the three macros used in
-.B tmac.an
+.B IP
+is one of the three macros used in
+.B tmac.@TMAC_AN_PREFIX@an
to format lists.
.IP \(bu 4
-`HP' is another.
+.B HP
+is another.
This macro produces a paragraph with a left hanging indentation.
.IP \(bu 4
-`TP' is another.
-This macro produces an unindented label (given by the text on the first line
-following `TP'), followed by an indented paragraph with appropriately
-descriptive text.
+.B TP
+is another.
+This macro produces an unindented label followed by an indented paragraph.
+.RE
.TP
.BI ".HP [" nnn ]
-Sets up paragraphs with hanging left indentation.
+Sets up a paragraph with hanging left indentation.
The indentation is set to
.I nnn
-if that argument is supplied.
-The following pargraph illustrates the effect of this macro with the hanging
-indentation set to\ 2:
-.HP 2
-This is a pagraph following an invocation of the `.HP' macro.
+if that argument is supplied (default unit is `n'), otherwise the default
+indentation value is used.
+Font size and face are reset to its default values.
+The following paragraph illustrates the effect of this macro with hanging
+indentation set to\ 4:
+.RS
+.HP 4
+This is a paragraph following an invocation of the
+.B HP
+macro.
As you can see, it produces a paragraph where all lines but the first are
-flushed right and are shorter than the preceding lines.
+indented.
+.RE
+.TP
+.BI ".RS [" nnn ]
+This macro moves the left margin to the right by the value
+.I nnn
+if specified (default unit is `n'); otherwise the default indentation value
+is used.
+Calls to the
+.B RS
+macro can be nested.
+.TP
+.BI ".RE [" nnn ]
+This macro moves the left margin back to level
+.IR nnn ;
+if no argument is given, it moves one level back.
+The first level (i.e., no call to
+.B RS
+yet) has number\ 1, and each call to
+.B RS
+increases the level by\ 1.
+.PP
+To summarize, the following macros cause a line break with the insertion of
+vertical space (which amount can be changed with the
+.B PD
+macro):
+.BR SH ,
+.BR SS ,
+.BR TP ,
+.B LP
+.RB ( PP ,
+.BR P ),
+.BR IP ,
+and
+.BR HP .
+The macros
+.B RS
+and
+.B RE
+also cause a break but no insertion of vertical space.
.
.SH "MACROS TO SET FONTS"
.
+The standard font is Roman; the default text size is 10\ point.
.TP
-.BI .SM
+.BI ".SM [" text ]
Causes the text on the same line or the text on the next line to appear in a
font that is one point size smaller than the default font.
.TP
-.BI .SB
+.BI ".SB [" text ]
Causes the text on the same line or the text on the next line to appear in
-small boldface font.
+boldface font, one point size smaller than the default font.
.TP
.BI ".BI " text
Causes text on the same line to appear alternately in bold face and italic.
The text must be on the same line as the macro call.
-Thus `.BI this word and that' would cause `this' and `and' to appear in bold
-face, while `word' and `that' appear in italics.
+Thus
+.RS
+.IP
+\&.BI this "word and" that
+.PP
+would cause `this' and `that' to appear in bold face, while `word and'
+appears in italics.
+.RE
.TP
.BI ".IB " text
Causes text to appear alternately in italic and bold face.
The text must be on the same line as the macro call.
.TP
+.BI ".RI " text
+Causes text on the same line to appear alternately in roman and italic.
+The text must be on the same line as the macro call.
+.TP
+.BI ".IR " text
+Causes text on the same line to appear alternately in italic and roman.
+The text must be on the same line as the macro call.
+.TP
.BI ".BR " text
Causes text on the same line to appear alternately in bold face and roman.
The text must be on the same line as the macro call.
@@ -132,40 +318,124 @@ The text must be on the same line as the macro call.
Causes text on the same line to appear alternately in roman and bold face.
The text must be on the same line as the macro call.
.TP
-.BI ".R " text
-Causes text to appear in roman font.
+.BI ".R [" text ]
+Causes
+.I text
+to appear in roman font.
If no text is present on the line where the macro is called, then the text
of the next line appears in roman.
This is the default font to which text is returned at the end of processing
of the other macros.
.TP
-.BI ".B " text
-Causes text to appear in bold face.
+.BI ".B [" text ]
+Causes
+.I text
+to appear in bold face.
If no text is present on the line where the macro is called, then the text
of the next line appears in bold face.
.TP
-.BI ".I " text
-Causes text to appear in italic.
+.BI ".I [" text ]
+Causes
+.I text
+to appear in italic.
If no text is present on the line where the macro is called, then the text
of the next line appears in italic.
.
+.SH "MISCELLANEOUS"
+.
+The default indentation is 7.2n for all output devices except for
+.B grohtml
+which uses 1.2i instead.
+.TP
+.B .DT
+Sets tabs every 0.5 inches.
+Since this macro is always called during a
+.B TH
+request, it makes sense to call it only if the tab positions have been
+changed.
+.TP
+.BI ".PD [" nnn ]
+Adjusts the empty space before a new paragraph (resp. section).
+The optional argument gives the amount of space (default units are `v');
+without parameter, the value is reset to its default value (1\ line for tty
+devices, 0.4v\ otherwise).
+This affects the macros
+.BR SH ,
+.BR SS ,
+.BR TP ,
+.B LP
+(resp.\&
+.B PP
+and
+.BR P ),
+.BR IP ,
+and
+.BR HP .
+.PP
+The following strings are defined:
+.TP
+.B \e*S
+Switch back to the default font size.
+.TP
+.B \e*R
+The `registered' sign.
+.TP
+.B \e*(Tm
+The `trademark' sign.
+.TP
+.B \e*(lq
+.TQ
+.B \e*(rq
+Left and right quote.
+This is equal to `\e(lq' and `\e(rq', respectively.
+.PP
+If a preprocessor like
+.B @g@tbl
+or
+.B @g@eqn
+is needed, it has become usage to make the first line of the man page look
+like this:
+.PP
+.RS
+.BI .\e"\ word
+.RE
+.PP
+Note the single space character after the double quote.
+.I word
+consists of letters for the needed preprocessors: `e' for
+.BR @g@eqn ,
+`r' for
+.BR @g@refer ,
+and `t' for
+.BR @g@tbl .
+Modern implementations of the
+.B man
+program read this first line and automatically call the right
+preprocessor(s).
+.
.SH "SEE ALSO"
.
Since the
-.B tmac.an
+.B tmac.@TMAC_AN_PREFIX@an
macros consist of groups of
.I groff
requests, one can, in principle, supplement the functionality of the
-.B tmac.an
+.B tmac.@TMAC_AN_PREFIX@an
macros with individual
.I groff
requests where necessary.
A complete list of these requests is available on the WWW at
+.PP
.ce 1
http://www.cs.pdx.edu/~trent/gnu/groff/groff_toc.html
+.PP
+.BR @g@tbl (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@),
+.BR @g@refer (@MAN1EXT@),
+.BR man (1)
.
.SH AUTHOR
.
This manual page was originally written for the Debian GNU/Linux system by
-Susan G. Kleinmann <sgk@debian.org>, corrected by Werner Lemberg
+Susan G. Kleinmann <sgk@debian.org>, corrected and updated by Werner Lemberg
<wl@gnu.org>, and is now part of the GNU troff distribution.
diff --git a/contrib/groff/tmac/groff_markup.man b/contrib/groff/tmac/groff_markup.man
new file mode 100644
index 000000000000..46233cea6b97
--- /dev/null
+++ b/contrib/groff/tmac/groff_markup.man
@@ -0,0 +1,319 @@
+.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_tmac.man b/contrib/groff/tmac/groff_tmac.man
new file mode 100644
index 000000000000..9e1f8e057826
--- /dev/null
+++ b/contrib/groff/tmac/groff_tmac.man
@@ -0,0 +1,420 @@
+.\" -*- nroff -*-
+.ig /
+groff_tmac.5
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2000 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+
+Last update: 17 May 2000
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+./
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.if n \{\
+. mso tmac.tty-char
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.\" text lines in macro definitions or bracketed sections \{...\}
+.de text
+. if 1 \&\\$*\&
+..
+.
+.de BIR
+. ie (\\n[.$] < 3) \
+. BI $@
+. el \{\
+. ds @tmp@ \fB\\$1\fP\fI\\$2\fP
+. shift 2
+. text \\*[@tmp@]\fR\\$*\fP
+. rm @tmp@
+. \}
+..
+.
+.de 'char
+. ds @tmp@ `\f(CB\\$1\fP'
+. shift
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de option
+. ds @tmp@ \f(CB\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.als shellcommand option
+.
+.de argument
+. ds @tmp@ \f(CI\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de request
+. ds @tmp@ \f(CB\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff_tmac \- macro files in the roff typesetting system
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+The
+.BR roff (@MAN7EXT@)
+type-setting system provides a set of macro packages suitable for
+special kinds of documents. Each macro package stores its macros and
+definitions in a file called the package's
+.BR "tmac file" .
+The name is deduced from
+.RB ` T roff
+.BR MAC ros'.
+.LP
+The tmac files are normal roff source documents, except that they
+usually contain only definitions and setup commands, but no text. All
+tmac files are kept in a single or a small number of directories, the
+.B tmac
+directories.
+.\" --------------------------------------------------------------------
+.SH NAMING
+.\" --------------------------------------------------------------------
+In classical roff systems, there was a funny naming scheme.
+If the name of a macro package started with
+.'char m
+this letter was omitted, e.g., the macro package for the man pages
+.I man
+was called
+.I an
+and its macro file
+.IR tmac.an .
+.LP
+By a similar reasoning, macro packages that did not start with an
+.'char m
+were often referred to by adding an
+.'char m ,
+ e.g., the package corresponding to
+.I tmac.doc
+was called
+.I mdoc
+because the command-line for activating it reads
+.RS
+.LP
+.BIR "troff\ \-m" doc .
+.RE
+.LP
+Actual versions of
+.BR groff (@MAN1EXT@)
+provide both naming schemes for the inflicted macro packages, with and
+without the leading
+.'char m .
+So in
+.IR groff ,
+the
+.I man
+macro package may be specified as
+.RS
+.LP
+.BIR "groff\ \-m\ " man ,
+.br
+.BIR "groff\ \-m" an ,
+.br
+.BIR "groff\ \-m" man , or
+.br
+.BIR "groff\ \-m " an .
+.RE
+.LP
+The easiest way to find out which macro packages are available on a
+system is to check the content of the
+.I tmac
+directories.
+For example, a file called
+.BI tmac. anything
+determines a macro package named
+.IR anything .
+.LP
+In
+.IR groff ,
+most macro packages are described in man pages called
+.BR groff_<name> (@MAN7EXT@),
+with a leading
+.'char m
+for the classical packages.
+.\" --------------------------------------------------------------------
+.SH INCLUSION
+.\" --------------------------------------------------------------------
+There are several ways to use a macro package in documents. At
+run-time, the groff option
+.option \-m \ \c
+.argument name
+makes the definitions in the macro file
+.BI tmac. name
+available as described in the section
+.BR NAMING .
+.LP
+It is also possible to include the macro file into the document by using
+the groff requests
+.request .so
+or
+.request .mso .
+For
+.request .so
+the full filename of the macro file must be specified \(em including the
+directory where it is kept.
+If the macro file is stored in one of the tmac directories it is more
+convenient to use
+.request .mso
+instead because it additionally searches the tmac path for the filename.
+.LP
+Note that in order to resolve the
+.request .so
+and
+.request .mso
+requests the roff preprocessor
+.shellcommand soelim
+must be called. This can be done either directly by a pipeline on the
+command line or by using the
+.option \-s
+option of
+.shellcommand groff .
+.LP
+You can also supply the letter
+.'char s
+in the preprocessor word as described in section
+.BR CONVENTION .
+.LP
+For example, suppose a macro file is stored as
+.I /usr/share/groff/tmac/tmac.macros
+and is used in some document called
+.IR docu.roff .
+.LP
+At run-time, the formatter call for this is
+.RS
+.LP
+.ft CR
+.shellcommand "groff\ \-m"
+.argument macros
+.argument docu.roff
+.ft P
+.RE
+.LP
+To include the macro file directly in the document either
+.RS
+.ft CR
+\&\.mso tmac.macros
+.ft P
+.RE
+is used or
+.RS
+.ft CR
+\&\.so /usr/share/groff/tmac/tmac.macros
+.ft P
+.RE
+.LP
+In both cases, the formatter is called with
+.ft CR
+.RS
+groff\ \-s docu.roff
+.RE
+.ft P
+.
+.\" --------------------------------------------------------------------
+.SH CONVENTION
+.\" --------------------------------------------------------------------
+.LP
+There is a convention that is supported by many modern roff
+type-setters: the
+.B preprocessor word
+described in the following.
+.LP
+If the first line in a document is a comment, the first word (after the
+comment characters and a blank) constitutes the
+.B preprocessor
+.BR word .
+That means that the letters of this word are interpreted as
+abbreviations for those preprocessor commands that should be run
+when formatting the document. Mostly, only the letters corresponding to
+the options for the preprocessors are recognized,
+.'char e ,
+.'char G ,
+.'char g ,
+.'char p ,
+.'char R ,
+.'char s , and
+.'char t
+(see
+.BR roff (@MAN7EXT@)).
+.LP
+Besides being a good reminder for the user, some formatters (like the
+.BR man (1)
+program) are even able to automatically start the preprocessors
+specified in the preprocessor word, but do not bet on this.
+.\" --------------------------------------------------------------------
+.SH "WRITING A MACRO FILE"
+.\" --------------------------------------------------------------------
+Writing a groff macro file is easy. Design a set of macros, strings,
+registers, etc. Store them in a single file. Documents that use the
+macros include this macro file with the
+.request .so
+request as described in the
+.B INCLUSION
+section.
+.LP
+To use the tmac functionality, call the macro file
+.BI tmac. whatever
+and put it in some directory of the tmac path, cf. section
+.BR FILES .
+Then documents can include it with the
+.request .mso
+request or the
+.shellcommand "groff\ \-m"
+option as described in the
+.B INCLUSION
+section.
+.LP
+If your macros might be of general usage contact the groff maintainers
+to have them included in the groff
+.I contrib
+source directory.
+.LP
+Some general guidelines might be helpful in writing macros.
+.IP \(bu 2m
+Double all functional backslashes,
+.'char \e
+->
+.'char \e\e .
+.IP \(bu 2m
+All printable backslashes must be written as
+.'char \ee .
+.IP \(bu 2m
+Escape all dots,
+.'char .
+->
+.'char \e. .
+.IP \(bu 2m
+Make ample use of the non-printable character
+.'char \e&
+in text parts, esp. before
+.'char \e
+and at the beginning of a line, but not before a delayed command.
+.IP \(bu 2m
+Use the character
+.'char @
+in temporary variable names.
+.IP \(bu 2m
+Test your macros for text and graphical devices, e.g.,
+.I latin1
+and
+.IR ps .
+.\" --------------------------------------------------------------------
+.SH FILES
+.\" --------------------------------------------------------------------
+All macro names that want to use the tmac mechanism must be named
+according to the form
+.BIR tmac. name .
+.LP
+The macro files are kept in the
+.B tmac
+.BR directories ,
+all of which constitue the
+.B tmac
+.BR path.
+In accordance with the Filesystem Hierarchy Standard (FHS), the standard
+tmac directory location for groff is
+.IR /usr/share/groff/tmac ,
+a local installation will use
+.IR /usr/local/share/groff/tmac .
+Older systems used a subdirectory of
+.IR /usr/lib .
+Independently of the default tmac path, the tmac path actually used by a
+document can always be set by a shell environment variable, cf. section
+.BR ENVIRONMENT .
+.\" --------------------------------------------------------------------
+.SH ENVIRONMENT
+.\" --------------------------------------------------------------------
+.TP
+.B GROFF_TMAC_PATH
+A colon separated list of tmac directories in which to search for macro
+files, the
+.B tmac
+.BR path .
+If unset a default path is used as is outlined in the
+.B FILES
+section.
+.\" --------------------------------------------------------------------
+.SH BUGS
+.\" --------------------------------------------------------------------
+The groff documentation is in evolution at the moment. It is possible
+that small inconsistencies between different documents exist
+temporarily.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+This document is part of groff, the GNU roff distribution. It was
+written by Bernd Warken <bwarken@mayn.de>.
+.LP
+It is distributed under the terms of the FDL (GNU Free Documentation
+License) version 1.1 or later. You should have received a copy of the
+FDL on your system, it is also available on-line under
+.RS
+.LP
+.IR <http://www.gnu.org/copyleft/fdl.html> .
+.RE
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+The authoritative source of information for all details of the groff
+system is the groff
+.BR info (1)
+file.
+.LP
+For a groff overview, see
+.BR roff (@MAN7EXT@)
+and the file
+.I README
+in the groff source package.
+.LP
+The groff tmac macro packages are
+.BR groff_man (@MAN7EXT@),
+.BR groff_markup (@MAN7EXT@),
+.BR groff_mdoc (@MAN7EXT@),
+.BR groff_mdoc.samples (@MAN7EXT@),
+.BR groff_me (@MAN7EXT@),
+.BR groff_mm (@MAN7EXT@),
+.BR groff_mmroff (@MAN7EXT@),
+.BR groff_ms (@MAN7EXT@),
+.BR groff_msafer (@MAN7EXT@).
+.LP
+The groff language is described in
+.BR groff (@MAN7EXT@)
+and the formatters in
+.BR groff (@MAN1EXT@),
+.BR troff (@MAN1EXT@).
+.LP
+The Filesystem Hierarchy Standard (FHS) is available at
+.BR http://www.pathname.com/fhs/ .
+
diff --git a/contrib/groff/tmac/tmac.X b/contrib/groff/tmac/tmac.X
index 53dd59638788..4219b4a2ade6 100644
--- a/contrib/groff/tmac/tmac.X
+++ b/contrib/groff/tmac/tmac.X
@@ -31,7 +31,7 @@
\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\(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'
diff --git a/contrib/groff/tmac/tmac.an b/contrib/groff/tmac/tmac.an
index 144dbc87de4d..7d1224d390f5 100644
--- a/contrib/groff/tmac/tmac.an
+++ b/contrib/groff/tmac/tmac.an
@@ -1,355 +1,429 @@
-.\"Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
-.\" Written by James Clark (jjc@jclark.com)
+.\" Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+.\" Written by James Clark (jjc@jclark.com)
.\"
-.\"This file is part of groff.
+.\" This file is part of groff.
.\"
-.\"groff is free software; you can redistribute it and/or modify it under
-.\"the terms of the GNU General Public License as published by the Free
-.\"Software Foundation; either version 2, or (at your option) any later
-.\"version.
+.\" groff is free software; you can redistribute it and/or modify it under
+.\" the terms of the GNU General Public License as published by the Free
+.\" Software Foundation; either version 2, or (at your option) any later
+.\" version.
.\"
-.\"groff is distributed in the hope that it will be useful, but WITHOUT ANY
-.\"WARRANTY; without even the implied warranty of MERCHANTABILITY or
-.\"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-.\"for more details.
+.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY
+.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+.\" for more details.
.\"
-.\"You should have 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.
+.\" You should have 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
-.\" -rXnnn => number pages after nnn as nnna, nnnb, nnnc, ...
+.\" -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
-. ie '\*(.T'html' \{\
-. nr an-margin 0i
-. \}
-. el \{\
-. nr an-margin \\n[IN]
-. \}
+. 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
+. 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
-.ie '\*(.T'html' \{\
-. nr IN 1.3i
-.\}
-.el \{\
-. nr IN 7.2n
-.\}
-.nr LL 6.5i
-.PD
-.nr PS 10 \" normal point-size
-.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
-.\}
+.
+. 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
+. ta T .5i \" This sets tabs every .5 inches
..
+.
.de PD
-.ie \\n[.$] .nr PD (v;\\$1)
-.el .nr PD .4v>?\n[.V]
+. ie \\n[.$] .nr PD (v;\\$1)
+. el .nr PD (.4v >? \n[.V])
..
+.
.de an-header
-.an-init
-.ev 1
-.ie '\*(.T'html' \{\
-. tl ''''
-.\}
-.el \{\
-. sp .5i
-. tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\\*[an-title](\\*[an-section])'
-. sp |1i
-.\}
-.ev
-.ns
+. 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
+' bp
..
+.
.af an-page-letter a
+.
.de an-p-footer
-.ev 1
-.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 \\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]'
-.if '\*(.T'html' \{\
-. tl ''''
-.\}
-.ev
+. 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]-1
-.ft B
-.ne 2v+1u
-.if \\n[.$] \&\\$*
+. 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]
-.ft B
-.ne 2v+1u
-.if \\n[.$] \&\\$*
+. 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[.$] \&\\$*
+. it 1 an-trap
+. ft B
+. if \\n[.$] \&\\$*
..
+.
.de I
-.it 1 an-trap
-.ft I
-.if \\n[.$] \&\\$*
+. it 1 an-trap
+. ft I
+. if \\n[.$] \&\\$*
..
+.
.de SM
-.it 1 an-trap
-.ps -1
-.if \\n[.$] \&\\$*
+. it 1 an-trap
+. ps -1
+. if \\n[.$] \&\\$*
..
+.
.de SB
-.it 1 an-trap
-.ps -1
-.ft B
-.if \\n[.$] \&\\$*
+. 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
+. 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]
-.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
+. 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
+. 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]
-.ft R
-.in \\n[an-margin]u
-.nr an-prevailing-indent \\n[IN]
+. 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]
-. 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
+. 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]
-.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
+. 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
+. 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
+. 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
+. 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
-.\}
+. 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
+. 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
-.\}
+. 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
+. 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
+. 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
+. 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
+. 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
+. 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
+. 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.)
+.el .ds R (Reg.)
.ie c\[tm] .ds Tm \[tm]
-.el .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
index b8c94df257a9..ea3113d10f36 100644
--- a/contrib/groff/tmac/tmac.arkup
+++ b/contrib/groff/tmac/tmac.arkup
@@ -1,19 +1,16 @@
.\"
-.\" a simple set of macros to provide HTML documents with basic www functionality
-.\"
-.\" please can someone with more skill at creating macros improve on this
-.\" many thanks - Gaius
-.\"
-.\" suggestion: maybe when run with non -Thtml all the urls should appear as
-.\" references.
-.\"
-.\" some simple html additions to any macro set
+.\" 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' \X^html:\\$*^
+. if '\*(.T'html' \{\
+.\" the following line makes the vertical mode leave, so to say
+\&
+\X^html:\\$*^
+. \}
..
.de HTMLINDEX
-.if '\*(.T'html' \X^index:\\$*^
+. if '\*(.T'html' \X^index:\\$*^
..
.\"
.\" BODYCOLOR - $1 is foreground color
@@ -23,96 +20,77 @@
.\" $5 is the color of a visited hypertext link
.\"
.de BODYCOLOR
-. HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5>
+. 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>
+. 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>
-. \}
-. el \{\
-\\$1 (<url: \\$2>)
-. \}
-..
-.\"
-.\" LINK - $1 is the classical underlined blue text
-.\" $2 is the URL *with* the textual reference within a document
-.\"
-.\" example: .LINK "a nice heading" "#heading123"
-.\"
-.\" provides a link from "a nice heading" to the
-.\" textual name reference "heading123"
-.\"
-.\" .LINK "The GNU FSF" "" "www.gnu.org"
-.\"
-.\" deprecated - use the URL macro instead
-.\"
-.\"
-.de LINK
-. ie !'\\$3'' \{\
-. @error the LINK macro has changed, use the URL (or FTP if appropriate) macro here
-. @error you are advised to replace with URL or FTP macro "\\$1" "\\$3#\\$2"
-. URL "\\$1" "\\$3#\\$2"
-. \}
-. el \{\
-. ie '\*(.T'html' \{\
-. HTML <a href=\\$2>\\$1</a>
-. \}
-. el \{\
-. URL "\\$1" "\\$2"
-. \}
-. \}
+. 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>
-. \}
-. el \{\
-$1 (<ftp:\\$2>)
-. \}
+. 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
+.\" $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:
.\"
-.\" example .MAILTO fred@foo.bar "Fredrick Bloggs"
+.\" 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>"
-. \}
-. el \{\
-. HTML "<a href=mailto:\\$1>\\$2</a>"
-. \}
-. \}
-. el \{\
-\s-2\fB<email:\\$1>\fP\s+2
-. \}
+. 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>
+. HTML <a name="\\$1"></a>
..
.\"
.\" IMAGE - reference an image
@@ -121,22 +99,22 @@ $1 (<ftp:\\$2>)
.\" $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
-\fB\s-2<img src=\\$1>\fP\s+2
-. B2
-. \}
+. 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
@@ -161,18 +139,23 @@ $1 (<ftp:\\$2>)
.\" 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 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.doc b/contrib/groff/tmac/tmac.doc
index e575df7c3f31..18197f1b68cf 100644
--- a/contrib/groff/tmac/tmac.doc
+++ b/contrib/groff/tmac/tmac.doc
@@ -1536,7 +1536,7 @@
. if "\\$1"-literal" \&\\*(lI\c
. if "\\$1"-symbolic" \&\\*(sY\c
.\}
-.el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c)
+.el .tm Usage .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\\n(.c)
..
.de Ef
.ds mN Ef
diff --git a/contrib/groff/tmac/tmac.dvi b/contrib/groff/tmac/tmac.dvi
index 59c6df50d78e..634f49f9cc52 100644
--- a/contrib/groff/tmac/tmac.dvi
+++ b/contrib/groff/tmac/tmac.dvi
@@ -2,6 +2,8 @@
.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.
@@ -16,8 +18,16 @@
.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\(ci\h'\w'\(ci'u-\w'c'u/2u'c\h'\w'\(ci'u-\w'c'u/2u'
-.if !c\[rg] .char \[rg] \z\(ci\h'\w'\(ci'u-\w'r'u/2u'r\h'\w'\(ci'u-\w'r'u/2u'
+.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/'
diff --git a/contrib/groff/tmac/tmac.html b/contrib/groff/tmac/tmac.html
index cd8a518a7f29..239ce0e97d85 100644
--- a/contrib/groff/tmac/tmac.html
+++ b/contrib/groff/tmac/tmac.html
@@ -12,8 +12,8 @@
.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'
+.\" .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 \-
@@ -56,3 +56,5 @@
.\" 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
index f33ea2164ddc..b9c7473540ca 100644
--- a/contrib/groff/tmac/tmac.latin1
+++ b/contrib/groff/tmac/tmac.latin1
@@ -15,7 +15,7 @@
.latin1-tr \[char170] \(Of
.latin1-tr \[char171] \(Fo
.latin1-tr \[char172] \(no
-.latin1-tr \[char173] \(hy
+.latin1-tr \[char173] \[shc]
.latin1-tr \[char174] \(rg
.latin1-tr \[char175] \(a-
.latin1-tr \[char176] \(de
@@ -25,7 +25,7 @@
.latin1-tr \[char180] \(aa
.latin1-tr \[char181] \(*m
.latin1-tr \[char182] \(ps
-.latin1-tr \[char183] \(md
+.latin1-tr \[char183] \(pc
.latin1-tr \[char184] \(ac
.latin1-tr \[char185] \(S1
.latin1-tr \[char186] \(Om
diff --git a/contrib/groff/tmac/tmac.lbp b/contrib/groff/tmac/tmac.lbp
new file mode 100644
index 000000000000..3cba12c3ab09
--- /dev/null
+++ b/contrib/groff/tmac/tmac.lbp
@@ -0,0 +1,13 @@
+.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.man b/contrib/groff/tmac/tmac.man
new file mode 100644
index 000000000000..70abd5b56dc0
--- /dev/null
+++ b/contrib/groff/tmac/tmac.man
@@ -0,0 +1 @@
+.do mso tmac.@TMAC_AN_PREFIX@an
diff --git a/contrib/groff/tmac/tmac.mandoc b/contrib/groff/tmac/tmac.mandoc
new file mode 100644
index 000000000000..9318ad952c6a
--- /dev/null
+++ b/contrib/groff/tmac/tmac.mandoc
@@ -0,0 +1 @@
+.do mso tmac.andoc
diff --git a/contrib/groff/tmac/tmac.markup b/contrib/groff/tmac/tmac.markup
new file mode 100644
index 000000000000..3395ecac21a1
--- /dev/null
+++ b/contrib/groff/tmac/tmac.markup
@@ -0,0 +1 @@
+.do mso tmac.arkup
diff --git a/contrib/groff/tmac/tmac.mdoc b/contrib/groff/tmac/tmac.mdoc
new file mode 100644
index 000000000000..d814358a9922
--- /dev/null
+++ b/contrib/groff/tmac/tmac.mdoc
@@ -0,0 +1 @@
+.do mso tmac.doc
diff --git a/contrib/groff/tmac/tmac.me b/contrib/groff/tmac/tmac.me
new file mode 100644
index 000000000000..49738b51fb5b
--- /dev/null
+++ b/contrib/groff/tmac/tmac.me
@@ -0,0 +1 @@
+.do mso tmac.e
diff --git a/contrib/groff/tmac/tmac.ms b/contrib/groff/tmac/tmac.ms
new file mode 100644
index 000000000000..05f6fe45183e
--- /dev/null
+++ b/contrib/groff/tmac/tmac.ms
@@ -0,0 +1 @@
+.do mso tmac.@TMAC_S_PREFIX@s
diff --git a/contrib/groff/tmac/tmac.pspic b/contrib/groff/tmac/tmac.pspic
index b47e4fa4cdad..55e51b3680e2 100644
--- a/contrib/groff/tmac/tmac.pspic
+++ b/contrib/groff/tmac/tmac.pspic
@@ -1,15 +1,6 @@
.\" Define the PSPIC macro.
.\" When used other than with -Tps, it will draw a box around where
.\" the picture would go.
-.de ps-bb
-.nr ps-nargs \\n[.$]
-.if \\n[ps-nargs]=4 \{\
-. nr ps-llx 0\\$1
-. nr ps-lly 0\\$2
-. nr ps-urx 0\\$3
-. nr ps-ury 0\\$4
-.\}
-..
.de PSPIC
.nr ps-offset-mode 0
.if '\\$1'-L' \{\
@@ -26,12 +17,10 @@
. shift 2
.\}
.br
-.sy echo .ps-bb `psbb \\$1` >/tmp/psbb\\n[$$]
-.so /tmp/psbb\\n[$$]
-.sy rm /tmp/psbb\\n[$$]
-.if \\n[ps-nargs]=4 \{\
-. nr ps-wid (\\n[ps-urx]-\\n[ps-llx])
-. nr ps-ht (\\n[ps-ury]-\\n[ps-lly])
+.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)
@@ -54,7 +43,7 @@
\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[ps-llx] \\n[ps-lly] \\n[ps-urx] \\n[ps-ury] \\n[ps-deswid] \\*[ps-desht]'
+\\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
index 547f862b3703..6770b0dfb02a 100644
--- a/contrib/groff/tmac/tmac.s
+++ b/contrib/groff/tmac/tmac.s
@@ -70,8 +70,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.ds MONTH11 November
.ds MONTH12 December
.ds MO \\*[MONTH\n[mo]]
-.nr *year \n[yr]+1900
-.ds DY \n[dy] \*[MO] \n[*year]
+.ds DY \n[dy] \*[MO] \n[year]
.de ND
.if \\n[.$] .ds DY "\\$*
..
diff --git a/contrib/groff/tmac/tmac.safer b/contrib/groff/tmac/tmac.safer
index be348d5fec52..caabb5bf8aab 100644
--- a/contrib/groff/tmac/tmac.safer
+++ b/contrib/groff/tmac/tmac.safer
@@ -1,4 +1,6 @@
.\" 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'
@@ -8,3 +10,4 @@
.als pso unsafe
.als sy unsafe
.als pi unsafe
+.cp \n(_C
diff --git a/contrib/groff/tmac/tmac.tty b/contrib/groff/tmac/tmac.tty
index 419a68532078..115c9d305153 100644
--- a/contrib/groff/tmac/tmac.tty
+++ b/contrib/groff/tmac/tmac.tty
@@ -4,11 +4,12 @@
.\" Don't warn about non-existent fonts.
.warn \n[.warn]-(\n[.warn]/131072%2*131072)
.po 0
-.if c\[char173] .shc \[char173]
+.if c\[shc] .shc \[shc]
.de tty-char
.if !c\\$1 .char \\$1 "\\$2
..
-.if c\(md .tr \(bu\(md
+.ie c\(pc .tr \(bu\(pc
+.el .if c\(md .tr \(bu\(md
.tty-char \(bu \z+o
.tty-char \(14 1/4
.tty-char \(12 1/2
diff --git a/contrib/groff/tmac/tmac.tty-char b/contrib/groff/tmac/tmac.tty-char
index f66d7a858e51..e8a45f9f0a7b 100644
--- a/contrib/groff/tmac/tmac.tty-char
+++ b/contrib/groff/tmac/tmac.tty-char
@@ -1,8 +1,8 @@
.\" This file defines standard troff characters and some groff characters for
-.\" use with -Tascii and -Tlatin1.
+.\" use with -Tascii, -Tlatin1, -Tutf8, and -Tcp1047.
.\"
.\" These definitions are chosen so that, as far as possible, they:
-.\" - work with both -Tascii and -Tlatin1.
+.\" - work with all of -Tascii, -Tlatin1, -Tutf8, and -Tcp1047.
.\" - work on devices that display only the last overstruck character
.\" as well as on devices that support overstriking
.\" - represent the character's graphical shape (not its meaning)
@@ -85,7 +85,9 @@
.tty-char \(OR v
.tty-char \(uA \z=^
.tty-char \(dA \z=v
-.if c\(md .tty-char \(a. \(md
+.if c\(md .tty-char \(pc \(md
+.if c\(pc .tty-char \(md \(pc
+.if c\(pc .tty-char \(a. \(pc
.tty-char \(Im I
.tty-char \(Re R
.tty-char \(/L \z/L
@@ -128,6 +130,7 @@
.tty-char \(S3 3
.tty-char \(ps 9|
.tty-char \(md .
+.tty-char \(pc .
.tty-char \(ac ,
.tty-char \(S1 1
.tty-char \(Om \z_o
@@ -195,4 +198,5 @@
.\"tty-char \(:y \ij
.tty-char \[arrowvertex] |
.cp \n(_C
-.do mso tmac.latin1
+.if !'\*(.T'cp1047' \
+. do mso tmac.latin1
diff --git a/contrib/groff/tmac/troffrc b/contrib/groff/tmac/troffrc
index 19024438ea9a..e61319d09b21 100644
--- a/contrib/groff/tmac/troffrc
+++ b/contrib/groff/tmac/troffrc
@@ -12,13 +12,17 @@
.do ds troffrc!X100-12 tmac.X
.do ds troffrc!ascii tmac.tty
.do ds troffrc!latin1 tmac.tty
+.do ds troffrc!utf8 tmac.tty
+.do ds troffrc!cp1047 tmac.tty
.do ds troffrc!lj4 tmac.lj4
-.do ds troffrc!html tmac.html
+.do ds troffrc!lbp tmac.lbp
+.do ds troffrc!html tmac.arkup
.do if d troffrc!\*[.T] \
. do mso \*[troffrc!\*[.T]]
.do rm troffrc!ps troffrc!Xps troffrc!dvi troffrc!X75 troffrc!X75-12 \
-troffrc!X100 troffrc!X100-12 troffrc!lj4 troffrc!html
-.do tr \[char160]
+troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html
+.ie '\*(.T'cp1047' .do tr \[char65]
+.el .do tr \[char160]
.\" Set the hyphenation language to `us'.
.do hla us
.\" Load hyphenation patterns from `hyphen.us' (in the tmac directory).
diff --git a/contrib/groff/tmac/troffrc-end b/contrib/groff/tmac/troffrc-end
new file mode 100644
index 000000000000..edd23e4ff194
--- /dev/null
+++ b/contrib/groff/tmac/troffrc-end
@@ -0,0 +1,6 @@
+.\"
+.\" final startup file for troff
+.\" this file is parsed after all macro sets have been read
+.\"
+.if '\*(.T'html' .mso tmac.html
+.\" Don't let blank lines creep in here. \ No newline at end of file
diff --git a/contrib/groff/troff/Makefile.sub b/contrib/groff/troff/Makefile.sub
index dc67031fee2c..342ad5954a55 100644
--- a/contrib/groff/troff/Makefile.sub
+++ b/contrib/groff/troff/Makefile.sub
@@ -2,27 +2,54 @@ 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=env.cc node.cc input.cc div.cc symbol.cc dictionary.cc reg.cc \
- number.cc majorminor.cc
-HDRS=charinfo.h dictionary.h div.h env.h hvunits.h node.h reg.h request.h \
- symbol.h token.h troff.h
+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: ../VERSION
+majorminor.cc: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
@echo Making $@
@-rm -f $@
@echo const char \*major_version = \
- \"`sed -e 's/^\([^.]*\)\..*$$/\1/' $(srcdir)/../VERSION`\"\; >$@
+ \"`sed -e 's/^\([^.]*\)\..*$$/\1/' $(top_srcdir)/VERSION`\"\; >$@
@echo const char \*minor_version = \
- \"`sed -e 's/^[^.]*\.\([0-9]*\).*$$/\1/' $(srcdir)/../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) || mkdir $(datadir)
- -test -d $(datasubdir) || mkdir $(datasubdir)
- -test -d $(tmacdir) || mkdir $(tmacdir)
+ -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
diff --git a/contrib/groff/troff/TODO b/contrib/groff/troff/TODO
index 7e511235ecbb..3e6480b6435b 100644
--- a/contrib/groff/troff/TODO
+++ b/contrib/groff/troff/TODO
@@ -77,8 +77,6 @@ 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).
-Request to copy an environment into the current environment.
-
Variant of `.it' for which a line interrupted with \c counts as one
input line.
@@ -105,7 +103,7 @@ 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 (substring, length, search).
+Better string-processing support (search).
Generalized ligatures.
diff --git a/contrib/groff/troff/charinfo.h b/contrib/groff/troff/charinfo.h
index 9979d37757a6..a4ecd574828f 100644
--- a/contrib/groff/troff/charinfo.h
+++ b/contrib/groff/troff/charinfo.h
@@ -74,6 +74,7 @@ public:
void set_number(int);
int get_number();
int numbered();
+ symbol *get_symbol();
};
charinfo *get_charinfo(symbol);
@@ -163,3 +164,8 @@ inline int charinfo::first_time_not_found()
return 1;
}
}
+
+inline symbol *charinfo::get_symbol()
+{
+ return( &nm );
+}
diff --git a/contrib/groff/troff/column.cc b/contrib/groff/troff/column.cc
index fce389db113e..096f3811d53f 100644
--- a/contrib/groff/troff/column.cc
+++ b/contrib/groff/troff/column.cc
@@ -624,7 +624,7 @@ public:
const char *column_bottom_reg::get_string()
{
- return itoa(the_column->get_bottom().to_units());
+ return i_to_a(the_column->get_bottom().to_units());
}
class column_extra_space_reg : public reg {
@@ -634,7 +634,7 @@ public:
const char *column_extra_space_reg::get_string()
{
- return itoa(the_column->get_last_extra_space().to_units());
+ return i_to_a(the_column->get_last_extra_space().to_units());
}
class column_active_reg : public reg {
diff --git a/contrib/groff/troff/dictionary.cc b/contrib/groff/troff/dictionary.cc
index fc71e3c5c6b4..169536c6761b 100644
--- a/contrib/groff/troff/dictionary.cc
+++ b/contrib/groff/troff/dictionary.cc
@@ -38,7 +38,7 @@ static int is_good_size(int p)
return 1;
}
-dictionary::dictionary(int n) : threshold(0.5), factor(1.5), used(0), size(n)
+dictionary::dictionary(int n) : size(n), used(0), threshold(0.5), factor(1.5)
{
table = new association[n];
}
diff --git a/contrib/groff/troff/div.cc b/contrib/groff/troff/div.cc
index e5b4b589fbd8..013ea6692a6f 100644
--- a/contrib/groff/troff/div.cc
+++ b/contrib/groff/troff/div.cc
@@ -48,7 +48,7 @@ static vunits truncated_space;
static vunits needed_space;
diversion::diversion(symbol s)
-: nm(s), prev(0), vertical_position(V0), marked_place(V0), high_water_mark(V0)
+: prev(0), nm(s), vertical_position(V0), high_water_mark(V0), marked_place(V0)
{
}
@@ -235,8 +235,7 @@ void macro_diversion::output(node *nd, int retain_size,
mac->append(temp);
}
}
- if (!v.post_extra.is_zero())
- last_post_line_extra_space = v.post_extra.to_units();
+ last_post_line_extra_space = v.post_extra.to_units();
if (!retain_size) {
v.pre = vs;
v.post = post_vs;
@@ -284,10 +283,11 @@ void macro_diversion::copy_file(const char *filename)
}
top_level_diversion::top_level_diversion()
-: page_count(0), have_next_page_number(0), page_length(units_per_inch*11),
- page_offset(units_per_inch), prev_page_offset(units_per_inch),
- ejecting_page(0), page_trap_list(0), before_first_page(1), no_space_mode(0),
- page_number(0), last_page_count(-1)
+: 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)
{
}
@@ -338,8 +338,7 @@ void top_level_diversion::output(node *nd, int retain_size,
vertical_size v(vs, post_vs);
for (node *tem = nd; tem != 0; tem = tem->next)
tem->set_vertical_size(&v);
- if (!v.post_extra.is_zero())
- last_post_line_extra_space = v.post_extra.to_units();
+ last_post_line_extra_space = v.post_extra.to_units();
if (!retain_size) {
v.pre = vs;
v.post = post_vs;
@@ -437,7 +436,7 @@ void top_level_diversion::space(vunits n, int forced)
}
trap::trap(symbol s, vunits n, trap *p)
- : nm(s), next(p), position(n)
+ : next(p), position(n), nm(s)
{
}
@@ -914,7 +913,7 @@ int page_offset_reg::get_value(units *res)
const char *page_offset_reg::get_string()
{
- return itoa(topdiv->get_page_offset().to_units());
+ return i_to_a(topdiv->get_page_offset().to_units());
}
class page_length_reg : public reg {
@@ -931,7 +930,7 @@ int page_length_reg::get_value(units *res)
const char *page_length_reg::get_string()
{
- return itoa(topdiv->get_page_length().to_units());
+ return i_to_a(topdiv->get_page_length().to_units());
}
class vertical_position_reg : public reg {
@@ -954,7 +953,7 @@ const char *vertical_position_reg::get_string()
if (curdiv == topdiv && topdiv->before_first_page)
return "-1";
else
- return itoa(curdiv->get_vertical_position().to_units());
+ return i_to_a(curdiv->get_vertical_position().to_units());
}
class high_water_mark_reg : public reg {
@@ -971,7 +970,7 @@ int high_water_mark_reg::get_value(units *res)
const char *high_water_mark_reg::get_string()
{
- return itoa(curdiv->get_high_water_mark().to_units());
+ return i_to_a(curdiv->get_high_water_mark().to_units());
}
class distance_to_next_trap_reg : public reg {
@@ -988,7 +987,7 @@ int distance_to_next_trap_reg::get_value(units *res)
const char *distance_to_next_trap_reg::get_string()
{
- return itoa(curdiv->distance_to_next_trap().to_units());
+ return i_to_a(curdiv->distance_to_next_trap().to_units());
}
class diversion_name_reg : public reg {
@@ -1030,7 +1029,7 @@ public:
const char *next_page_number_reg::get_string()
{
- return itoa(topdiv->get_next_page_number());
+ return i_to_a(topdiv->get_next_page_number());
}
class page_ejecting_reg : public reg {
@@ -1040,7 +1039,7 @@ public:
const char *page_ejecting_reg::get_string()
{
- return itoa(topdiv->get_ejecting());
+ return i_to_a(topdiv->get_ejecting());
}
class constant_vunits_reg : public reg {
@@ -1056,7 +1055,7 @@ constant_vunits_reg::constant_vunits_reg(vunits *q) : p(q)
const char *constant_vunits_reg::get_string()
{
- return itoa(p->to_units());
+ return i_to_a(p->to_units());
}
class nl_reg : public variable_reg {
diff --git a/contrib/groff/troff/env.cc b/contrib/groff/troff/env.cc
index 07093b01e510..fbea78edab51 100644
--- a/contrib/groff/troff/env.cc
+++ b/contrib/groff/troff/env.cc
@@ -195,7 +195,7 @@ int font_size::nranges = 0;
extern "C" {
-static int compare_ranges(const void *p1, const void *p2)
+int compare_ranges(const void *p1, const void *p2)
{
return ((size_range *)p1)->min - ((size_range *)p2)->min;
}
@@ -430,6 +430,7 @@ void environment::set_font(symbol nm)
prev_fontno = tem;
}
else {
+ prev_fontno = fontno;
int n = symbol_fontno(nm);
if (n < 0) {
n = next_available_font_position();
@@ -438,7 +439,6 @@ void environment::set_font(symbol nm)
}
if (family->make_definite(n) < 0)
return;
- prev_fontno = fontno;
fontno = n;
}
}
@@ -511,7 +511,7 @@ void environment::set_char_slant(int n)
}
environment::environment(symbol nm)
-: name(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),
@@ -538,45 +538,45 @@ environment::environment(symbol nm)
line_spacing(1),
prev_indent(0),
indent(0),
- have_temporary_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),
- control_char('.'),
- no_break_control_char('\''),
- hyphen_indicator_char(0),
- spread_flag(0),
- line(0),
- pending_lines(0),
- discarding(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_multiple(1),
line_number_indent(0),
+ line_number_multiple(1),
no_number_count(0),
- tab_char(0),
- leader_char(charset_table['.']),
hyphenation_flags(1),
- dummy(0),
- leader_node(0),
-#ifdef WIDOW_CONTROL
- widow_control(0),
-#endif /* WIDOW_CONTROL */
hyphen_line_count(0),
hyphen_line_max(-1),
hyphenation_space(H0),
hyphenation_margin(H0),
- composite(0)
+ 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;
@@ -588,17 +588,21 @@ environment::environment(symbol nm)
}
environment::environment(const environment *e)
-: name(e->name), // so that eg `.if "\n[.ev]"0"' works
+: 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),
- prev_requested_size(e->prev_requested_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),
@@ -615,50 +619,119 @@ environment::environment(const environment *e)
line_spacing(e->line_spacing),
prev_indent(e->prev_indent),
indent(e->indent),
- have_temporary_indent(0),
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),
- 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),
+ 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_multiple(e->line_number_multiple),
line_number_indent(e->line_number_indent),
+ line_number_multiple(e->line_number_multiple),
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(1),
- 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),
+ hyphen_line_max(e->hyphen_line_max),
hyphenation_space(e->hyphenation_space),
hyphenation_margin(e->hyphenation_margin),
- composite(0)
-{
+ 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()
@@ -896,11 +969,11 @@ void environment_switch()
if (n >= 0 && n < NENVIRONMENTS) {
env_stack = new env_list(curenv, env_stack);
if (env_table[n] == 0)
- env_table[n] = new environment(itoa(n));
+ env_table[n] = new environment(i_to_a(n));
curenv = env_table[n];
}
else
- nm = itoa(n);
+ nm = i_to_a(n);
}
else
pop = 2;
@@ -935,6 +1008,33 @@ void environment_switch()
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");
@@ -2117,7 +2217,7 @@ const char *tab_stops::to_string()
}
char *ptr = buf;
for (p = initial_list; p; p = p->next) {
- strcpy(ptr, itoa(p->pos.to_units()));
+ strcpy(ptr, i_to_a(p->pos.to_units()));
ptr = strchr(ptr, '\0');
*ptr++ = 'u';
*ptr = '\0';
@@ -2138,7 +2238,7 @@ const char *tab_stops::to_string()
if (repeated_list)
*ptr++ = TAB_REPEAT_CHAR;
for (p = repeated_list; p; p = p->next) {
- strcpy(ptr, itoa(p->pos.to_units()));
+ strcpy(ptr, i_to_a(p->pos.to_units()));
ptr = strchr(ptr, '\0');
*ptr++ = 'u';
*ptr = '\0';
@@ -2521,7 +2621,7 @@ int int_env_reg::get_value(units *val)
const char *int_env_reg::get_string()
{
- return itoa((curenv->*func)());
+ return i_to_a((curenv->*func)());
}
vunits_env_reg::vunits_env_reg(VUNITS_FUNCP f) : func(f)
@@ -2536,7 +2636,7 @@ int vunits_env_reg::get_value(units *val)
const char *vunits_env_reg::get_string()
{
- return itoa((curenv->*func)().to_units());
+ return i_to_a((curenv->*func)().to_units());
}
hunits_env_reg::hunits_env_reg(HUNITS_FUNCP f) : func(f)
@@ -2551,7 +2651,7 @@ int hunits_env_reg::get_value(units *val)
const char *hunits_env_reg::get_string()
{
- return itoa((curenv->*func)().to_units());
+ return i_to_a((curenv->*func)().to_units());
}
string_env_reg::string_env_reg(STRING_FUNCP f) : func(f)
@@ -2602,9 +2702,9 @@ const char *sptoa(int sp)
assert(sp > 0);
assert(sizescale > 0);
if (sizescale == 1)
- return itoa(sp);
+ return i_to_a(sp);
if (sp % sizescale == 0)
- return itoa(sp/sizescale);
+ 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;
@@ -2628,7 +2728,7 @@ const char *sptoa(int sp)
for (t = decimal_point - power5; --t >= 0;)
factor *= 5;
if (factor == 1 || sp <= INT_MAX/factor)
- return iftoa(sp*factor, decimal_point);
+ return if_to_a(sp*factor, decimal_point);
}
}
double s = double(sp)/double(sizescale);
@@ -2642,7 +2742,7 @@ const char *sptoa(int sp)
val = v;
factor *= 10.0;
} while (++decimal_point < 10);
- return iftoa(int(val), decimal_point);
+ return if_to_a(int(val), decimal_point);
}
const char *environment::get_point_size_string()
@@ -2673,6 +2773,7 @@ void init_env_requests()
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);
@@ -2872,7 +2973,7 @@ struct trie_node {
};
trie_node::trie_node(char ch, trie_node *p)
-: c(ch), right(p), down(0), val(0)
+: c(ch), down(0), right(p), val(0)
{
}
@@ -2941,7 +3042,7 @@ struct operation {
};
operation::operation(int i, int j, operation *op)
-: num(i), distance(j), next(op)
+: next(op), distance(j), num(i)
{
}
diff --git a/contrib/groff/troff/env.h b/contrib/groff/troff/env.h
index c0cc90da172b..1db463daaeda 100644
--- a/contrib/groff/troff/env.h
+++ b/contrib/groff/troff/env.h
@@ -206,6 +206,7 @@ public:
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; }
diff --git a/contrib/groff/troff/input.cc b/contrib/groff/troff/input.cc
index 9d980403a7bd..529a70f1c296 100644
--- a/contrib/groff/troff/input.cc
+++ b/contrib/groff/troff/input.cc
@@ -37,6 +37,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
// Needed for getpid().
#include "posix.h"
+#include "nonposix.h"
+
#ifdef ISATTY_MISSING
#undef isatty
#define isatty(n) (1)
@@ -50,7 +52,8 @@ extern "C" {
#define USAGE_EXIT_CODE 1
#define MACRO_PREFIX "tmac."
-#define STARTUP_FILE "troffrc"
+#define INITIAL_STARTUP_FILE "troffrc"
+#define FINAL_STARTUP_FILE "troffrc-end"
#define DEFAULT_INPUT_STACK_LIMIT 1000
#ifndef DEFAULT_WARNING_MASK
@@ -127,6 +130,8 @@ 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;
@@ -157,6 +162,41 @@ 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()) {
@@ -263,8 +303,13 @@ public:
};
file_iterator::file_iterator(FILE *f, const char *fn, int po)
-: fp(f), filename(fn), lineno(1), newline_flag(0), popened(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()
@@ -365,8 +410,12 @@ void file_iterator::backtrace()
int file_iterator::set_location(const char *f, int ln)
{
- if (f)
+ if (f) {
filename = f;
+ if (!the_output)
+ init_output();
+ the_output->put_filename(f);
+ }
lineno = ln;
return 1;
}
@@ -1954,7 +2003,7 @@ static int transparent_translate(int cc)
case charinfo::TRANSLATE_HYPHEN_INDICATOR:
return ESCAPE_PERCENT;
}
- // This is realy ugly.
+ // This is really ugly.
ci = ci->get_translation(1);
if (ci) {
int c = ci->get_ascii_code();
@@ -2300,7 +2349,7 @@ private:
};
char_list::char_list()
-: head(0), tail(0), ptr(0), len(0)
+: ptr(0), len(0), head(0), tail(0)
{
}
@@ -2388,6 +2437,7 @@ node_list::~node_list()
}
struct macro_header {
+public:
int count;
char_list cl;
node_list nl;
@@ -2413,7 +2463,7 @@ macro::macro()
}
macro::macro(const macro &m)
-: filename(m.filename), lineno(m.lineno), p(m.p), length(m.length)
+: p(m.p), filename(m.filename), lineno(m.lineno), length(m.length)
{
if (p != 0)
p->count++;
@@ -2530,7 +2580,7 @@ public:
};
string_iterator::string_iterator(const macro &m, const char *p, symbol s)
-: lineno(1), mac(m), newline_flag(0), how_invoked(p), nm(s)
+: mac(m), how_invoked(p), newline_flag(0), lineno(1), nm(s)
{
count = mac.length;
if (count != 0) {
@@ -3015,7 +3065,7 @@ void read_request()
}
}
if (reading_from_terminal) {
- fputc(had_prompt ? ':' : '\007', stderr);
+ fputc(had_prompt ? ':' : '\a', stderr);
fflush(stderr);
}
input_stack::push(mi);
@@ -3502,6 +3552,44 @@ void substring_macro()
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);
@@ -3820,7 +3908,7 @@ static void do_width()
}
env.wrap_up_tab();
units x = env.get_input_line_position().to_units();
- input_stack::push(make_temp_iterator(itoa(x)));
+ input_stack::push(make_temp_iterator(i_to_a(x)));
env.width_registers();
curenv = oldenv;
}
@@ -3926,6 +4014,38 @@ static node *do_non_interpreted()
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;
@@ -3955,10 +4075,7 @@ node *do_special()
c = '\b';
else
c = tok.ch();
- if (c == '\0')
- error("%1 is illegal within \\X", tok.description());
- else
- mac.append(c);
+ encode_char(&mac, c);
}
return new special_node(mac);
}
@@ -4332,7 +4449,7 @@ void pipe_source()
}
buf[buf_used] = '\0';
errno = 0;
- FILE *fp = popen(buf, "r");
+ FILE *fp = popen(buf, POPEN_RT);
if (fp)
input_stack::push(new file_iterator(fp, symbol(buf).contents(), 1));
else
@@ -4343,6 +4460,193 @@ void pipe_source()
#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];
@@ -4418,7 +4722,7 @@ const char *input_char_description(int c)
case '\001':
return "a leader character";
case '\t':
- return "a tab character ";
+ return "a tab character";
case ' ':
return "a space character";
case '\0':
@@ -4576,7 +4880,7 @@ static void init_charset_table()
char buf[16];
strcpy(buf, "char");
for (int i = 0; i < 256; i++) {
- strcpy(buf + 4, itoa(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))
@@ -4883,7 +5187,7 @@ public:
const char *nargs_reg::get_string()
{
- return itoa(input_stack::nargs());
+ return i_to_a(input_stack::nargs());
}
class lineno_reg : public reg {
@@ -4897,7 +5201,7 @@ const char *lineno_reg::get_string()
const char *file;
if (!input_stack::get_location(0, &file, &line))
line = 0;
- return itoa(line);
+ return i_to_a(line);
}
@@ -4965,7 +5269,7 @@ constant_int_reg::constant_int_reg(int *q) : p(q)
const char *constant_int_reg::get_string()
{
- return itoa(*p);
+ return i_to_a(*p);
}
void abort_request()
@@ -5213,10 +5517,10 @@ static void process_macro_file(const char *mac)
process_input_stack();
}
-static void process_startup_file()
+static void process_startup_file(char *filename)
{
char *path;
- FILE *fp = macro_path.open_file(STARTUP_FILE, &path);
+ FILE *fp = macro_path.open_file(filename, &path);
if (fp) {
input_stack::push(new file_iterator(fp, symbol(path).contents()));
a_delete path;
@@ -5368,7 +5672,7 @@ int main(int argc, char **argv)
int fflag = 0;
int nflag = 0;
int safer_flag = 1; // safer by default
- int no_rc = 0; // don't process troffrc
+ int no_rc = 0; // don't process troffrc and troffrc-end
int next_page_number;
opterr = 0;
hresolution = vresolution = 1;
@@ -5377,8 +5681,8 @@ int main(int argc, char **argv)
switch(c) {
case 'v':
{
- extern const char *version_string;
- fprintf(stderr, "GNU troff version %s\n", version_string);
+ extern const char *Version_string;
+ fprintf(stderr, "GNU troff version %s\n", Version_string);
fflush(stderr);
break;
}
@@ -5511,7 +5815,7 @@ int main(int argc, char **argv)
delete tem;
}
if (!no_rc)
- process_startup_file();
+ process_startup_file(INITIAL_STARTUP_FILE);
if (safer_flag)
prepend_string("safer", &macros);
while (macros) {
@@ -5520,6 +5824,8 @@ int main(int argc, char **argv)
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)
@@ -5556,6 +5862,7 @@ static void init_registers()
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",
@@ -5607,6 +5914,7 @@ void init_input_requests()
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);
@@ -5628,6 +5936,7 @@ void init_input_requests()
#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));
@@ -5643,8 +5952,14 @@ void init_input_requests()
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);
@@ -5988,9 +6303,9 @@ charinfo *get_charinfo(symbol nm)
int charinfo::next_index = 0;
charinfo::charinfo(symbol s)
-: nm(s), hyphenation_code(0), translation(0), flags(0), ascii_code(0),
- special_translation(TRANSLATE_NONE), mac(0), not_found(0),
- transparent_translate(1)
+: 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++;
}
@@ -6059,7 +6374,7 @@ charinfo *get_charinfo_by_number(int n)
return ci;
}
else {
- symbol ns(itoa(n));
+ symbol ns(i_to_a(n));
charinfo *ci = (charinfo *)numbered_charinfo_dictionary.lookup(ns);
if (!ci) {
ci = new charinfo(UNNAMED_SYMBOL);
diff --git a/contrib/groff/troff/node.cc b/contrib/groff/troff/node.cc
index 5c1fa43aeebc..d53bf333ae11 100644
--- a/contrib/groff/troff/node.cc
+++ b/contrib/groff/troff/node.cc
@@ -18,6 +18,10 @@ You should have 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"
@@ -30,6 +34,25 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#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");
@@ -180,11 +203,10 @@ static font_info **font_table = 0;
static int font_table_size = 0;
font_info::font_info(symbol nm, int n, symbol enm, font *f)
-: internal_name(nm), external_name(enm), fm(f), number(n),
- is_constant_spaced(CONSTANT_SPACE_NONE),
- sf(0), is_bold(0), cond_bold_list(0),
- last_ligature_mode(1), last_kern_mode(1),
- last_tfont(0), last_size(0)
+: 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)
{
}
@@ -298,7 +320,7 @@ void font_info::set_conditional_bold(int fontno, hunits offset)
}
conditional_bold::conditional_bold(int f, hunits h, conditional_bold *x)
- : fontno(f), offset(h), next(x)
+ : next(x), fontno(f), offset(h)
{
}
@@ -631,6 +653,7 @@ class real_output_file : public output_file {
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:
@@ -640,6 +663,7 @@ public:
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);
};
@@ -719,6 +743,7 @@ public:
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; }
@@ -747,7 +772,7 @@ inline void troff_output_file::put(const char *s)
inline void troff_output_file::put(int i)
{
- put_string(itoa(i), fp);
+ put_string(i_to_a(i), fp);
}
void troff_output_file::start_special()
@@ -1067,6 +1092,14 @@ void troff_output_file::draw(char code, hvpair *point, int npoints,
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();
@@ -1142,7 +1175,7 @@ void troff_output_file::trailer(vunits page_length)
}
troff_output_file::troff_output_file()
-: current_height(0), current_slant(0), tbuf_len(0), nfont_positions(10),
+: current_slant(0), current_height(0), nfont_positions(10), tbuf_len(0),
begun_page(0)
{
font_position = new symbol[nfont_positions];
@@ -1175,12 +1208,17 @@ 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, "w")) != 0) {
+ if ((fp = popen(pipe_command, POPEN_WT)) != 0) {
piped = 1;
return;
}
@@ -1206,11 +1244,12 @@ real_output_file::~real_output_file()
fp = 0;
if (result < 0)
fatal("pclose failed");
- if ((result & 0x7f) != 0)
+ if (!WIFEXITED(result))
error("output process `%1' got fatal signal %2",
- pipe_command, result & 0x7f);
+ pipe_command,
+ WIFSIGNALED(result) ? WTERMSIG(result) : WSTOPSIG(result));
else {
- int exit_status = (result >> 8) & 0xff;
+ int exit_status = WEXITSTATUS(result);
if (exit_status != 0)
error("output process `%1' exited with status %2",
pipe_command, exit_status);
@@ -1267,6 +1306,14 @@ 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 */
@@ -1324,7 +1371,7 @@ public:
};
charinfo_node::charinfo_node(charinfo *c, node *x)
-: ci(c), node(x)
+: node(x), ci(c)
{
}
@@ -1491,7 +1538,7 @@ void glyph_node::operator delete(void *p)
void ligature_node::operator delete(void *p)
{
- delete p;
+ delete[] (char *)p;
}
glyph_node::glyph_node(charinfo *c, tfont *t, node *x)
@@ -1697,7 +1744,7 @@ node *ligature_node::add_self(node *n, hyphen_list **p)
}
kern_pair_node::kern_pair_node(hunits n, node *first, node *second, node *x)
- : node(x), n1(first), n2(second), amount(n)
+ : node(x), amount(n), n1(first), n2(second)
{
}
@@ -2044,7 +2091,7 @@ node *node::add_italic_correction(hunits *width)
}
italic_corrected_node::italic_corrected_node(node *nn, hunits xx, node *p)
-: n(nn), x(xx), node(p)
+: node(p), n(nn), x(xx)
{
assert(n != 0);
}
@@ -2380,7 +2427,7 @@ void zero_width_node::vertical_extent(vunits *min, vunits *max)
node_list_vertical_extent(n, min, max);
}
-overstrike_node::overstrike_node() : max_width(H0), list(0)
+overstrike_node::overstrike_node() : list(0), max_width(H0)
{
}
@@ -2416,7 +2463,7 @@ hunits overstrike_node::width()
return max_width;
}
-bracket_node::bracket_node() : max_width(H0), list(0)
+bracket_node::bracket_node() : list(0), max_width(H0)
{
}
@@ -2428,7 +2475,8 @@ bracket_node::~bracket_node()
node *bracket_node::copy()
{
bracket_node *on = new bracket_node;
- node *last, *tem;
+ node *last = 0;
+ node *tem;
for (tem = list; tem; tem = tem->next) {
if (tem->next)
tem->next->last = tem;
@@ -3293,7 +3341,7 @@ hvpair::hvpair()
}
draw_node::draw_node(char c, hvpair *p, int np, font_size s)
- : code(c), npoints(np), sz(s)
+ : npoints(np), sz(s), code(c)
{
point = new hvpair[npoints];
for (int i = 0; i < npoints; i++)
@@ -3969,7 +4017,7 @@ const char *italic_corrected_node::type()
left_italic_corrected_node::left_italic_corrected_node(node *x)
-: n(0), node(x)
+: node(x), n(0)
{
}
@@ -4396,7 +4444,7 @@ void font_position()
}
font_family::font_family(symbol s)
-: nm(s), map_size(10)
+: map_size(10), nm(s)
{
map = new int[map_size];
for (int i = 0; i < map_size; i++)
@@ -4832,7 +4880,7 @@ public:
const char *next_available_font_position_reg::get_string()
{
- return itoa(next_available_font_position());
+ return i_to_a(next_available_font_position());
}
class printing_reg : public reg {
diff --git a/contrib/groff/troff/node.h b/contrib/groff/troff/node.h
index fdfe36d4e1e4..b509557590a5 100644
--- a/contrib/groff/troff/node.h
+++ b/contrib/groff/troff/node.h
@@ -440,7 +440,7 @@ node *copy_node_list(node *);
int get_bold_fontno(int f);
inline hyphen_list::hyphen_list(unsigned char code, hyphen_list *p)
-: hyphenation_code(code), next(p), hyphen(0), breakable(0)
+: hyphen(0), breakable(0), hyphenation_code(code), next(p)
{
}
@@ -466,6 +466,7 @@ public:
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 */
diff --git a/contrib/groff/troff/reg.cc b/contrib/groff/troff/reg.cc
index a9eec052e8aa..79e780627781 100644
--- a/contrib/groff/troff/reg.cc
+++ b/contrib/groff/troff/reg.cc
@@ -66,15 +66,29 @@ 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 itoa(value);
+ return i_to_a(value);
else if (width > sizeof(buf) - 2)
- sprintf(buf, "%.*d", sizeof(buf) - 2, int(value));
+ sprintf(buf, "%.*d", int(sizeof(buf) - 2), int(value));
else
sprintf(buf, "%.*d", width, int(value));
break;
@@ -88,7 +102,7 @@ static const char *number_value_to_ascii(int value, char format, int width)
int n = int(value);
if (n >= 40000 || n <= -40000) {
error("magnitude of `%1' too big for i or I format", n);
- return itoa(n);
+ return i_to_a(n);
}
if (n == 0) {
*p++ = '0';
@@ -167,10 +181,11 @@ static const char *number_value_to_ascii(int value, char format, int width)
d = 26;
n -= d;
n /= 26;
- *p++ = format + d - 1;
+ *p++ = format == 'a' ? lowercase_array[d - 1] :
+ uppercase_array[d - 1];
}
*p-- = 0;
- char *q = buf[0] == '-' ? buf+1 : buf;
+ char *q = buf[0] == '-' ? buf + 1 : buf;
while (q < p) {
char temp = *q;
*q = *p;
diff --git a/contrib/groff/troff/request.h b/contrib/groff/troff/request.h
index 2334a4638f6f..57031756c0e0 100644
--- a/contrib/groff/troff/request.h
+++ b/contrib/groff/troff/request.h
@@ -73,8 +73,6 @@ extern void init_env_requests();
extern void init_hyphen_requests();
extern void init_request(const char *s, REQUEST_FUNCP f);
-extern int no_break_flag; // indicates whether request was invoked with . or '
-
class charinfo;
class environment;
diff --git a/contrib/groff/troff/token.h b/contrib/groff/troff/token.h
index 5a7d44092ea1..f6707f2a4886 100644
--- a/contrib/groff/troff/token.h
+++ b/contrib/groff/troff/token.h
@@ -68,6 +68,7 @@ public:
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();
@@ -124,6 +125,11 @@ inline int token::space()
return type == TOKEN_SPACE;
}
+inline int token::special()
+{
+ return type == TOKEN_SPECIAL;
+}
+
inline int token::nspaces()
{
if (type == TOKEN_SPACE)
diff --git a/contrib/groff/troff/troff.man b/contrib/groff/troff/troff.man
index 4d54afd690f8..616dcade2347 100644
--- a/contrib/groff/troff/troff.man
+++ b/contrib/groff/troff/troff.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1999 Free Software Foundation, Inc.
+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
@@ -33,7 +33,7 @@ the original English.
.\" The BSD man macros can't handle " in arguments to font change macros,
.\" so use \(ts instead of ".
.tr \(ts"
-.TH @G@TROFF 1 "@MDATE@" "Groff Version @VERSION@"
+.TH @G@TROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
@g@troff \- format documents
.SH SYNOPSIS
@@ -62,6 +62,9 @@ the original English.
.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 troff ,
@@ -81,7 +84,7 @@ approximation of the typeset output.
Print a backtrace with each warning or error message. This backtrace
should help track down the cause of the error. The line numbers given
in the backtrace may not always be correct:
-.B troff 's
+.BR troff 's
idea of line numbers
gets confused by
.B as
@@ -142,9 +145,10 @@ as the default font family.
Read in the file
.BI tmac. name\fR.
Normally this will be searched for in @MACRODIR@.
-By default is used the
+By default, the
.I safer
-macro (reverted using -U ).
+macro is used (this can be reverted using
+.BR \-U ).
.TP
.B \-U
Unsafe option, avoids default use of
@@ -153,7 +157,9 @@ macro.
.TP
.B \-R
Don't load
-.BR troffrc .
+.B troffrc
+and
+.BR troffrc-end .
.TP
.BI \-n num
Number the first page
@@ -473,7 +479,7 @@ is a numeric expression with a default scale indicator of
.TQ
.BI \eV[ xxx ]
Interpolate the contents of the environment variable
-.I xxx ,
+.IR xxx ,
as returned by
.BR getenv (3).
.B \eV
@@ -877,6 +883,12 @@ sourced by
are interpreted.
.RE
.TP
+.BI .evc\ xx
+Copy the contents of environment
+.I xx
+to the current environment.
+No pushing or popping of environents will be done.
+.TP
.BI .fam\ xx
Set the current font family to
.IR xx .
@@ -1047,12 +1059,19 @@ If
.I n
is non-zero or missing, enable pairwise kerning, otherwise disable it.
.TP
+.BI .length\ xx\ string
+Compute the length of
+.I string
+and return it in the number register
+.I xx
+(which is not necessarily defined before).
+.TP
.BI .mso\ file
The same as the
.B so
request except that
.I file
-is searched for in the same way that
+is searched for in the same directories as
.BI tmac. name
is searched for when the
.BI \-m name
@@ -1092,8 +1111,25 @@ exists, append to it instead of truncating it.
Print the names and contents of all currently defined number registers
on stderr.
.TP
+.BI .psbb \ filename
+Get the bounding box of a PostScript image
+.IR filename .
+This file must conform to Adobe's Document Structuring Conventions; the
+command looks for a
+.B %%BoundingBox
+comment to extract the bounding box values.
+After a successful call, the coordinates (in PostScript units) of the lower
+left and upper right corner can be found in the registers
+.BR \en[llx] ,
+.BR \en[lly] ,
+.BR \en[urx] ,
+and
+.BR \en[ury] ,
+respectively.
+If some error has occurred, the four registers are set to zero.
+.TP
.BI .pso \ command
-This is behaves like the
+This behaves like the
.B so
request except that input comes from the standard output of
.IR command .
@@ -1220,6 +1256,25 @@ The styles command in the
file controls which font positions
(if any) are initially associated with styles rather than fonts.
.TP
+.BI .substring\ xx\ n1\ [ n2 ]
+Replace the string in register
+.I xx
+with the substring defined by the indices
+.I n1
+and
+.IR n2 .
+The first character in the string has index one.
+If
+.I n2
+is omitted, it is taken to be equal to the string's length. If the
+index value
+.I n1
+or
+.I n2
+is negative or zero, it will be counted from the end of the string,
+going backwards: The last character has index 0, the character before
+the last character has index -1, etc.
+.TP
.BI .tkf\ f\ s1\ n1\ s2\ n2
Enable track kerning for font
.IR f .
@@ -1639,6 +1694,21 @@ then
.B \en(.y
will contain
.BR 03 .
+.TP
+.B \en(.Y
+The revision number of groff.
+.TP
+.B \en[llx]
+.TQ
+.B \en[lly]
+.TQ
+.B \en[urx]
+.TQ
+.B \en[ury]
+These four registers are set by the
+.B \&.psbb
+request and contain the bounding box values (in PostScript units) of a given
+PostScript image.
.LP
The following registers are set by the
.B \ew
@@ -1676,7 +1746,32 @@ If greater than 0, the maximum number of objects on the input stack.
If less than or equal to 0, there is no limit on the number of objects
on the input stack. With no limit, recursion can continue until
virtual memory is exhausted.
+.TP
+.B \en[year]
+The current year.
+Note that the traditional
+.B troff
+number register
+.B \en(yr
+is the current year minus 1900.
.SS Miscellaneous
+.B @g@troff
+predefines a single (read/write) string-based register,
+.BR \e*(.T ,
+which contains the argument given to the
+.B -T
+command line option, namely the current output device (for example,
+.I latin1
+or
+.IR ascii ).
+Note that this is not the same as the (read-only) number register
+.B \en(.T
+which is defined to be\ 1 if
+.B troff
+is called with the
+.B -T
+command line option, and zero otherwise. This behaviour is different to
+Unix troff.
.LP
Fonts not listed in the
.SM DESC
@@ -2034,7 +2129,10 @@ after these.
.SH FILES
.Tp \w'@FONTDIR@/devname/DESC'u+3n
.B @MACRODIR@/troffrc
-Initialization file
+Initialization file (called before any other macro package).
+.TP
+.B @MACRODIR@/troffrc-end
+Initialization file (called after any other macro package).
.TP
.BI @MACRODIR@/tmac. name
Macro files
@@ -2049,14 +2147,18 @@ Font file for font
of device
.IR name .
.SH "SEE ALSO"
-.BR groff (@MAN1EXT@)
+.BR groff (@MAN1EXT@),
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@),
+.BR @g@refer (@MAN1EXT@),
+.BR @g@soelim (@MAN1EXT@),
+.BR @g@grn (@MAN1EXT@),
.BR grops (@MAN1EXT@),
.BR grodvi (@MAN1EXT@),
.BR grotty (@MAN1EXT@),
.BR grohtml (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
.BR groff_font (@MAN5EXT@),
.BR groff_out (@MAN5EXT@),
.BR groff_char (@MAN7EXT@)
diff --git a/contrib/groff/win32-diffs b/contrib/groff/win32-diffs
new file mode 100644
index 000000000000..055c7335d857
--- /dev/null
+++ b/contrib/groff/win32-diffs
@@ -0,0 +1,3049 @@
+diff -aruN groff/Makefile.msc groff.win32/Makefile.msc
+--- groff/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/Makefile.msc Wed May 17 09:15:07 2000
+@@ -0,0 +1,37 @@
++
++
++MAKECMD = $(MAKE) -nologo -f makefile.msc
++
++
++all:
++ cd src\libs\libdriver
++ $(MAKECMD)
++ cd ..\libgroff
++ $(MAKECMD)
++ cd ..\..\roff\troff
++ $(MAKECMD)
++ cd ..\..\preproc\eqn
++ $(MAKECMD)
++ cd ..\pic
++ $(MAKECMD)
++ cd ..\tbl
++ $(MAKECMD)
++ cd ..\..\devices\grolj4
++ $(MAKECMD)
++ cd ..\grotty
++ $(MAKECMD)
++ cd ..\grops
++ $(MAKECMD)
++ cd ..\grodvi
++ $(MAKECMD)
++ cd ..\..\..
++ -del bin\*.orig
++ copy src\devices\grodvi\grodvi.exe bin
++ copy src\devices\grolj4\grolj4.exe bin
++ copy src\devices\grops\grops.exe bin
++ copy src\devices\grotty\grotty.exe bin
++ copy src\preproc\eqn\eqn.exe bin
++ copy src\preproc\pic\pic.exe bin
++ copy src\preproc\tbl\tbl.exe bin
++ copy src\roff\troff\troff.exe bin
++ copy src\roff\troff\hyphen.us tmac
+diff -aruN groff/bin/gs.cmd groff.win32/bin/gs.cmd
+--- groff/bin/gs.cmd Thu Jan 1 00:00:00 1970
++++ groff.win32/bin/gs.cmd Wed May 17 08:57:48 2000
+@@ -0,0 +1,2 @@
++@echo off
++gswin32c -sDEVICE=ljet3 -sOutputFile=%1.jep -q -dNOPAUSE %1.ps <nul
+diff -aruN groff/bin/nroff.cmd groff.win32/bin/nroff.cmd
+--- groff/bin/nroff.cmd Thu Jan 1 00:00:00 1970
++++ groff.win32/bin/nroff.cmd Wed May 17 08:57:48 2000
+@@ -0,0 +1,2 @@
++@echo off
++troff -Tascii %1 %2 %3 %4 %5 %6 %7 %8 %9 |grotty
+diff -aruN groff/bin/troff-dvi.cmd groff.win32/bin/troff-dvi.cmd
+--- groff/bin/troff-dvi.cmd Thu Jan 1 00:00:00 1970
++++ groff.win32/bin/troff-dvi.cmd Wed May 17 08:57:48 2000
+@@ -0,0 +1,2 @@
++@echo off
++troff -Tdvi %1 %2 %3 %4 %5 %6 %7 %8 %9 |grodvi
+diff -aruN groff/bin/troff-lj.cmd groff.win32/bin/troff-lj.cmd
+--- groff/bin/troff-lj.cmd Thu Jan 1 00:00:00 1970
++++ groff.win32/bin/troff-lj.cmd Wed May 17 08:57:48 2000
+@@ -0,0 +1,2 @@
++@echo off
++troff -Tlj4 %1 %2 %3 %4 %5 %6 %7 %8 %9 |grolj4
+diff -aruN groff/bin/troff-ps.cmd groff.win32/bin/troff-ps.cmd
+--- groff/bin/troff-ps.cmd Thu Jan 1 00:00:00 1970
++++ groff.win32/bin/troff-ps.cmd Wed May 17 08:57:48 2000
+@@ -0,0 +1,2 @@
++@echo off
++troff -Tps %1 %2 %3 %4 %5 %6 %7 %8 %9 |grops
+diff -aruN groff/font/devascii/B groff.win32/font/devascii/B
+--- groff/font/devascii/B Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devascii/B Wed May 17 08:57:48 2000
+@@ -0,0 +1,166 @@
++name B
++internalname 2
++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
++aa "
++fm "
++aq "
++( 24 0 0050
++) 24 0 0051
++* 24 0 0052
++** "
+++ 24 0 0053
++pl "
++, 24 0 0054
++\- 24 0 0055
++hy "
++- "
++mi "
++en "
++. 24 0 0056
++/ 24 0 0057
++sl "
++f/ "
++0 24 0 0060
++1 24 0 0061
++2 24 0 0062
++3 24 0 0063
++4 24 0 0064
++5 24 0 0065
++6 24 0 0066
++7 24 0 0067
++8 24 0 0070
++9 24 0 0071
++: 24 0 0072
++; 24 0 0073
++< 24 0 0074
++la "
++fo "
++= 24 0 0075
++eq "
++> 24 0 0076
++ra "
++fc "
++? 24 0 0077
++@ 24 0 0100
++at "
++A 24 0 0101
++*A "
++B 24 0 0102
++*B "
++C 24 0 0103
++D 24 0 0104
++E 24 0 0105
++*E "
++F 24 0 0106
++G 24 0 0107
++H 24 0 0110
++*Y "
++I 24 0 0111
++*I "
++J 24 0 0112
++K 24 0 0113
++*K "
++L 24 0 0114
++M 24 0 0115
++*M "
++N 24 0 0116
++*N "
++O 24 0 0117
++ci "
++*O "
++P 24 0 0120
++*R "
++Q 24 0 0121
++R 24 0 0122
++S 24 0 0123
++T 24 0 0124
++*T "
++U 24 0 0125
++V 24 0 0126
++W 24 0 0127
++X 24 0 0130
++*X "
++Y 24 0 0131
++*U "
++Z 24 0 0132
++*Z "
++[ 24 0 0133
++lB "
++\ 24 0 0134
++rs "
++] 24 0 0135
++rB "
++a^ 24 0 0136
++^ "
++ha "
++_ 24 0 0137
++ru "
++ul "
++` 24 0 0140
++oq "
++ga "
++a 24 0 0141
++b 24 0 0142
++c 24 0 0143
++d 24 0 0144
++e 24 0 0145
++f 24 0 0146
++g 24 0 0147
++h 24 0 0150
++i 24 0 0151
++.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
++mu "
++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 "
+diff -aruN groff/font/devascii/BI groff.win32/font/devascii/BI
+--- groff/font/devascii/BI Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devascii/BI Wed May 17 08:57:48 2000
+@@ -0,0 +1,166 @@
++name BI
++internalname 3
++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
++aa "
++fm "
++aq "
++( 24 0 0050
++) 24 0 0051
++* 24 0 0052
++** "
+++ 24 0 0053
++pl "
++, 24 0 0054
++\- 24 0 0055
++hy "
++- "
++mi "
++en "
++. 24 0 0056
++/ 24 0 0057
++sl "
++f/ "
++0 24 0 0060
++1 24 0 0061
++2 24 0 0062
++3 24 0 0063
++4 24 0 0064
++5 24 0 0065
++6 24 0 0066
++7 24 0 0067
++8 24 0 0070
++9 24 0 0071
++: 24 0 0072
++; 24 0 0073
++< 24 0 0074
++la "
++fo "
++= 24 0 0075
++eq "
++> 24 0 0076
++ra "
++fc "
++? 24 0 0077
++@ 24 0 0100
++at "
++A 24 0 0101
++*A "
++B 24 0 0102
++*B "
++C 24 0 0103
++D 24 0 0104
++E 24 0 0105
++*E "
++F 24 0 0106
++G 24 0 0107
++H 24 0 0110
++*Y "
++I 24 0 0111
++*I "
++J 24 0 0112
++K 24 0 0113
++*K "
++L 24 0 0114
++M 24 0 0115
++*M "
++N 24 0 0116
++*N "
++O 24 0 0117
++ci "
++*O "
++P 24 0 0120
++*R "
++Q 24 0 0121
++R 24 0 0122
++S 24 0 0123
++T 24 0 0124
++*T "
++U 24 0 0125
++V 24 0 0126
++W 24 0 0127
++X 24 0 0130
++*X "
++Y 24 0 0131
++*U "
++Z 24 0 0132
++*Z "
++[ 24 0 0133
++lB "
++\ 24 0 0134
++rs "
++] 24 0 0135
++rB "
++a^ 24 0 0136
++^ "
++ha "
++_ 24 0 0137
++ru "
++ul "
++` 24 0 0140
++oq "
++ga "
++a 24 0 0141
++b 24 0 0142
++c 24 0 0143
++d 24 0 0144
++e 24 0 0145
++f 24 0 0146
++g 24 0 0147
++h 24 0 0150
++i 24 0 0151
++.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
++mu "
++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 "
+diff -aruN groff/font/devascii/DESC groff.win32/font/devascii/DESC
+--- groff/font/devascii/DESC Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devascii/DESC Wed May 17 08:57:48 2000
+@@ -0,0 +1,8 @@
++res 240
++hor 24
++vert 40
++unitwidth 10
++sizes 10 0
++fonts 4 R I B BI
++tcommand
++postpro grotty
+diff -aruN groff/font/devascii/I groff.win32/font/devascii/I
+--- groff/font/devascii/I Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devascii/I Wed May 17 08:57:48 2000
+@@ -0,0 +1,166 @@
++name I
++internalname 1
++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
++aa "
++fm "
++aq "
++( 24 0 0050
++) 24 0 0051
++* 24 0 0052
++** "
+++ 24 0 0053
++pl "
++, 24 0 0054
++\- 24 0 0055
++hy "
++- "
++mi "
++en "
++. 24 0 0056
++/ 24 0 0057
++sl "
++f/ "
++0 24 0 0060
++1 24 0 0061
++2 24 0 0062
++3 24 0 0063
++4 24 0 0064
++5 24 0 0065
++6 24 0 0066
++7 24 0 0067
++8 24 0 0070
++9 24 0 0071
++: 24 0 0072
++; 24 0 0073
++< 24 0 0074
++la "
++fo "
++= 24 0 0075
++eq "
++> 24 0 0076
++ra "
++fc "
++? 24 0 0077
++@ 24 0 0100
++at "
++A 24 0 0101
++*A "
++B 24 0 0102
++*B "
++C 24 0 0103
++D 24 0 0104
++E 24 0 0105
++*E "
++F 24 0 0106
++G 24 0 0107
++H 24 0 0110
++*Y "
++I 24 0 0111
++*I "
++J 24 0 0112
++K 24 0 0113
++*K "
++L 24 0 0114
++M 24 0 0115
++*M "
++N 24 0 0116
++*N "
++O 24 0 0117
++ci "
++*O "
++P 24 0 0120
++*R "
++Q 24 0 0121
++R 24 0 0122
++S 24 0 0123
++T 24 0 0124
++*T "
++U 24 0 0125
++V 24 0 0126
++W 24 0 0127
++X 24 0 0130
++*X "
++Y 24 0 0131
++*U "
++Z 24 0 0132
++*Z "
++[ 24 0 0133
++lB "
++\ 24 0 0134
++rs "
++] 24 0 0135
++rB "
++a^ 24 0 0136
++^ "
++ha "
++_ 24 0 0137
++ru "
++ul "
++` 24 0 0140
++oq "
++ga "
++a 24 0 0141
++b 24 0 0142
++c 24 0 0143
++d 24 0 0144
++e 24 0 0145
++f 24 0 0146
++g 24 0 0147
++h 24 0 0150
++i 24 0 0151
++.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
++mu "
++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 "
+diff -aruN groff/font/devascii/R groff.win32/font/devascii/R
+--- groff/font/devascii/R Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devascii/R Wed May 17 08:57:48 2000
+@@ -0,0 +1,165 @@
++name R
++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
++aa "
++fm "
++aq "
++( 24 0 0050
++) 24 0 0051
++* 24 0 0052
++** "
+++ 24 0 0053
++pl "
++, 24 0 0054
++\- 24 0 0055
++hy "
++- "
++mi "
++en "
++. 24 0 0056
++/ 24 0 0057
++sl "
++f/ "
++0 24 0 0060
++1 24 0 0061
++2 24 0 0062
++3 24 0 0063
++4 24 0 0064
++5 24 0 0065
++6 24 0 0066
++7 24 0 0067
++8 24 0 0070
++9 24 0 0071
++: 24 0 0072
++; 24 0 0073
++< 24 0 0074
++la "
++fo "
++= 24 0 0075
++eq "
++> 24 0 0076
++ra "
++fc "
++? 24 0 0077
++@ 24 0 0100
++at "
++A 24 0 0101
++*A "
++B 24 0 0102
++*B "
++C 24 0 0103
++D 24 0 0104
++E 24 0 0105
++*E "
++F 24 0 0106
++G 24 0 0107
++H 24 0 0110
++*Y "
++I 24 0 0111
++*I "
++J 24 0 0112
++K 24 0 0113
++*K "
++L 24 0 0114
++M 24 0 0115
++*M "
++N 24 0 0116
++*N "
++O 24 0 0117
++ci "
++*O "
++P 24 0 0120
++*R "
++Q 24 0 0121
++R 24 0 0122
++S 24 0 0123
++T 24 0 0124
++*T "
++U 24 0 0125
++V 24 0 0126
++W 24 0 0127
++X 24 0 0130
++*X "
++Y 24 0 0131
++*U "
++Z 24 0 0132
++*Z "
++[ 24 0 0133
++lB "
++\ 24 0 0134
++rs "
++] 24 0 0135
++rB "
++a^ 24 0 0136
++^ "
++ha "
++_ 24 0 0137
++ru "
++ul "
++` 24 0 0140
++oq "
++ga "
++a 24 0 0141
++b 24 0 0142
++c 24 0 0143
++d 24 0 0144
++e 24 0 0145
++f 24 0 0146
++g 24 0 0147
++h 24 0 0150
++i 24 0 0151
++.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
++mu "
++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 "
+diff -aruN groff/font/devdvi/DESC groff.win32/font/devdvi/DESC
+--- groff/font/devdvi/DESC Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devdvi/DESC Wed May 17 08:57:48 2000
+@@ -0,0 +1,10 @@
++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 -aruN groff/font/devlatin1/B groff.win32/font/devlatin1/B
+--- groff/font/devlatin1/B Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devlatin1/B Wed May 17 08:57:48 2000
+@@ -0,0 +1,356 @@
++name B
++internalname 2
++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 "
++( 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 -aruN groff/font/devlatin1/BI groff.win32/font/devlatin1/BI
+--- groff/font/devlatin1/BI Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devlatin1/BI Wed May 17 08:57:48 2000
+@@ -0,0 +1,356 @@
++name BI
++internalname 3
++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 "
++( 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 -aruN groff/font/devlatin1/DESC groff.win32/font/devlatin1/DESC
+--- groff/font/devlatin1/DESC Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devlatin1/DESC Wed May 17 08:57:48 2000
+@@ -0,0 +1,8 @@
++res 240
++hor 24
++vert 40
++unitwidth 10
++sizes 10 0
++fonts 4 R I B BI
++tcommand
++postpro grotty
+diff -aruN groff/font/devlatin1/I groff.win32/font/devlatin1/I
+--- groff/font/devlatin1/I Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devlatin1/I Wed May 17 08:57:48 2000
+@@ -0,0 +1,356 @@
++name I
++internalname 1
++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 "
++( 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 -aruN groff/font/devlatin1/R groff.win32/font/devlatin1/R
+--- groff/font/devlatin1/R Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devlatin1/R Wed May 17 08:57:48 2000
+@@ -0,0 +1,355 @@
++name R
++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 "
++( 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 -aruN groff/font/devlj4/DESC groff.win32/font/devlj4/DESC
+--- groff/font/devlj4/DESC Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devlj4/DESC Wed May 17 08:57:48 2000
+@@ -0,0 +1,12 @@
++res 600
++unitwidth 12700
++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
++papersize letter
+diff -aruN groff/font/devps/DESC groff.win32/font/devps/DESC
+--- groff/font/devps/DESC Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devps/DESC Wed May 17 08:57:48 2000
+@@ -0,0 +1,13 @@
++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
++broken 7
++paperlength 792000
+diff -aruN groff/font/devps/prologue groff.win32/font/devps/prologue
+--- groff/font/devps/prologue Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devps/prologue Wed May 17 08:57:48 2000
+@@ -0,0 +1,155 @@
++%!PS-Adobe-3.0 Resource-ProcSet
++/setpacking where{
++pop
++currentpacking
++true setpacking
++}if
++/grops 120 dict dup begin
++/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
++/SF{
++findfont exch
++[exch dup 0 exch 0 exch neg 0 0]makefont
++dup setfont
++[exch/setfont cvx]cvx bind def
++}bind def
++/MF{
++findfont
++[5 2 roll
++0 3 1 roll
++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
++/MANUAL{
++statusdict begin/manualfeed true store end
++}bind def
++/PLG{
++gsave newpath clippath pathbbox grestore
++exch pop add exch pop
++}bind def
++/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
++/DA{
++newpath arcn stroke
++}bind def
++/SN{
++transform
++.25 sub exch .25 sub exch
++round .25 add exch round .25 add exch
++itransform
++}bind def
++/DL{
++SN
++moveto
++SN
++lineto stroke
++}bind def
++/DC{
++newpath 0 360 arc closepath
++}bind def
++/TM matrix def
++/DE{
++TM currentmatrix pop
++translate scale newpath 0 0 .5 0 360 arc closepath
++TM setmatrix
++}bind def
++/RC/rcurveto load def
++/RL/rlineto load def
++/ST/stroke load def
++/MT/moveto load def
++/CL/closepath load def
++/FL{
++currentgray exch setgray fill setgray
++}bind def
++/BL/fill load def
++/LW/setlinewidth load def
++/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
++/EBEGIN{
++moveto
++DEFS begin
++}bind def
++/EEND/end load def
++/CNT 0 def
++/level1 0 def
++/PBEGIN{
++/level1 save def
++translate
++div 3 1 roll div exch scale
++neg exch neg exch translate
++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 -aruN groff/font/devps/symbolsl.pfa groff.win32/font/devps/symbolsl.pfa
+--- groff/font/devps/symbolsl.pfa Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devps/symbolsl.pfa Wed May 17 08:57:48 2000
+@@ -0,0 +1,29 @@
++%!PS-Adobe-3.0 Resource-Font
++%%DocumentNeededResources: font Symbol
++/MakeTransformedFont{
++findfont dup maxlength dict begin
++{
++exch dup dup/FID ne exch/UniqueID ne and{
++exch def
++}{
++pop pop
++}ifelse
++}forall
++/FontBBox
++currentdict/FontBBox get
++4 array copy def
++FontBBox aload pop
++4 index transform 4 2 roll
++4 index transform 4 2 roll
++FontBBox astore pop
++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 -aruN groff/font/devps/zapfdr.pfa groff.win32/font/devps/zapfdr.pfa
+--- groff/font/devps/zapfdr.pfa Thu Jan 1 00:00:00 1970
++++ groff.win32/font/devps/zapfdr.pfa Wed May 17 08:57:48 2000
+@@ -0,0 +1,218 @@
++%!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 -aruN groff/src/devices/grodvi/Makefile.msc groff.win32/src/devices/grodvi/Makefile.msc
+--- groff/src/devices/grodvi/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/devices/grodvi/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,21 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c -nologo -I../../include -Tp$<
++
++.c.obj:
++ cl -c -nologo -I../../include $<
++
++OBJS = dvi.obj
++
++
++grodvi.exe : $(OBJS)
++ cl -nologo -Fe$@ *.obj ..\..\libs\libdriver\libdriver.lib ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/devices/grolj4/Makefile.msc groff.win32/src/devices/grolj4/Makefile.msc
+--- groff/src/devices/grolj4/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/devices/grolj4/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,22 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c -nologo -I../../include -Tp$<
++
++.c.obj:
++ cl -c -nologo -I../../include $<
++
++OBJS = \
++ lj4.obj
++
++
++grolj4.exe : $(OBJS)
++ cl -nologo -Fe$@ *.obj ..\..\libs\libdriver\libdriver.lib ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/devices/grops/Makefile.msc groff.win32/src/devices/grops/Makefile.msc
+--- groff/src/devices/grops/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/devices/grops/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,23 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c -nologo -I../../include -Tp$<
++
++.c.obj:
++ cl -c -nologo -I../../include $<
++
++OBJS = \
++ ps.obj \
++ psrm.obj
++
++
++grops.exe : $(OBJS)
++ cl -nologo -Fe$@ *.obj ..\..\libs\libdriver\libdriver.lib ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/devices/grotty/Makefile.msc groff.win32/src/devices/grotty/Makefile.msc
+--- groff/src/devices/grotty/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/devices/grotty/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,22 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c -nologo -I../../include -Tp$<
++
++.c.obj:
++ cl -c -nologo -I../../include $<
++
++OBJS = \
++ tty.obj
++
++
++grotty.exe : $(OBJS)
++ cl -nologo -Fe$@ *.obj ..\..\libs\libdriver\libdriver.lib ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/include/defs.h groff.win32/src/include/defs.h
+--- groff/src/include/defs.h Thu Jan 1 00:00:00 1970
++++ groff.win32/src/include/defs.h Wed May 17 08:57:48 2000
+@@ -0,0 +1,12 @@
++
++#define FONTPATH "c:/groff/font"
++
++#define MACROPATH "c:/groff/tmac;c:/groff/mm"
++
++#define DEVICE "ps"
++
++#define PROG_PREFIX ""
++
++#define popen _popen
++#define pclose _pclose
++
+diff -aruN groff/src/include/getopt.h groff.win32/src/include/getopt.h
+--- groff/src/include/getopt.h Sat Apr 8 06:04:36 2000
++++ groff.win32/src/include/getopt.h Wed May 17 08:57:48 2000
+@@ -150,7 +150,7 @@
+ int __long_only);
+ # endif
+ #else /* not __STDC__ */
+-extern int getopt ();
++extern int getopt (int a, char **b, char *c);
+ # ifndef __need_getopt
+ extern int getopt_long ();
+ extern int getopt_long_only ();
+diff -aruN groff/src/libs/libdriver/Makefile.msc groff.win32/src/libs/libdriver/Makefile.msc
+--- groff/src/libs/libdriver/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/libs/libdriver/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,22 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c -nologo -I../../include -Tp$<
++
++.c.obj:
++ cl -c -nologo -I../../include $<
++
++OBJS = \
++ input.obj \
++ printer.obj
++
++
++libdriver.lib : $(OBJS)
++ rm -zq $@
++ lib /NOLOGO /OUT:$@ *.obj
++
+diff -aruN groff/src/libs/libgroff/Makefile.msc groff.win32/src/libs/libgroff/Makefile.msc
+--- groff/src/libs/libgroff/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/libs/libgroff/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,53 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++#CFLAGS = -nologo -I../../include -GF -Zi -Yd -DHAVE_STRING_H=1
++CFLAGS = -nologo -I../../include -GF -Ox -DHAVE_STRING_H=1
++
++
++.SUFFIXES : .cc
++
++
++.cc.obj:
++ cl -c $(CFLAGS) -Tp$<
++
++.c.obj:
++ cl -c $(CFLAGS) $<
++
++
++OBJS = \
++ assert.obj \
++ change_lf.obj \
++ cmap.obj \
++ cset.obj \
++ device.obj \
++ errarg.obj \
++ error.obj \
++ fatal.obj \
++ filename.obj \
++ font.obj \
++ fontfile.obj \
++ getopt.obj \
++ htmlindicate.obj \
++ iftoa.obj \
++ illegal.obj \
++ itoa.obj \
++ lf.obj \
++ lineno.obj \
++ macropath.obj \
++ nametoindex.obj \
++ progname.obj \
++ ptable.obj \
++ searchpath.obj \
++ string.obj \
++ strsave.obj \
++ tmpfile.obj \
++ version.obj
++
++
++libgroff.lib : $(OBJS)
++ rm -zq $@
++ lib /NOLOGO /OUT:$@ *.obj
++
+diff -aruN groff/src/libs/libgroff/version.cc groff.win32/src/libs/libgroff/version.cc
+--- groff/src/libs/libgroff/version.cc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/libs/libgroff/version.cc Wed May 17 08:57:48 2000
+@@ -0,0 +1,3 @@
++const char *version_string = "1.16";
++const char *revision_string = "1";
++const char *Version_string = "1.16";
+diff -aruN groff/src/preproc/eqn/Makefile.msc groff.win32/src/preproc/eqn/Makefile.msc
+--- groff/src/preproc/eqn/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/preproc/eqn/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,39 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++#CFLAGS = -nologo -I../../include -GF -Zi -Yd
++CFLAGS = -nologo -I../../include -GF -Ox
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c $(CFLAGS) -Tp$<
++
++.c.obj:
++ cl -c $(CFLAGS) $<
++
++OBJS = \
++ box.obj \
++ delim.obj \
++ eqn.obj \
++ lex.obj \
++ limit.obj \
++ list.obj \
++ main.obj \
++ mark.obj \
++ other.obj \
++ over.obj \
++ pile.obj \
++ script.obj \
++ special.obj \
++ sqrt.obj \
++ text.obj
++
++
++eqn.exe : $(OBJS)
++ cl $(CFLAGS) -Fe$@ *.obj ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/preproc/pic/Makefile.msc groff.win32/src/preproc/pic/Makefile.msc
+--- groff/src/preproc/pic/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/preproc/pic/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,31 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++#CFLAGS = -nologo -I../../include -GF -Zi -Yd -DRET_TYPE_SRAND_IS_VOID
++CFLAGS = -nologo -I../../include -GF -Ox -DRET_TYPE_SRAND_IS_VOID
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c $(CFLAGS) -Tp$<
++
++.c.obj:
++ cl -c $(CFLAGS) $<
++
++OBJS = \
++ common.obj \
++ lex.obj \
++ main.obj \
++ object.obj \
++ pic.obj \
++ tex.obj \
++ troff.obj
++
++
++pic.exe : $(OBJS)
++ cl $(CFLAGS) -Fe$@ *.obj ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/preproc/tbl/Makefile.msc groff.win32/src/preproc/tbl/Makefile.msc
+--- groff/src/preproc/tbl/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/preproc/tbl/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,26 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++#CFLAGS = -nologo -I../../include -GF -Zi -Yd
++CFLAGS = -nologo -I../../include -GF -Ox
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c $(CFLAGS) -Tp$<
++
++.c.obj:
++ cl -c $(CFLAGS) $<
++
++OBJS = \
++ main.obj \
++ table.obj
++
++
++tbl.exe : $(OBJS)
++ cl $(CFLAGS) -Fe$@ *.obj ..\..\libs\libgroff\libgroff.lib
++
++
++
+diff -aruN groff/src/roff/troff/Makefile.msc groff.win32/src/roff/troff/Makefile.msc
+--- groff/src/roff/troff/Makefile.msc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/roff/troff/Makefile.msc Wed May 17 08:57:48 2000
+@@ -0,0 +1,34 @@
++
++# Makefile for Microsoft Visual C++ 6.0
++# by Blake McBride (blake@florida-software.com)
++
++
++#CFLAGS = -nologo -I../../include -GF -Zi -Yd
++CFLAGS = -nologo -I../../include -GF -Ox
++
++.SUFFIXES : .cc
++
++.cc.obj:
++ cl -c $(CFLAGS) -Tp$<
++
++.c.obj:
++ cl -c $(CFLAGS) $<
++
++OBJS = \
++ column.obj \
++ dictionary.obj \
++ div.obj \
++ env.obj \
++ input.obj \
++ node.obj \
++ number.obj \
++ reg.obj \
++ symbol.obj \
++ majorminor.obj
++
++
++troff.exe : $(OBJS)
++ cl $(CFLAGS) -Fe$@ *.obj ..\..\libs\libgroff\libgroff.lib -link -map
++
++
++
+diff -aruN groff/src/roff/troff/majorminor.cc groff.win32/src/roff/troff/majorminor.cc
+--- groff/src/roff/troff/majorminor.cc Thu Jan 1 00:00:00 1970
++++ groff.win32/src/roff/troff/majorminor.cc Wed May 17 08:57:48 2000
+@@ -0,0 +1,3 @@
++const char *major_version = "1";
++const char *minor_version = "16";
++const char *revision = "0";
diff --git a/contrib/groff/xditview/ChangeLog b/contrib/groff/xditview/ChangeLog
index 6dffe9eca9ac..88235e6b17f6 100644
--- a/contrib/groff/xditview/ChangeLog
+++ b/contrib/groff/xditview/ChangeLog
@@ -1,3 +1,37 @@
+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.
@@ -293,7 +327,7 @@ Sun May 26 14:14:01 1991 James Clark (jjc at jclark)
* 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.
diff --git a/contrib/groff/xditview/Dvi.c b/contrib/groff/xditview/Dvi.c
index 5eae76d8b06e..08eb810a7bc8 100644
--- a/contrib/groff/xditview/Dvi.c
+++ b/contrib/groff/xditview/Dvi.c
@@ -379,15 +379,9 @@ static void CloseFile (dw)
static void OpenFile (dw)
DviWidget dw;
{
- char tmpName[sizeof ("/tmp/dviXXXXXX")];
-
dw->dvi.tmpFile = 0;
- if (!dw->dvi.seek) {
- strcpy (tmpName, "/tmp/dviXXXXXX");
- mktemp (tmpName);
- dw->dvi.tmpFile = fopen (tmpName, "w+");
- unlink (tmpName);
- }
+ if (!dw->dvi.seek)
+ dw->dvi.tmpFile = tmpfile();
dw->dvi.requested_page = 1;
dw->dvi.last_page = 0;
}
diff --git a/contrib/groff/xditview/DviChar.c b/contrib/groff/xditview/DviChar.c
index 90c636984805..2aaba459a28d 100644
--- a/contrib/groff/xditview/DviChar.c
+++ b/contrib/groff/xditview/DviChar.c
@@ -166,12 +166,12 @@ static DviCharNameMap ISO8859_1_map = {
{ 0, /* 31 */},
{ 0, /* 32 */},
{ "!", /* 33 */},
-{ "\"", /* 34 */},
+{ "\"","dq", /* 34 */},
{ "#","sh", /* 35 */},
{ "$","Do", /* 36 */},
{ "%", /* 37 */},
{ "&", /* 38 */},
-{ "'", /* 39 */},
+{ "'","cq", /* 39 */},
{ "(", /* 40 */},
{ ")", /* 41 */},
{ "*", /* 42 */},
@@ -317,7 +317,7 @@ static DviCharNameMap ISO8859_1_map = {
symbol font. */
{ "\265", /* 181 */},
{ "ps", "\266", /* 182 */},
-{ "md", "\267", /* 183 */},
+{ "pc", "\267", /* 183 */},
{ "ac", "\270", /* 184 */},
{ "S1", "\271", /* 185 */},
{ "Om", "\272", /* 186 */},
diff --git a/contrib/groff/xditview/Imakefile.in b/contrib/groff/xditview/Imakefile.in
new file mode 100644
index 000000000000..a720205619b9
--- /dev/null
+++ b/contrib/groff/xditview/Imakefile.in
@@ -0,0 +1,99 @@
+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/README b/contrib/groff/xditview/README
index 7e061b03ef67..b18f64a7be64 100644
--- a/contrib/groff/xditview/README
+++ b/contrib/groff/xditview/README
@@ -1,7 +1,7 @@
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 to install it (it might
-work on X11R4, but I haven't tested it.)
+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.
diff --git a/contrib/groff/xditview/xtotroff.c b/contrib/groff/xditview/xtotroff.c
index 3e4e78bc2240..97cac0a5893f 100644
--- a/contrib/groff/xditview/xtotroff.c
+++ b/contrib/groff/xditview/xtotroff.c
@@ -7,6 +7,9 @@
#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"
@@ -148,8 +151,13 @@ MapFont (font_name, troff_name)
printf ("%s -> %s\n", names[0], troff_name);
- (void) unlink (troff_name);
- out = fopen (troff_name, "w");
+ { /* 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;